annotate host/libcdl/doc/concepts.sgml @ 2729:74dbf4c3f2e1 after-copyright-change-20090129

Update all copyright banners to reflect FSF ownership; fix and improve licence text.
author jlarmour
date Thu, 29 Jan 2009 17:47:46 +0000
parents c9cbf5dfb306
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
1 <!-- {{{ Banner -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
2
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
3 <!-- =============================================================== -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
4 <!-- -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
5 <!-- concepts.sgml -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
6 <!-- -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
7 <!-- Introductory chapter. -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
8 <!-- -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
9 <!-- =============================================================== -->
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
10 <!-- ####ECOSDOCCOPYRIGHTBEGIN#### -->
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
11 <!-- =============================================================== -->
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
12 <!-- Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. -->
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
13 <!-- This material may be distributed only subject to the terms -->
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
14 <!-- and conditions set forth in the Open Publication License, v1.0 -->
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
15 <!-- or later (the latest version is presently available at -->
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
16 <!-- http://www.opencontent.org/openpub/) -->
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
17 <!-- Distribution of the work or derivative of the work in any -->
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
18 <!-- standard (paper) book form is prohibited unless prior -->
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
19 <!-- permission obtained from the copyright holder -->
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
20 <!-- =============================================================== -->
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
21 <!-- ####ECOSDOCCOPYRIGHTEND#### -->
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
22 <!-- =============================================================== -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
23 <!-- #####DESCRIPTIONBEGIN#### -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
24 <!-- -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
25 <!-- Author(s): bartv -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
26 <!-- Contact(s): bartv -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
27 <!-- Date: 2000/02/06 -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
28 <!-- Version: 0.01 -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
29 <!-- -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
30 <!-- ####DESCRIPTIONEND#### -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
31 <!-- =============================================================== -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
32
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
33 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
34
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
35 <chapter id="overview">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
36 <title>Overview</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
37
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
38 <!-- {{{ Introit -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
39
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
40 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
41 &eCos; was designed from the very beginning as a configurable
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
42 component architecture. The core &eCos; system consists of a number of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
43 different components such as the kernel, the C library, an
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
44 infrastructure package. Each of these provides a large number of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
45 configuration options, allowing application developers to build a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
46 system that matches the requirements of their particular application.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
47 To manage the potential complexity of multiple components and lots of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
48 configuration options, &eCos; comes with a component framework: a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
49 collection of tools specifically designed to support configuring
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
50 multiple components. Furthermore this component framework is
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
51 extensible, allowing additional components to be added to the system
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
52 at any time.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
53 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
54
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
55 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
56 <!-- {{{ Terminology -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
57
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
58 <sect1 id="overview.terminology">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
59 <title>Terminology</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
60 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
61 The &eCos; component architecture involves a number of key concepts.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
62 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
63
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
64 <!-- {{{ Component Framework -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
65
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
66 <sect2 id="concepts.terminology.framework">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
67 <title>Component Framework</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
68
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
69 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
70 The phrase <phrase>component framework</phrase> is used to describe
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
71 the collection of tools that allow users to configure a system and
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
72 administer a component repository. This includes the <application
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
73 class="software">ecosconfig</application> command line tool, the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
74 graphical configuration tool, and the package administration tool.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
75 Both the command line and graphical tools are based on a single
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
76 underlying library, the &CDL; library.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
77 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
78
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
79 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
80
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
81 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
82 <!-- {{{ Option -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
83
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
84 <sect2 id="concepts.terminology.option">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
85 <title>Configuration Option</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
86 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
87 The option is the basic unit of configurability. Typically each option
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
88 corresponds to a single choice that a user can make. For example there
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
89 is an option to control whether or not assertions are enabled, and the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
90 kernel provides an option corresponding to the number of scheduling
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
91 priority levels in the system. Options can control very small amounts
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
92 of code such as whether or not the C library's
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
93 <function>strtok</function> gets inlined. They can also control quite
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
94 large amounts of code, for example whether or not the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
95 <function>printf</function> supports floating point conversions.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
96 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
97 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
98 Many options are straightforward, and the user only gets to choose
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
99 whether the option is enabled or disabled. Some options are more
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
100 complicated, for example the number of scheduling priority levels is a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
101 number that should be within a certain range. Options should always
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
102 start off with a sensible default setting, so that it is not necessary
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
103 for users to make hundreds of decisions before any work can start on
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
104 developing the application. Once the application is running the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
105 various configuration options can be used to tune the system for the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
106 specific needs of the application.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
107 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
108 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
109 The component framework allows for options that are not directly
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
110 user-modifiable. Consider the case of processor endianness: some
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
111 processors are always big-endian or always little-endian, while with
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
112 other processors there is a choice. Depending on the user's choice of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
113 target hardware, endianness may or may not be user-modifiable.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
114 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
115 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
116
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
117 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
118 <!-- {{{ Component -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
119
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
120 <sect2 id="concepts.terminology.component">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
121 <title>Component</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
122 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
123 A component is a unit of functionality such as a particular kernel
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
124 scheduler or a device driver for a specific device. A component is
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
125 also a configuration option in that users may want to enable
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
126 or disable all the functionality in a component. For example, if a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
127 particular device on the target hardware is not going to be used by
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
128 the application, directly or indirectly, then there is no point in
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
129 having a device driver for it. Furthermore disabling the device driver
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
130 should reduce the memory requirements for both code and data.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
131 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
132 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
133 Components may contain further configuration options. In the case of a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
134 device driver, there may be options to control the exact behavior of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
135 that driver. These will of course be irrelevant if the driver as a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
136 whole is disabled. More generally options and components live in a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
137 hierarchy, where any component can contain options specific to that
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
138 component and further sub-components. It is possible to view the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
139 entire &eCos; kernel as one big component, containing sub-components
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
140 for scheduling, exception handling, synchronization primitives, and so
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
141 on. The synchronization primitives component can contain further
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
142 sub-components for mutexes, semaphores, condition variables, event
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
143 flags, and so on. The mutex component can contain configuration
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
144 options for issues like priority inversion support.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
145 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
146 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
147
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
148 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
149 <!-- {{{ Package -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
150
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
151 <sect2 id="concepts.terminology.package">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
152 <title>Package</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
153 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
154 A package is a special type of component. Specifically, a package is
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
155 the unit of distribution of components. It is possible to create a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
156 distribution file for a package containing all of the source code,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
157 header files, documentation, and other relevant files. This
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
158 distribution file can then be installed using the appropriate tool.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
159 Afterwards it is possible to uninstall that package, or to install a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
160 later version. The core &eCos; distribution comes with a number of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
161 packages such as the kernel and the infrastructure. Other packages
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
162 such as network stacks can come from various different sources and can
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
163 be installed alongside the core distribution.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
164 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
165 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
166 Packages can be enabled or disabled, but the user experience is a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
167 little bit different. Generally it makes no sense for the tools to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
168 load the details of every single package that has been installed. For
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
169 example, if the target hardware uses an ARM processor then there is no
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
170 point in loading the HAL packages for other architectures and
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
171 displaying choices to the user which are not relevant. Therefore
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
172 enabling a package means loading its configuration data into the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
173 appropriate tool, and disabling a package is an unload operation. In
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
174 addition, packages are not just enabled or disabled: it is also
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
175 possible to select the particular version of a package that should be
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
176 used.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
177 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
178 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
179
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
180 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
181 <!-- {{{ Configuration -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
182
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
183 <sect2 id="concepts.terminology.configuration">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
184 <title>Configuration</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
185 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
186 A configuration is a collection of user choices. The various
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
187 tools that make up the component framework deal with entire
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
188 configurations. Users can create a new configuration, output a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
189 savefile (by default <filename>ecos.ecc</filename>), manipulate a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
190 configuration, and use a configuration to generate a build tree prior
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
191 to building &eCos; and any other packages that have been selected.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
192 A configuration includes details such as which packages have been
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
193 selected, in addition to finer-grained information such as which
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
194 options in those packages have been enabled or disabled by the user.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
195 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
196 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
197
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
198 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
199 <!-- {{{ Target -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
200
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
201 <sect2 id="concepts.terminology.target">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
202 <title>Target</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
203 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
204 The target is the specific piece of hardware on which the application
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
205 is expected to run. This may be an off-the-shelf evaluation board, a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
206 piece of custom hardware intended for a specific application, or it
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
207 could be something like a simulator. One of the steps when creating a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
208 new configuration is need to specify the target. The component
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
209 framework will map this on to a set of packages that are used to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
210 populate the configuration, typically HAL and device driver packages,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
211 and in addition it may cause certain options to be changed from their
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
212 default settings to something more appropriate for the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
213 specified target.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
214 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
215 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
216
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
217 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
218 <!-- {{{ Template -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
219
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
220 <sect2 id="concepts.terminology.template">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
221 <title>Template</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
222 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
223 A template is a partial configuration, aimed at providing users with
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
224 an appropriate starting point. &eCos; is shipped with a small number
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
225 of templates, which correspond closely to common ways of using the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
226 system. There is a minimal template which provides very little
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
227 functionality, just enough to bootstrap the hardware and then jump
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
228 directly to application code. The default template adds additional
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
229 functionality, for example it causes the kernel and C library packages
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
230 to be loaded as well. The uitron template adds further functionality
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
231 in the form of a &uITRON; compatibility layer. Creating a new
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
232 configuration typically involves specifying a template as well as a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
233 target, resulting in a configuration that can be built and linked with
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
234 the application code and that will run on the actual hardware. It is
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
235 then possible to fine-tune configuration options to produce something
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
236 that better matches the specific requirements of the application.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
237 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
238 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
239
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
240 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
241 <!-- {{{ Properties -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
242
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
243 <sect2 id="concepts.terminology.properties">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
244 <title>Properties</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
245 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
246 The component framework needs a certain amount of information about
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
247 each option. For example it needs to know what the legal values are,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
248 what the default should be, where to find the on-line documentation if
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
249 the user needs to consult that in order to make a decision, and so on.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
250 These are all properties of the option. Every option (including
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
251 components and packages) consists of a name and a set of properties.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
252 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
253 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
254
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
255 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
256 <!-- {{{ Consequences -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
257
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
258 <sect2 id="concepts.terminology.consequences">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
259 <title>Consequences</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
260 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
261 Choices must have consequences. For an &eCos; configuration the main
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
262 end product is a library that can be linked with application code, so
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
263 the consequences of a user choice must affect the build process. This
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
264 happens in two main ways. First, options can affect which files get
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
265 built and end up in the library. Second, details of the current option
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
266 settings get written into various configuration header files using C
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
267 preprocessor <literal>#define</literal> directives, and package source
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
268 code can <literal>#include</literal> these configuration headers and
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
269 adapt accordingly. This allows options to affect a package at a very
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
270 fine grain, at the level of individual lines in a source file if
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
271 desired. There may be other consequences as well, for example there
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
272 are options to control the compiler flags that get used during the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
273 build process.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
274 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
275 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
276
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
277 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
278 <!-- {{{ Constraints -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
279
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
280 <sect2 id="concepts.terminology.constraints">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
281 <title>Constraints</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
282 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
283 Configuration choices are not independent. The C library can provide
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
284 thread-safe implementations of functions like
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
285 <function>rand</function>, but only if the kernel provides support for
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
286 per-thread data. This is a constraint: the C library option has a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
287 requirement on the kernel. A typical configuration involves a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
288 considerable number of constraints, of varying complexity: many
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
289 constraints are straightforward, option <literal>A</literal> requires
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
290 option <literal>B</literal>, or option <literal>C</literal> precludes
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
291 option <literal>D</literal>. Other constraints can be more
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
292 complicated, for example option <literal>E</literal> may require the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
293 presence of a kernel scheduler but does not care whether it is the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
294 bitmap scheduler, the mlqueue scheduler, or something else.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
295 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
296 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
297 Another type of constraint involves the values that can be used for
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
298 certain options. For example there is a kernel option related to the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
299 number of scheduling levels, and there is a legal values constraint on
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
300 this option: specifying zero or a negative number for the number of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
301 scheduling levels makes no sense.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
302 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
303 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
304
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
305 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
306 <!-- {{{ Conflicts -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
307
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
308 <sect2 id="concepts.terminology.conflicts">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
309 <title>Conflicts</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
310 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
311 As the user manipulates options it is possible to end up with an
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
312 invalid configuration, where one or more constraints are not
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
313 satisfied. For example if kernel per-thread data is disabled but the C
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
314 library's thread-safety options are left enabled then there are
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
315 unsatisfied constraints, also known as conflicts. Such conflicts will
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
316 be reported by the configuration tools. The presence of conflicts does
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
317 not prevent users from attempting to build &eCos;, but the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
318 consequences are undefined: there may be compile-time failures, there
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
319 may be link-time failures, the application may completely fail to run,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
320 or the application may run most of the time but once in a while there
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
321 will be a strange failure&hellip; Typically users will want to resolve
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
322 all conflicts before continuing.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
323 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
324 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
325 To make things easier for the user, the configuration tools contain an
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
326 inference engine. This can examine a conflict in a particular
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
327 configuration and try to figure out some way of resolving the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
328 conflict. Depending on the particular tool being used, the inference
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
329 engine may get invoked automatically at certain times or the user may
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
330 need to invoke it explicitly. Also depending on the tool, the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
331 inference engine may apply any solutions it finds automatically or it
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
332 may request user confirmation.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
333 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
334 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
335
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
336 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
337 <!-- {{{ CDL -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
338
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
339 <sect2 id="concepts.terminology.cdl">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
340 <title>CDL</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
341 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
342 The configuration tools require information about the various options
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
343 provided by each package, their consequences and constraints, and
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
344 other properties such as the location of on-line documentation. This
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
345 information has to be provided in the form of &CDL; scripts. CDL
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
346 is short for Component Definition Language, and is specifically
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
347 designed as a way of describing configuration options.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
348 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
349 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
350 A typical package contains the following:
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
351 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
352 <orderedlist>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
353 <listitem><para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
354 Some number of source files which will end up in a library. The
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
355 application code will be linked with this library to produce an
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
356 executable. Some source files may serve other purposes, for example to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
357 provide a linker script.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
358 </para></listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
359 <listitem><para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
360 Exported header files which define the interface provided by the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
361 package.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
362 </para></listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
363 <listitem><para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
364 On-line documentation, for example reference pages for each exported
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
365 function.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
366 </para></listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
367 <listitem><para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
368 Some number of test cases, shipped in source format, allowing users to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
369 check that the package is working as expected on their particular
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
370 hardware and in their specific configuration.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
371 </para></listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
372 <listitem><para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
373 One or more &CDL; scripts describing the package to the configuration
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
374 system.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
375 </para></listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
376 </orderedlist>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
377 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
378 Not all packages need to contain all of these. For example some
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
379 packages such as device drivers may not provide a new interface,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
380 instead they just provide another implementation of an existing
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
381 interface. However all packages must contain a &CDL; script that
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
382 describes the package to the configuration tools.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
383 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
384 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
385
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
386 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
387 <!-- {{{ Component Repository -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
388
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
389 <sect2 id="concepts.terminology.repo">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
390 <title>Component Repository</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
391 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
392 All &eCos; installations include a component repository. This is a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
393 directory structure where all the packages get installed. The
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
394 component framework comes with an administration tool that allows new
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
395 packages or new versions of a package to be installed, old packages to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
396 be removed, and so on. The component repository includes a simple
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
397 database, maintained by the administration tool, which contains
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
398 details of the various packages.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
399 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
400 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
401 Generally application developers do not need to modify anything inside
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
402 the component repository, except by means of the administration tool.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
403 Instead their work involves separate build and install trees. This
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
404 allows the component repository to be treated as a read-only resource
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
405 that can be shared by multiple projects and multiple users. Component
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
406 writers modifying one of the packages do need to manipulate files in
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
407 the component repository.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
408 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
409 </sect2>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
410
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
411 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
412
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
413 </sect1>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
414
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
415 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
416 <!-- {{{ Why configurability ? -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
417
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
418 <sect1 id="overview.configurability">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
419 <title>Why Configurability?</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
420 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
421 The &eCos; component framework places a great deal of emphasis on
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
422 configurability. The fundamental goal is to allow large parts of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
423 embedded applications to be constructed from re-usable software
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
424 components, which does not a priori require that those components be
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
425 highly configurable. However embedded application development often
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
426 involves some serious constraints.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
427 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
428 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
429 Many embedded applications have to work with very little memory, to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
430 keep down manufacturing costs. The final application image that will
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
431 get blown into EPROM's or used to manufacture ROMs should contain only
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
432 the code that is absolutely necessary for the application to work, and
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
433 nothing else. If a few tens of kilobytes are added unnecessarily to a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
434 typical desktop application then this is regrettable, but is quite
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
435 likely to go unnoticed. If an embedded application does not fit on the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
436 target hardware then the problem is much more serious. The component
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
437 framework must allow users to configure the components so that any
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
438 unnecessary functionality gets removed.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
439 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
440 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
441 Many embedded applications need deterministic behavior so that they
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
442 can meet real-time requirements. Such deterministic behavior can
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
443 often be provided, but at a cost in terms of code size, slower
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
444 algorithms, and so on. Other applications have no such real-time
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
445 requirements, or only for a small part of the overall system, and the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
446 bulk of the system should not suffer any penalties. Again the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
447 component framework must allow the users control over the timing
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
448 behavior of components.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
449 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
450 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
451 Embedded systems tend to be difficult to debug. Even when it is
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
452 possible to get information out of the target hardware by means other
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
453 than flashing an LED, the more interesting debugging problems are
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
454 likely to be timing-related and hence very hard to reproduce and track
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
455 down. The re-usable components can provide debugging assistance in
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
456 various ways. They can provide functionality that can be exploited by
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
457 source level debuggers such as gdb, for example per-thread debugging
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
458 information. They can also contain various assertions so that problems
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
459 can be detected early on, tracing mechanisms to figure out what
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
460 happened before the assertion failure, and so on. Of course all of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
461 these involve overheads, especially code size, and affect the timing.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
462 Allowing users to control which debugging features are enabled for any
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
463 given application build is very desirable.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
464 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
465 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
466 However, although it is desirable for re-usable components to provide
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
467 appropriate configuration options this is not required. It is possible
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
468 to produce a package which does not provide a single configuration
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
469 option&nbsp;&mdash;&nbsp;although the user still gets to choose
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
470 whether or not to use the package. In such cases it is still necessary
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
471 to provide a minimal CDL script, but its main purpose would be to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
472 integrate the package with the component framework's build system.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
473 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
474 </sect1>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
475
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
476 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
477 <!-- {{{ Approaches -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
478
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
479 <sect1 id="overview.approaches">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
480 <title>Approaches to Configurability</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
481
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
482 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
483 The purpose of configurability is to control the behavior of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
484 components. A scheduler component may or may not support time slicing;
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
485 it may or may not support multiple priorities; it may or may not
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
486 perform error checking on arguments passed to the scheduler routines.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
487 In the context of a desktop application a button widget may contain
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
488 some text or it may contain a picture; the text may be displayed in a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
489 variety of fonts; the foreground and background color may vary. When
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
490 an application uses a component there must be some way of specifying
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
491 the desired behavior. The component writer has no way of knowing in
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
492 advance exactly how a particular component will end up being used.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
493 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
494 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
495 One way to control the behavior is at run time. The application
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
496 creates an instance of a button object, and then instructs this object
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
497 to display either text or a picture. No special effort by the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
498 application developer is required, since a button can always support
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
499 all desired behavior. There is of course a major disadvantage in
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
500 terms of the size of the final application image: the code that gets
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
501 linked with the application has to provide support for all possible
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
502 behavior, even if the application does not require it.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
503 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
504 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
505 Another approach is to control the behavior at link-time, typically
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
506 by using inheritance in an object-oriented language. The button
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
507 library provides an abstract base class <classname>Button</classname>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
508 and derived classes <classname>TextButton</classname> and
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
509 <classname>PictureButton</classname>. If an application only uses text
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
510 buttons then it will only create objects of type
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
511 <classname>TextButton</classname>, and the code for the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
512 <classname>PictureButton</classname> class does not get used. In
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
513 many cases this approach works rather well and reduces the final image
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
514 size, but there are limitations. The main one is that you can only
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
515 have so many derived classes before the system gets unmanageable: a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
516 derived class
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
517 <classname>TextButtonUsingABorderWidthOfOnePlusAWhiteBackgroundAndBlackForegroundAndATwelvePointTimesFontAndNoErrorCheckingOrAssertions</classname>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
518 is not particularly sensible as far as most application developers are
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
519 concerned.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
520 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
521 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
522 The &eCos; component framework allows the behavior of components to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
523 be controlled at an even earlier time: when the component source code
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
524 gets compiled and turned into a library. The button component could
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
525 provide options, for example an option that only text buttons need to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
526 be supported. The component gets built and becomes part of a library
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
527 intended specifically for the application, and the library will
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
528 contain only the code that is required by this application and nothing
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
529 else. A different application with different requirements would need
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
530 its own version of the library, configured separately.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
531 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
532 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
533 In theory compile-time configurability should give the best possible
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
534 results in terms of code size, because it allows code to be controlled
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
535 at the individual statement level rather than at the function or
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
536 object level. Consider an example more closely related to embedded
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
537 systems, a package to support multi-threading. A standard routine
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
538 within such a package allows applications to kill threads
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
539 asynchronously: the POSIX routine for this is
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
540 <function>pthread_cancel</function>; the equivalent routine in &uITRON;
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
541 is <function>ter_tsk</function>. These routines themselves tend to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
542 involve a significant amount of code, but that is not the real
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
543 problem: other parts of the system require extra code and data for the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
544 kill routine to be able to function correctly. For example if a thread
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
545 is blocked while waiting on a mutex and is killed off by another
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
546 thread then the kill operation may have to do two things: remove the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
547 thread from the mutex's queue of waiting threads; and undo the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
548 effects, if any, of priority inheritance. The implementation requires
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
549 extra fields in the thread data structure so that the kill routine
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
550 knows about the thread's current state, and extra code in the mutex
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
551 routines to fill in and clear these extra fields correctly.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
552 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
553 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
554 Most embedded applications do not require the ability to kill off a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
555 thread asynchronously, and hence the kill routine will not get linked
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
556 into the final application image. Without compile-time configurability
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
557 this would still mean that the mutex code and similar parts of the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
558 system contain code and data that serve no useful purpose in this
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
559 application. The &eCos; approach allows the user to select that the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
560 thread kill functionality is not required, and all the components can
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
561 adapt to this at compile-time. For example the code in the mutex lock
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
562 routine contains statements to support the killing of threads, but
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
563 these statements will only get compiled in if that functionality is
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
564 required. The overall result is that the final application image
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
565 contains only the code and data that is really needed for the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
566 application to work, and nothing else.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
567 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
568 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
569 Of course there are complications. To return to the button example,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
570 the application code might only use text buttons directly, but it
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
571 might also use some higher-level widget such as a file selector and
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
572 this file selector might require buttons with pictures. Therefore the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
573 button code must still be compiled to support pictures as well as
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
574 text. The configuration tools must be aware of the dependencies
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
575 between components and ensure that the internal constraints are met,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
576 as well as the external requirements of the application code. An area
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
577 of particular concern is conflicting requirements: a button component
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
578 might be written in such a way that it can only support either text
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
579 buttons or picture buttons, but not both in one application; this
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
580 would represent a weakness in the component itself rather than in the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
581 component framework as a whole.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
582 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
583 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
584 Compile-time configurability is not intended to replace the other
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
585 approaches but rather to complement them. There will be times when
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
586 run-time selection of behavior is desirable: for example an
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
587 application may need to be able to change the baud rate of a serial
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
588 line, and the system must then provide a way of doing this at
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
589 run-time. There will also be times when link-time selection is
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
590 desirable: for example a C library might provide two different random
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
591 number routines <function>rand</function> and
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
592 <function>lrand48</function>; these do not affect other code so there
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
593 is no good reason for the C library component not to provide both of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
594 these, and allow the application code to use none, one, or both of
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
595 them as appropriate; any unused functions will just get eliminated at
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
596 link-time. Compile-time selection of behavior is another option, and
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
597 it can be the most powerful one of the three and the best suited to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
598 embedded systems development.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
599 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
600
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
601 </sect1>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
602
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
603 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
604 <!-- {{{ Degrees -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
605
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
606 <sect1 id="overview.degress">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
607 <title>Degrees of Configurability</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
608
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
609 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
610 Components can support configurability in varying degrees. It is not
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
611 necessary to have any configuration options at all, and the only user
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
612 choice is whether or not to load a particular package. Alternatively
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
613 it is possible to implement highly-configurable code. As an example
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
614 consider a typical facility that is provided by many real-time
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
615 kernels, mutex locks. The possible configuration options include:
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
616 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
617
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
618 <orderedlist>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
619
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
620 <listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
621 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
622 If no part of the application and no other component requires mutexes
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
623 then there is no point in having the mutex code compiled into a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
624 library at all. This saves having to compile the code. In addition
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
625 there will never be any need for the user to configure the detailed
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
626 behavior of mutexes. Therefore the presence of mutexes is a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
627 configuration option in itself.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
628 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
629 </listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
630
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
631 <listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
632 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
633 Even if the application does make use of mutexes directly or
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
634 indirectly, this does not mean that all mutex functions have to be
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
635 included. The minimum functionality consists of lock and unlock
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
636 functions. However there are variants of the locking primitive such as
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
637 try-lock and try-with-timeout which may or may not be needed.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
638 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
639 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
640 Generally it will be harmless to compile the try-lock function even if
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
641 it is not actually required, because the function will get eliminated
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
642 at link-time. Some users might take the view that the try-lock
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
643 function should never get compiled in unless it is actually needed, to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
644 reduce compile-time and disk usage. Other users might argue that there
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
645 are very few valid uses for a try-lock function and it should not be
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
646 compiled by default to discourage incorrect uses. The presence of a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
647 try-lock function is a possible configuration option, although it may
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
648 be sensible to default it to true.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
649 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
650 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
651 The try-with-timeout variant is more complicated because it adds a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
652 dependency: the mutex code will now rely on some other component to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
653 provide a timer facility. To make things worse the presence of this
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
654 timer might impact other components, for example it may now be
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
655 necessary to guard against timer interrupts, and thus have an
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
656 insidious effect on code size. The presence of a lock-with-timeout
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
657 function is clearly a sensible configuration option, but the default
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
658 value is less obvious. If the option is enabled by default then the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
659 final application image may end up with code that is not actually
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
660 essential. If the option is disabled by default then users will have
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
661 to enable the option somehow in order to use the function, implying
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
662 more effort on the part of the user. One possible approach is to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
663 calculate the default value based on whether or not a timer component
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
664 is present anyway.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
665 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
666 </listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
667
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
668 <listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
669 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
670 The application may or may not require the ability to create and
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
671 destroy mutexes dynamically. For most embedded systems it is both less
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
672 error-prone and more efficient to create objects like mutexes
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
673 statically. Dynamic creation of mutexes can be implemented using a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
674 pre-allocated pool of mutex objects, involving some extra code to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
675 manipulate the pool and an additional configuration option to define
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
676 the size of the pool. Alternatively it can be implemented using a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
677 general-purpose memory allocator, involving quite a lot of extra code
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
678 and configuration options. However this general-purpose memory
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
679 allocator may be present anyway to support the application itself or
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
680 some other component. The ability to create and destroy mutexes
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
681 dynamically is a configuration option, and there may not be a sensible
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
682 default that is appropriate for all applications.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
683 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
684 </listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
685
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
686 <listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
687 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
688 An important issue for mutex locks is the handling of priority
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
689 inversion, where a high priority thread is prevented from running
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
690 because it needs a lock owned by a lower priority thread. This is only
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
691 an issue if there is a scheduler with multiple priorities: some
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
692 systems may need multi-threading and hence synchronization primitives,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
693 but a single priority level may suffice. If priority inversion is a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
694 theoretical possibility then the application developer may still want
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
695 to ignore it because the application has been designed such that the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
696 problem cannot arise in practice. Alternatively the developer may want
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
697 some sort of exception raised if priority inversion does occur,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
698 because it should not happen but there may still be bugs in the code.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
699 If priority inversion can occur legally then there are three main ways
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
700 of handling it: priority ceilings, priority inheritance, and ignoring
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
701 the problem. Priority ceilings require little code but extra effort on
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
702 the part of the application developer. Priority inheritance requires
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
703 more code but is automatic. Ignoring priority inversion may or may not
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
704 be acceptable, depending on the application and exactly when priority
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
705 inversion can occur. Some of these choices involve additional
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
706 configuration options, for example there are different ways of raising
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
707 an exception, and priority inheritance may or may not be applied
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
708 recursively.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
709 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
710 </listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
711
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
712 <listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
713 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
714 As a further complication some mutexes may be hidden inside a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
715 component rather than being an explicit part of the application. For
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
716 example, if the C library is configured to provide a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
717 <function>malloc</function> call then there may be an associated mutex
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
718 to make the function automatically thread-safe, with no need for
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
719 external locking. In such cases the memory allocation component of the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
720 C library can impose a constraint on the kernel, requiring that
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
721 mutexes be provided. If the user attempts to disable mutexes anyway
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
722 then the configuration tools will report a conflict.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
723 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
724 </listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
725
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
726 <listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
727 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
728 The mutex code should contain some general debugging code such as
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
729 assertions and tracing. Usually such debug support will be enabled or
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
730 disabled at a coarse level such as the entire system or everything
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
731 inside the kernel, but sometimes it will be desirable to enable the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
732 support more selectively. One reason would be memory requirements: the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
733 target may not have enough memory to hold the system if all debugging
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
734 is enabled. Another reason is if most of the system is working but
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
735 there are a few problems still to resolved; enabling debugging in the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
736 entire system might change the system's timing behavior too much, but
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
737 enabling some debug options selectively can still be useful. There
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
738 should be configuration options to allow specific types of debugging
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
739 to be enabled at a fine-grain, but with default settings inherited
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
740 from an enclosing component or from global settings.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
741 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
742 </listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
743
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
744 <listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
745 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
746 The mutex code may contain specialized code to interact
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
747 with a debugging tool running on the host. It should be
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
748 possible to enable or disable this debugging code, and there may
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
749 be additional configuration options controlling the detailed
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
750 behavior.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
751 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
752 </listitem>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
753
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
754 </orderedlist>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
755
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
756 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
757 Altogether there may be something like ten to twenty configuration
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
758 options that are specific to the mutex code. There may be a similar
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
759 number of additional options related to assertions and other debug
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
760 facilities. All of the options should have sensible default values,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
761 possibly fixed, possibly calculated depending on what is happening
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
762 elsewhere in the configuration. For example the default setting for
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
763 an assertion option should generally inherit from a kernel-wide
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
764 assertion control option, which in turn inherits from a global option.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
765 This allows users to enable or disable assertions globally or at
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
766 a more fine-grained level, as desired.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
767 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
768 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
769 Different components may be configurable to different degrees, ranging
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
770 from no options at all to the fine-grained configurability of the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
771 above mutex example (or possibly even further). It is up to component
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
772 writers to decide what options should be provided and how best to
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
773 serve the needs of application developers who want to use that
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
774 component.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
775 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
776 </sect1>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
777
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
778 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
779 <!-- {{{ Warning -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
780
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
781 <sect1 id="overview.warning">
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
782 <title>Warnings</title>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
783 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
784 Large parts of &eCos; were developed concurrently with the development
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
785 of the configuration technology, or in some cases before design work
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
786 on that technology was complete. As a consequence the various &eCos;
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
787 packages often make only limited use of the available functionality.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
788 This situation is expected to change over time. It does mean that many
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
789 of the descriptions in this guide will not correspond exactly to how
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
790 the &eCos; packages work right now, but rather to how they could work.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
791 Some of the more extreme discrepancies such as the location of on-line
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
792 documentation in the component repository will be mentioned in the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
793 appropriate places in the guide.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
794 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
795 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
796 A consequence of this is that developers of new components can look at
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
797 existing &CDL; scripts for examples, and discover discrepancies
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
798 between what is recommended in this guide and what actually happens at
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
799 present. In such cases this guide should be treated as authoritative.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
800 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
801 <para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
802 It is also worth noting that the current component framework is not
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
803 finished. Various parts of this guide will refer to possible changes
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
804 and enhancements in future versions. Examining the source code of the
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
805 configuration tools may reveal hints about other likely developments,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
806 and there are many more possible enhancements which only exist at a
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
807 conceptual level right now.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
808 </para>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
809
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
810 </sect1>
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
811
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
812 <!-- }}} -->
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
diff changeset
813
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 334
diff changeset
814 </chapter>