Development mbed library for MAX32630FTHR

Dependents:   blinky_max32630fthr

Committer:
switches
Date:
Fri Dec 16 16:27:57 2016 +0000
Revision:
3:1198227e6421
Parent:
0:5c4d7b2438d3
Changed ADC scale for MAX32625 platforms to 1.2V full scale to match MAX32630 platforms

Who changed what in which revision?

UserRevisionLine numberNew contents of line
switches 0:5c4d7b2438d3 1 # About the configuration system
switches 0:5c4d7b2438d3 2
switches 0:5c4d7b2438d3 3 The mbed configuration system can be used to customize the compile time configuration of various mbed components (targets, libraries and applications). Each such component can define a number of *configuration parameters*. The values of these configuration parameters can then be *overridden* in various ways. Configuration is defined using [JSON](http://www.json.org/). Some examples of configuration parameters:
switches 0:5c4d7b2438d3 4
switches 0:5c4d7b2438d3 5 - the sampling period for a data acquisition application.
switches 0:5c4d7b2438d3 6 - the default stack size for a newly created OS thread.
switches 0:5c4d7b2438d3 7 - the receive buffer size of a serial communication library.
switches 0:5c4d7b2438d3 8 - the flash and RAM memory size of a mbed target.
switches 0:5c4d7b2438d3 9
switches 0:5c4d7b2438d3 10 The configuration system gathers and interprets all the configuration defined in the source tree. The output of the configuration system is a list of macros that are automatically defined when compiling the code.
switches 0:5c4d7b2438d3 11
switches 0:5c4d7b2438d3 12 # Defining configuration parameters
switches 0:5c4d7b2438d3 13
switches 0:5c4d7b2438d3 14 The configuration system understands configuration data defined in targets, libraries and applications. While there are some slight differences in the way the configuration system works in these cases, the configuration parameters are always defined in a JSON object called "config". An example is given below:
switches 0:5c4d7b2438d3 15
switches 0:5c4d7b2438d3 16 ```
switches 0:5c4d7b2438d3 17 {
switches 0:5c4d7b2438d3 18 "config": {
switches 0:5c4d7b2438d3 19 "param1": {
switches 0:5c4d7b2438d3 20 "help": "The first configuration parameter",
switches 0:5c4d7b2438d3 21 "macro_name": "CUSTOM_MACRO_NAME",
switches 0:5c4d7b2438d3 22 "value": 0
switches 0:5c4d7b2438d3 23 },
switches 0:5c4d7b2438d3 24 "param2": {
switches 0:5c4d7b2438d3 25 "help": "The second configuration parameter",
switches 0:5c4d7b2438d3 26 "required": true
switches 0:5c4d7b2438d3 27 },
switches 0:5c4d7b2438d3 28 "param3": 10
switches 0:5c4d7b2438d3 29 }
switches 0:5c4d7b2438d3 30 }
switches 0:5c4d7b2438d3 31 ```
switches 0:5c4d7b2438d3 32
switches 0:5c4d7b2438d3 33 The JSON fragment above defines 3 configuration parameters named `param1`, `param2` and `param3`. There are two ways to define a configuration parameter:
switches 0:5c4d7b2438d3 34
switches 0:5c4d7b2438d3 35 - the short way: by name and value. `param3` above is an example of a short definition for a parameter named `param3` with value `10`.
switches 0:5c4d7b2438d3 36 - the long way: by name and description (another JSON object), like `param1` and `param2` above. The JSON description object can have the following keys:
switches 0:5c4d7b2438d3 37 - `help`: an optional help message that describes the purpose of the parameter.
switches 0:5c4d7b2438d3 38 - `value`: an optional field that defines the value of the parameter.
switches 0:5c4d7b2438d3 39 - `required`: an optional key that specifies if the parameter **must** be given a value before compiling the code (`false` by default). It's not possible to compile a source tree with one or more required parameters that don't have a value. Generally, it makes sense to define a required parameter only when it doesn't have a `value` key.
switches 0:5c4d7b2438d3 40 - `macro_name`: an optional name for the macro defined at compile time for this configuration parameter. The configuration system will automatically figure out the corresponding macro name for a configuration parameter, but the user can override this automatically computed name by specifying `macro_name`.
switches 0:5c4d7b2438d3 41
switches 0:5c4d7b2438d3 42 Note that the name of a parameter in `config` can't contain a dot (`.`) character.
switches 0:5c4d7b2438d3 43
switches 0:5c4d7b2438d3 44 The configuration system automatically appends an *implicit prefix* to the name of each parameter, so you don't have to worry about a name clash if you define a parameter with the same name in a library and a target, for example. The implicit prefix is:
switches 0:5c4d7b2438d3 45
switches 0:5c4d7b2438d3 46 - **target.** if the parameter is defined in a target.
switches 0:5c4d7b2438d3 47 - **app.** if the parameter is defined in the application.
switches 0:5c4d7b2438d3 48 - the name of the library followed by a dot (.) if the parameter is defined in a library.
switches 0:5c4d7b2438d3 49
switches 0:5c4d7b2438d3 50 # Configuration data in libraries
switches 0:5c4d7b2438d3 51
switches 0:5c4d7b2438d3 52 Each mbed library can have an optional `mbed_lib.json` file located in the root folder of the library that defines its configuration. For a library called `mylib`, the configuration file could look like this:
switches 0:5c4d7b2438d3 53
switches 0:5c4d7b2438d3 54 ```
switches 0:5c4d7b2438d3 55 {
switches 0:5c4d7b2438d3 56 "name": "mylib",
switches 0:5c4d7b2438d3 57 "config": {
switches 0:5c4d7b2438d3 58 "buffer_size": 1024,
switches 0:5c4d7b2438d3 59 "timer_period": {
switches 0:5c4d7b2438d3 60 "help": "The timer period (in us)",
switches 0:5c4d7b2438d3 61 "macro_name": "INTERNAL_GPTMR_PERIOD",
switches 0:5c4d7b2438d3 62 "required": true
switches 0:5c4d7b2438d3 63 },
switches 0:5c4d7b2438d3 64 "queue_size": {
switches 0:5c4d7b2438d3 65 "help": "Size of event queue (entries)",
switches 0:5c4d7b2438d3 66 "value": 10
switches 0:5c4d7b2438d3 67 }
switches 0:5c4d7b2438d3 68 },
switches 0:5c4d7b2438d3 69 "macros": ["MYMOD_MACRO1", "MYMOD_MACRO2=\"TEST\""],
switches 0:5c4d7b2438d3 70 "target_overrides": {
switches 0:5c4d7b2438d3 71 "K64F": {
switches 0:5c4d7b2438d3 72 "timer_period": 100,
switches 0:5c4d7b2438d3 73 "queue_size": 40
switches 0:5c4d7b2438d3 74 },
switches 0:5c4d7b2438d3 75 "NXP": {
switches 0:5c4d7b2438d3 76 "queue_size": 20,
switches 0:5c4d7b2438d3 77 "buffer_size": 128
switches 0:5c4d7b2438d3 78 }
switches 0:5c4d7b2438d3 79 }
switches 0:5c4d7b2438d3 80 }
switches 0:5c4d7b2438d3 81 ```
switches 0:5c4d7b2438d3 82
switches 0:5c4d7b2438d3 83 In this JSON file:
switches 0:5c4d7b2438d3 84
switches 0:5c4d7b2438d3 85 - `name` is the name of the library. **This is a required field.**
switches 0:5c4d7b2438d3 86 - `config` defines the configuration parameters of the library, as explained [here](#defining-configuration-parameters).
switches 0:5c4d7b2438d3 87 - `macros` is a list of extra macros that will be defined when compiling a project that includes this library. A macro can be defined without a value (like `MYMOD_MACRO1` above) or with a value (like `MYMOD_MACRO2` above).
switches 0:5c4d7b2438d3 88 - `target_overrides` is a dictionary with target-specific values for the configuration parameters.
switches 0:5c4d7b2438d3 89
switches 0:5c4d7b2438d3 90 `target_overrides` is used to override the values of the parameters depending on the current compilation target. The keys in `target_overrides` are matched against toolchain *labels* (a description of mbed targets can be found [here](mbed_targets.md)). If a key inside `target_overrides` matches one of the target labels, the parameter values are changed according to the value of the key. In the example above:
switches 0:5c4d7b2438d3 91
switches 0:5c4d7b2438d3 92 - `config` is always processed first, independent of the target. `config` might define values for some of the parameters. In this case, `buffer_size` will be set to 1024, `queue_size` will be set to 10 and `timer_period` will not have a value.
switches 0:5c4d7b2438d3 93 - if the library is compiled for the `K64F` target, `timer_period` will be set to 100 and `queue_size` will be set to 40, since they are overridden by the `K64F` key in `target_overrides`. `buffer_size` will be set to 1024, as defined in `config`.
switches 0:5c4d7b2438d3 94 - assuming that `NXP` is a label defined by **all** NXP based targets, if the library is compiled for **any** `NXP` target (like `LPC1768` or `LPC11U24`), `buffer_size` will be set to 128 and `queue_size` will be set to 20, while `timer_period` will not have a value (since it doesn't get one neither in `config`, nor in the `NXP` override).
switches 0:5c4d7b2438d3 95 - the keys in `target_overrides` are processed in order: if a hypothetical target defines both `K64F` and `NXP` as labels, `timer_period` will be set to 100, `queue_size` will be set to 20 and `buffer_size` will be set to 128.
switches 0:5c4d7b2438d3 96 - if the library is compiled for a target that doesn't have `K64F` or `NXP` as labels, the values of the parameters will be the ones set in `config`.
switches 0:5c4d7b2438d3 97
switches 0:5c4d7b2438d3 98 Except `name`, all the above keys in the JSON file are optional, but if `target_overrides` is defined, `config` must also be defined.
switches 0:5c4d7b2438d3 99
switches 0:5c4d7b2438d3 100 As explained [here](#defining-configuration-parameters), the parameters have an implicit `mylib.` prefix. Outside `mylib`, `buffer_size` is accessible using the name `mylib.buffer_size`. An application will be able to override the value of this parameter, as described in [this section](#configuration-data-in-applications).
switches 0:5c4d7b2438d3 101
switches 0:5c4d7b2438d3 102 If the source tree has code for more than one library, each library needs its own `mbed_lib.json` file in its root folder.
switches 0:5c4d7b2438d3 103
switches 0:5c4d7b2438d3 104 # Configuration data in targets
switches 0:5c4d7b2438d3 105
switches 0:5c4d7b2438d3 106 Like libraries, targets can define their own configuration data. Additionally, tables can override the configuration of the target(s) they inherit from (for more details about how do define a target and target inheritance, check [this link](mbed_targets.md)). Target configuration data is defined in `targets.json` using `config`, as described [here](#defining-configuration-parameters). An example for a hypothetical `Base` target is given below:
switches 0:5c4d7b2438d3 107
switches 0:5c4d7b2438d3 108 ```
switches 0:5c4d7b2438d3 109 "Base": {
switches 0:5c4d7b2438d3 110 "core": "Cortex-M0",
switches 0:5c4d7b2438d3 111 "extra_labels": ["BASE_LABEL"],
switches 0:5c4d7b2438d3 112 "config": {
switches 0:5c4d7b2438d3 113 "serial_console_speed": {
switches 0:5c4d7b2438d3 114 "help": "Baud rate of the serial console",
switches 0:5c4d7b2438d3 115 "value": 115200,
switches 0:5c4d7b2438d3 116 "macro_name": "MBED_SERIAL_UART_SPEED"
switches 0:5c4d7b2438d3 117 },
switches 0:5c4d7b2438d3 118 "stack_size": {
switches 0:5c4d7b2438d3 119 "help": "Initial stack size of the application",
switches 0:5c4d7b2438d3 120 "value": 128
switches 0:5c4d7b2438d3 121 }
switches 0:5c4d7b2438d3 122 }
switches 0:5c4d7b2438d3 123 }
switches 0:5c4d7b2438d3 124 ```
switches 0:5c4d7b2438d3 125
switches 0:5c4d7b2438d3 126 Similar to libraries, the target defined parameters have an implicit prefix. For a target, the prefix is always called `target` (no matter what the actual target name is), so the above configuration parameters will be accessible outside the definition in `Base` (and any other target) as `target.serial_console_speed` and `target.stack_size`.
switches 0:5c4d7b2438d3 127
switches 0:5c4d7b2438d3 128 Targets can inherit from other targets, and their configuration data is also inherited. A target that inherits from one or more other targets can add new parameters in its own `config` section and can also override the configuration parameters defined by its parent(s) in a `overrides` section. For example:
switches 0:5c4d7b2438d3 129
switches 0:5c4d7b2438d3 130 ```
switches 0:5c4d7b2438d3 131 "Derived": {
switches 0:5c4d7b2438d3 132 "inherits": ["Base"],
switches 0:5c4d7b2438d3 133 "extra_labels_add": ["NXP"],
switches 0:5c4d7b2438d3 134 "config": {
switches 0:5c4d7b2438d3 135 "my_own_config": {
switches 0:5c4d7b2438d3 136 "help": "My very own configuration parameter",
switches 0:5c4d7b2438d3 137 "value": 0
switches 0:5c4d7b2438d3 138 }
switches 0:5c4d7b2438d3 139 },
switches 0:5c4d7b2438d3 140 "overrides": {
switches 0:5c4d7b2438d3 141 "stack_size": 256
switches 0:5c4d7b2438d3 142 }
switches 0:5c4d7b2438d3 143 }
switches 0:5c4d7b2438d3 144 ```
switches 0:5c4d7b2438d3 145
switches 0:5c4d7b2438d3 146 `Derived` above defines its own configuration parameter called `my_own_config` and inherits the configuration parameters from `Base`, so its configuration parameters are `serial_console_speed`, `stack_size` and `my_own_config`. It also overrides the value of the `stack_size` parameter defined in `Base`. This means that:
switches 0:5c4d7b2438d3 147
switches 0:5c4d7b2438d3 148 - when compiling for `Base`, the target will define two configuration parameters: `serial_console_speed` with the value 115200 and `stack_size` with the value 128.
switches 0:5c4d7b2438d3 149 - when compiling for `Derived`, the target will define three configuration parameters: `serial_console_speed` with the value 115200, `stack_size` with the value 256 and `my_own_config` with the value 0.
switches 0:5c4d7b2438d3 150
switches 0:5c4d7b2438d3 151 It is an error for a derived target to re-define a configuration parameter already defined by its parent(s) in its `config` section. It is also an error for a derived target to override a configuration parameter that was not defined by its parent(s) in its `overrides` section.
switches 0:5c4d7b2438d3 152
switches 0:5c4d7b2438d3 153 # Configuration data in applications
switches 0:5c4d7b2438d3 154
switches 0:5c4d7b2438d3 155 Like the configuration for targets and libraries, application configuration is optional; if it exists, it must be defined in a `mbed_app.json` file. Unlike library configuration, there can be a single `mbed_app.json` file in the source tree.
switches 0:5c4d7b2438d3 156
switches 0:5c4d7b2438d3 157 There are quite a few similarities between configuration data in applications and libraries:
switches 0:5c4d7b2438d3 158
switches 0:5c4d7b2438d3 159 - applications define their configuration parameters in the `config` section of `mbed_app.json`, as explained [here](#defining-configuration-parameters).
switches 0:5c4d7b2438d3 160 - applications can specify target-dependent values in their `target_overrides` section, as described in the [library configuration paragraph][#configuration-data-in-libraries) (but see below for differences).
switches 0:5c4d7b2438d3 161 - applications can define macros that will be define at compile time by declaring them in `macros`.
switches 0:5c4d7b2438d3 162
switches 0:5c4d7b2438d3 163 There are also a few differences:
switches 0:5c4d7b2438d3 164
switches 0:5c4d7b2438d3 165 - applications **can't** have a `name` key in `mbed_app.json`. The prefix for the configuration parameters defined in an application is always `app.`.
switches 0:5c4d7b2438d3 166 - applications can also override configuration of libraries and targets in addition to its own configuration in its `target_overrides` section.
switches 0:5c4d7b2438d3 167
switches 0:5c4d7b2438d3 168 The last point above is important. The application can freely override the configuration of any of the libraries it depends on, as well as the configuration data in targets, so it has complete control over the configuration of the whole build. For an application called myapp that depends on mylib above, the configuration can look like this:
switches 0:5c4d7b2438d3 169
switches 0:5c4d7b2438d3 170 ```
switches 0:5c4d7b2438d3 171 {
switches 0:5c4d7b2438d3 172 "config": {
switches 0:5c4d7b2438d3 173 "welcome_string": {
switches 0:5c4d7b2438d3 174 "help": "The string printed on the display on start-up",
switches 0:5c4d7b2438d3 175 "value": "\"Hello!\""
switches 0:5c4d7b2438d3 176 }
switches 0:5c4d7b2438d3 177 },
switches 0:5c4d7b2438d3 178 "target_overrides": {
switches 0:5c4d7b2438d3 179 "*": {
switches 0:5c4d7b2438d3 180 "target.serial_console_speed": 2400,
switches 0:5c4d7b2438d3 181 "mylib.timer_period": 100
switches 0:5c4d7b2438d3 182 },
switches 0:5c4d7b2438d3 183 "Base": {
switches 0:5c4d7b2438d3 184 "target.serial_console_speed": 9600
switches 0:5c4d7b2438d3 185 }
switches 0:5c4d7b2438d3 186 }
switches 0:5c4d7b2438d3 187 }
switches 0:5c4d7b2438d3 188 ```
switches 0:5c4d7b2438d3 189
switches 0:5c4d7b2438d3 190 `target_overrides` works a lot like it does in libraries, but there are a few differences:
switches 0:5c4d7b2438d3 191
switches 0:5c4d7b2438d3 192 - since the application can override any configuration parameter, it must specify them using their prefix (like `mylib.timer_period`). If an overridden parameter doesn't have a prefix, it is assumed that it is one of the parameters defined by the application in its own `config` section.
switches 0:5c4d7b2438d3 193 - the `*` key in `target_overrides` will match *any* target. It is possible to use the `*` key in a library's `target_overrides` too, but it'd make little sense to do so, since it will always override the values defined in the library's `config` section. In an application it might make sense to use the `*` key, since it can be used to override the configuration defined by the target or the dependent libraries, no matter which target is used for building.
switches 0:5c4d7b2438d3 194
switches 0:5c4d7b2438d3 195 Other than this, `target_overrides` works exactly like it does for libraries. Keys in `target_overrides` are still processed in the order they are defined, so for the example above, the `*` override is always processed first (since it matches all targets) and then `Base` is only processed for the `Base` target.
switches 0:5c4d7b2438d3 196
switches 0:5c4d7b2438d3 197 `myapp` above defines its own configuration parameter (`welcome_string`) and overrides the configuration in both the target (`target.serial_console_speed`) and its `mylib` dependency (`mylib.timer_period`):
switches 0:5c4d7b2438d3 198
switches 0:5c4d7b2438d3 199 - when compiling for `Base`, `app.welcome_string` will be set to `"Hello!"`, `target.serial_console_speed` will be set to 9600 (from the `Base` override) and `mylib.timer_period` will be set to 100 (from the `*` override).
switches 0:5c4d7b2438d3 200 - when compiling for `Derived`, `app.welcome_string` will be set to `"Hello!"`, `target.serial_console_speed` will be set to 2400 (from the `*` override) and `mylib.timer_period` will be set to 100 (also from the `*` override).
switches 0:5c4d7b2438d3 201
switches 0:5c4d7b2438d3 202 It is an error for the application configuration to override configuration parameters that were not defined.
switches 0:5c4d7b2438d3 203
switches 0:5c4d7b2438d3 204 ## Overriding cumulative target attributes
switches 0:5c4d7b2438d3 205
switches 0:5c4d7b2438d3 206 Target configurations contain a set of cumulative attributes that can be manipulated in the application configuration. These attributes can be overriden as a normal configuration parameter, or manipulated with the special `attribute_add` and `attribute_remove` meta-attributes.
switches 0:5c4d7b2438d3 207
switches 0:5c4d7b2438d3 208 Cumulative attributes:
switches 0:5c4d7b2438d3 209 - features: List of features which will be compiled into the resulting binary and available at runtime. Determines the FEATURE directories included during compilation. These are also emitted as FEATURE macros.
switches 0:5c4d7b2438d3 210 - device_has: List of hardware components available on the target. These are emitted as DEVICE_HAS macros.
switches 0:5c4d7b2438d3 211 - extra_labels: List of target labels which determine the TARGET directories included during compilation. These are also emitted as TARGET macros.
switches 0:5c4d7b2438d3 212 - macros: List of target-specific macros that are defined during compilation.
switches 0:5c4d7b2438d3 213
switches 0:5c4d7b2438d3 214 For example, an application may want to remove features with extra space or runtime cost. This `mbed_app.json` will disable the IPV4 network stack. Attempting to use this network stack will result in a compilation error:
switches 0:5c4d7b2438d3 215
switches 0:5c4d7b2438d3 216 ```
switches 0:5c4d7b2438d3 217 {
switches 0:5c4d7b2438d3 218 "target_overrides": {
switches 0:5c4d7b2438d3 219 "K64F": {
switches 0:5c4d7b2438d3 220 "target.features_remove": ["IPV4"]
switches 0:5c4d7b2438d3 221 }
switches 0:5c4d7b2438d3 222 }
switches 0:5c4d7b2438d3 223 }
switches 0:5c4d7b2438d3 224 ```
switches 0:5c4d7b2438d3 225
switches 0:5c4d7b2438d3 226 # Configuration data precedence
switches 0:5c4d7b2438d3 227
switches 0:5c4d7b2438d3 228 The order in which the various bits of configurations are considered is this:
switches 0:5c4d7b2438d3 229
switches 0:5c4d7b2438d3 230 - the configuration defined by an inherited target overrides the configuration defined by its parent(s), as described [above](#configuration-data-in-targets).
switches 0:5c4d7b2438d3 231 - the configuration of the top level application overrides the configuration defined by the target and any of the libraries on which it depends.
switches 0:5c4d7b2438d3 232
switches 0:5c4d7b2438d3 233 For `myapp` above:
switches 0:5c4d7b2438d3 234
switches 0:5c4d7b2438d3 235 - the value of `target.serial_console_speed` will be 9600 when compiling for `Base` because of the `Base` override in myapp's `target_overrides`.
switches 0:5c4d7b2438d3 236 - the value of `target.serial_console_speed` will be 2400 when compiling for any other target because of the `*` override in myapp's `target_overrides`.
switches 0:5c4d7b2438d3 237 - the value of `target.stack_size` will be 256 when compiling for `Derived` and 128 when compiling for `Base` or any other target that derives from `Base` (assuming of course that `Derived` is the only target that redefines `stack_size`).
switches 0:5c4d7b2438d3 238 - the value of `mylib.timer_period` will be 100, since that's overridden by the application and thus takes precedence over the values defined in `mylib`.
switches 0:5c4d7b2438d3 239 - when compiling for `Base`, the values of `mylib.buffer_size` and `mylib.queue_size` will be 1024 and 10 respectively, as defined in the `config` section of `mylib`.
switches 0:5c4d7b2438d3 240 - when compiling for `Derived`, the values of `mylib.buffer_size `and `mylib.queue_size` will be 128 and 20 respectively, since `Derived` defines the `NXP` label and `mylib` defines a specific configuration for this label. Also, since `Derived` has its own `my_own_config` configuration parameter, `target.my_own_config` will also be defined in this case.
switches 0:5c4d7b2438d3 241
switches 0:5c4d7b2438d3 242 # Using configuration data in the code
switches 0:5c4d7b2438d3 243
switches 0:5c4d7b2438d3 244 When compiling, the configuration system will automatically generate macro definitions for the configuration parameters and all the macros defined in libraries and the application in their `macros` keys. These definitions will be written in a file named `mbed_config.h` located in the build directory. When compiling `myapp` for target `Base`, the `mbed_config.h` file will look like this (note that the order of the definitions might be different):
switches 0:5c4d7b2438d3 245
switches 0:5c4d7b2438d3 246 ```
switches 0:5c4d7b2438d3 247 // Automatically generated configuration file.
switches 0:5c4d7b2438d3 248 // DO NOT EDIT, content will be overwritten.
switches 0:5c4d7b2438d3 249
switches 0:5c4d7b2438d3 250 #ifndef __MBED_CONFIG_DATA__
switches 0:5c4d7b2438d3 251 #define __MBED_CONFIG_DATA__
switches 0:5c4d7b2438d3 252
switches 0:5c4d7b2438d3 253 // Configuration parameters
switches 0:5c4d7b2438d3 254 #define MBED_CONF_MYAPP_WELCOME_STRING "Hello!" // set by application
switches 0:5c4d7b2438d3 255 #define MBED_SERIAL_UART_SPEED 9600 // set by application[Base]
switches 0:5c4d7b2438d3 256 #define MBED_CONF_TARGET_STACK_SIZE 128 // set by target
switches 0:5c4d7b2438d3 257 #define INTERNAL_GPTMR_PERIOD 100 // set by application[*]
switches 0:5c4d7b2438d3 258 #define MBED_CONF_MYLIB_BUFFER_SIZE 1024 // set by library:mylib
switches 0:5c4d7b2438d3 259 #define MBED_CONF_MYLIB_QUEUE_SIZE 10 // set by library:mylib
switches 0:5c4d7b2438d3 260 // Macros
switches 0:5c4d7b2438d3 261 #define MYMOD_MACRO1 // defined by library:mylib
switches 0:5c4d7b2438d3 262 #define MYMOD_MACRO2 "TEST" // defined by library:mylib
switches 0:5c4d7b2438d3 263
switches 0:5c4d7b2438d3 264 #endif
switches 0:5c4d7b2438d3 265 ```
switches 0:5c4d7b2438d3 266
switches 0:5c4d7b2438d3 267 When compiling for `Derived`, `mbed_config.h` will look like this:
switches 0:5c4d7b2438d3 268
switches 0:5c4d7b2438d3 269
switches 0:5c4d7b2438d3 270 ```
switches 0:5c4d7b2438d3 271 // Automatically generated configuration file.
switches 0:5c4d7b2438d3 272 // DO NOT EDIT, content will be overwritten.
switches 0:5c4d7b2438d3 273
switches 0:5c4d7b2438d3 274 #ifndef __MBED_CONFIG_DATA__
switches 0:5c4d7b2438d3 275 #define __MBED_CONFIG_DATA__
switches 0:5c4d7b2438d3 276
switches 0:5c4d7b2438d3 277 // Configuration parameters
switches 0:5c4d7b2438d3 278 #define MBED_CONF_MYAPP_WELCOME_STRING "Hello!" // set by application
switches 0:5c4d7b2438d3 279 #define MBED_SERIAL_UART_SPEED 2400 // set by application[*]
switches 0:5c4d7b2438d3 280 #define MBED_CONF_TARGET_STACK_SIZE 256 // set by target
switches 0:5c4d7b2438d3 281 #define MBED_CONF_TARGET_MY_OWN_CONFIG 0 // set by target
switches 0:5c4d7b2438d3 282 #define INTERNAL_GPTMR_PERIOD 100 // set by application[*]
switches 0:5c4d7b2438d3 283 #define MBED_CONF_MYLIB_BUFFER_SIZE 128 // set by library:mylib[NXP]
switches 0:5c4d7b2438d3 284 #define MBED_CONF_MYLIB_QUEUE_SIZE 20 // set by library:mylib[NXP]
switches 0:5c4d7b2438d3 285 // Macros
switches 0:5c4d7b2438d3 286 #define MYMOD_MACRO1 // defined by library:mylib
switches 0:5c4d7b2438d3 287 #define MYMOD_MACRO2 "TEST" // defined by library:mylib
switches 0:5c4d7b2438d3 288
switches 0:5c4d7b2438d3 289 #endif
switches 0:5c4d7b2438d3 290 ```
switches 0:5c4d7b2438d3 291
switches 0:5c4d7b2438d3 292 Note that a macro definition will *not* be generated for a parameter that doesn't have a value.
switches 0:5c4d7b2438d3 293
switches 0:5c4d7b2438d3 294 The names of the macros for the configuration parameter (unless explicitly specified by `macro_name`) are prefixed by **MBED_CONF_**, followed by the full (prefixed) name of the parameter, capitalized and converted to a valid C macro name (if needed).
switches 0:5c4d7b2438d3 295
switches 0:5c4d7b2438d3 296 `mbed_config.h` will be included automatically by the toolchain in all compiled sources, so you'll have access to the configuration data without having to include `mbed_config.h` manually.
switches 0:5c4d7b2438d3 297
switches 0:5c4d7b2438d3 298 *Do not edit mbed_config.h manually*. It will be overwritten the next time you compile or export your project and all your changes will be lost.