Mercurial > ecos-v3_0-branch
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 |
| 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… 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 — 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> |
