mbed os with nrf51 internal bandgap enabled to read battery level

Dependents:   BLE_file_test BLE_Blink ExternalEncoder

Committer:
elessair
Date:
Sun Oct 23 15:10:02 2016 +0000
Revision:
0:f269e3021894
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elessair 0:f269e3021894 1 # About the configuration system
elessair 0:f269e3021894 2
elessair 0:f269e3021894 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:
elessair 0:f269e3021894 4
elessair 0:f269e3021894 5 - the sampling period for a data acquisition application.
elessair 0:f269e3021894 6 - the default stack size for a newly created OS thread.
elessair 0:f269e3021894 7 - the receive buffer size of a serial communication library.
elessair 0:f269e3021894 8 - the flash and RAM memory size of a mbed target.
elessair 0:f269e3021894 9
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 11
elessair 0:f269e3021894 12 # Defining configuration parameters
elessair 0:f269e3021894 13
elessair 0:f269e3021894 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:
elessair 0:f269e3021894 15
elessair 0:f269e3021894 16 ```
elessair 0:f269e3021894 17 {
elessair 0:f269e3021894 18 "config": {
elessair 0:f269e3021894 19 "param1": {
elessair 0:f269e3021894 20 "help": "The first configuration parameter",
elessair 0:f269e3021894 21 "macro_name": "CUSTOM_MACRO_NAME",
elessair 0:f269e3021894 22 "value": 0
elessair 0:f269e3021894 23 },
elessair 0:f269e3021894 24 "param2": {
elessair 0:f269e3021894 25 "help": "The second configuration parameter",
elessair 0:f269e3021894 26 "required": true
elessair 0:f269e3021894 27 },
elessair 0:f269e3021894 28 "param3": 10
elessair 0:f269e3021894 29 }
elessair 0:f269e3021894 30 }
elessair 0:f269e3021894 31 ```
elessair 0:f269e3021894 32
elessair 0:f269e3021894 33 The JSON fragment above defines 3 configuration parameters named `param1`, `param2` and `param3`. There are two ways to define a configuration parameter:
elessair 0:f269e3021894 34
elessair 0:f269e3021894 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`.
elessair 0:f269e3021894 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:
elessair 0:f269e3021894 37 - `help`: an optional help message that describes the purpose of the parameter.
elessair 0:f269e3021894 38 - `value`: an optional field that defines the value of the parameter.
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 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`.
elessair 0:f269e3021894 41
elessair 0:f269e3021894 42 Note that the name of a parameter in `config` can't contain a dot (`.`) character.
elessair 0:f269e3021894 43
elessair 0:f269e3021894 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:
elessair 0:f269e3021894 45
elessair 0:f269e3021894 46 - **target.** if the parameter is defined in a target.
elessair 0:f269e3021894 47 - **app.** if the parameter is defined in the application.
elessair 0:f269e3021894 48 - the name of the library followed by a dot (.) if the parameter is defined in a library.
elessair 0:f269e3021894 49
elessair 0:f269e3021894 50 # Configuration data in libraries
elessair 0:f269e3021894 51
elessair 0:f269e3021894 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:
elessair 0:f269e3021894 53
elessair 0:f269e3021894 54 ```
elessair 0:f269e3021894 55 {
elessair 0:f269e3021894 56 "name": "mylib",
elessair 0:f269e3021894 57 "config": {
elessair 0:f269e3021894 58 "buffer_size": 1024,
elessair 0:f269e3021894 59 "timer_period": {
elessair 0:f269e3021894 60 "help": "The timer period (in us)",
elessair 0:f269e3021894 61 "macro_name": "INTERNAL_GPTMR_PERIOD",
elessair 0:f269e3021894 62 "required": true
elessair 0:f269e3021894 63 },
elessair 0:f269e3021894 64 "queue_size": {
elessair 0:f269e3021894 65 "help": "Size of event queue (entries)",
elessair 0:f269e3021894 66 "value": 10
elessair 0:f269e3021894 67 }
elessair 0:f269e3021894 68 },
elessair 0:f269e3021894 69 "macros": ["MYMOD_MACRO1", "MYMOD_MACRO2=\"TEST\""],
elessair 0:f269e3021894 70 "target_overrides": {
elessair 0:f269e3021894 71 "K64F": {
elessair 0:f269e3021894 72 "timer_period": 100,
elessair 0:f269e3021894 73 "queue_size": 40
elessair 0:f269e3021894 74 },
elessair 0:f269e3021894 75 "NXP": {
elessair 0:f269e3021894 76 "queue_size": 20,
elessair 0:f269e3021894 77 "buffer_size": 128
elessair 0:f269e3021894 78 }
elessair 0:f269e3021894 79 }
elessair 0:f269e3021894 80 }
elessair 0:f269e3021894 81 ```
elessair 0:f269e3021894 82
elessair 0:f269e3021894 83 In this JSON file:
elessair 0:f269e3021894 84
elessair 0:f269e3021894 85 - `name` is the name of the library. **This is a required field.**
elessair 0:f269e3021894 86 - `config` defines the configuration parameters of the library, as explained [here](#defining-configuration-parameters).
elessair 0:f269e3021894 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).
elessair 0:f269e3021894 88 - `target_overrides` is a dictionary with target-specific values for the configuration parameters.
elessair 0:f269e3021894 89
elessair 0:f269e3021894 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:
elessair 0:f269e3021894 91
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 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`.
elessair 0:f269e3021894 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).
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 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`.
elessair 0:f269e3021894 97
elessair 0:f269e3021894 98 Except `name`, all the above keys in the JSON file are optional, but if `target_overrides` is defined, `config` must also be defined.
elessair 0:f269e3021894 99
elessair 0:f269e3021894 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).
elessair 0:f269e3021894 101
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 103
elessair 0:f269e3021894 104 # Configuration data in targets
elessair 0:f269e3021894 105
elessair 0:f269e3021894 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:
elessair 0:f269e3021894 107
elessair 0:f269e3021894 108 ```
elessair 0:f269e3021894 109 "Base": {
elessair 0:f269e3021894 110 "core": "Cortex-M0",
elessair 0:f269e3021894 111 "extra_labels": ["BASE_LABEL"],
elessair 0:f269e3021894 112 "config": {
elessair 0:f269e3021894 113 "serial_console_speed": {
elessair 0:f269e3021894 114 "help": "Baud rate of the serial console",
elessair 0:f269e3021894 115 "value": 115200,
elessair 0:f269e3021894 116 "macro_name": "MBED_SERIAL_UART_SPEED"
elessair 0:f269e3021894 117 },
elessair 0:f269e3021894 118 "stack_size": {
elessair 0:f269e3021894 119 "help": "Initial stack size of the application",
elessair 0:f269e3021894 120 "value": 128
elessair 0:f269e3021894 121 }
elessair 0:f269e3021894 122 }
elessair 0:f269e3021894 123 }
elessair 0:f269e3021894 124 ```
elessair 0:f269e3021894 125
elessair 0:f269e3021894 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`.
elessair 0:f269e3021894 127
elessair 0:f269e3021894 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:
elessair 0:f269e3021894 129
elessair 0:f269e3021894 130 ```
elessair 0:f269e3021894 131 "Derived": {
elessair 0:f269e3021894 132 "inherits": ["Base"],
elessair 0:f269e3021894 133 "extra_labels_add": ["NXP"],
elessair 0:f269e3021894 134 "config": {
elessair 0:f269e3021894 135 "my_own_config": {
elessair 0:f269e3021894 136 "help": "My very own configuration parameter",
elessair 0:f269e3021894 137 "value": 0
elessair 0:f269e3021894 138 }
elessair 0:f269e3021894 139 },
elessair 0:f269e3021894 140 "overrides": {
elessair 0:f269e3021894 141 "stack_size": 256
elessair 0:f269e3021894 142 }
elessair 0:f269e3021894 143 }
elessair 0:f269e3021894 144 ```
elessair 0:f269e3021894 145
elessair 0:f269e3021894 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:
elessair 0:f269e3021894 147
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 150
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 152
elessair 0:f269e3021894 153 # Configuration data in applications
elessair 0:f269e3021894 154
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 156
elessair 0:f269e3021894 157 There are quite a few similarities between configuration data in applications and libraries:
elessair 0:f269e3021894 158
elessair 0:f269e3021894 159 - applications define their configuration parameters in the `config` section of `mbed_app.json`, as explained [here](#defining-configuration-parameters).
elessair 0:f269e3021894 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).
elessair 0:f269e3021894 161 - applications can define macros that will be define at compile time by declaring them in `macros`.
elessair 0:f269e3021894 162
elessair 0:f269e3021894 163 There are also a few differences:
elessair 0:f269e3021894 164
elessair 0:f269e3021894 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.`.
elessair 0:f269e3021894 166 - applications can also override configuration of libraries and targets in addition to its own configuration in its `target_overrides` section.
elessair 0:f269e3021894 167
elessair 0:f269e3021894 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:
elessair 0:f269e3021894 169
elessair 0:f269e3021894 170 ```
elessair 0:f269e3021894 171 {
elessair 0:f269e3021894 172 "config": {
elessair 0:f269e3021894 173 "welcome_string": {
elessair 0:f269e3021894 174 "help": "The string printed on the display on start-up",
elessair 0:f269e3021894 175 "value": "\"Hello!\""
elessair 0:f269e3021894 176 }
elessair 0:f269e3021894 177 },
elessair 0:f269e3021894 178 "target_overrides": {
elessair 0:f269e3021894 179 "*": {
elessair 0:f269e3021894 180 "target.serial_console_speed": 2400,
elessair 0:f269e3021894 181 "mylib.timer_period": 100
elessair 0:f269e3021894 182 },
elessair 0:f269e3021894 183 "Base": {
elessair 0:f269e3021894 184 "target.serial_console_speed": 9600
elessair 0:f269e3021894 185 }
elessair 0:f269e3021894 186 }
elessair 0:f269e3021894 187 }
elessair 0:f269e3021894 188 ```
elessair 0:f269e3021894 189
elessair 0:f269e3021894 190 `target_overrides` works a lot like it does in libraries, but there are a few differences:
elessair 0:f269e3021894 191
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 194
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 196
elessair 0:f269e3021894 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`):
elessair 0:f269e3021894 198
elessair 0:f269e3021894 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).
elessair 0:f269e3021894 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).
elessair 0:f269e3021894 201
elessair 0:f269e3021894 202 It is an error for the application configuration to override configuration parameters that were not defined.
elessair 0:f269e3021894 203
elessair 0:f269e3021894 204 ## Overriding cumulative target attributes
elessair 0:f269e3021894 205
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 207
elessair 0:f269e3021894 208 Cumulative attributes:
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 210 - device_has: List of hardware components available on the target. These are emitted as DEVICE_HAS macros.
elessair 0:f269e3021894 211 - extra_labels: List of target labels which determine the TARGET directories included during compilation. These are also emitted as TARGET macros.
elessair 0:f269e3021894 212 - macros: List of target-specific macros that are defined during compilation.
elessair 0:f269e3021894 213
elessair 0:f269e3021894 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:
elessair 0:f269e3021894 215
elessair 0:f269e3021894 216 ```
elessair 0:f269e3021894 217 {
elessair 0:f269e3021894 218 "target_overrides": {
elessair 0:f269e3021894 219 "K64F": {
elessair 0:f269e3021894 220 "target.features_remove": ["IPV4"]
elessair 0:f269e3021894 221 }
elessair 0:f269e3021894 222 }
elessair 0:f269e3021894 223 }
elessair 0:f269e3021894 224 ```
elessair 0:f269e3021894 225
elessair 0:f269e3021894 226 # Configuration data precedence
elessair 0:f269e3021894 227
elessair 0:f269e3021894 228 The order in which the various bits of configurations are considered is this:
elessair 0:f269e3021894 229
elessair 0:f269e3021894 230 - the configuration defined by an inherited target overrides the configuration defined by its parent(s), as described [above](#configuration-data-in-targets).
elessair 0:f269e3021894 231 - the configuration of the top level application overrides the configuration defined by the target and any of the libraries on which it depends.
elessair 0:f269e3021894 232
elessair 0:f269e3021894 233 For `myapp` above:
elessair 0:f269e3021894 234
elessair 0:f269e3021894 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`.
elessair 0:f269e3021894 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`.
elessair 0:f269e3021894 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`).
elessair 0:f269e3021894 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`.
elessair 0:f269e3021894 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`.
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 241
elessair 0:f269e3021894 242 # Using configuration data in the code
elessair 0:f269e3021894 243
elessair 0:f269e3021894 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):
elessair 0:f269e3021894 245
elessair 0:f269e3021894 246 ```
elessair 0:f269e3021894 247 // Automatically generated configuration file.
elessair 0:f269e3021894 248 // DO NOT EDIT, content will be overwritten.
elessair 0:f269e3021894 249
elessair 0:f269e3021894 250 #ifndef __MBED_CONFIG_DATA__
elessair 0:f269e3021894 251 #define __MBED_CONFIG_DATA__
elessair 0:f269e3021894 252
elessair 0:f269e3021894 253 // Configuration parameters
elessair 0:f269e3021894 254 #define MBED_CONF_MYAPP_WELCOME_STRING "Hello!" // set by application
elessair 0:f269e3021894 255 #define MBED_SERIAL_UART_SPEED 9600 // set by application[Base]
elessair 0:f269e3021894 256 #define MBED_CONF_TARGET_STACK_SIZE 128 // set by target
elessair 0:f269e3021894 257 #define INTERNAL_GPTMR_PERIOD 100 // set by application[*]
elessair 0:f269e3021894 258 #define MBED_CONF_MYLIB_BUFFER_SIZE 1024 // set by library:mylib
elessair 0:f269e3021894 259 #define MBED_CONF_MYLIB_QUEUE_SIZE 10 // set by library:mylib
elessair 0:f269e3021894 260 // Macros
elessair 0:f269e3021894 261 #define MYMOD_MACRO1 // defined by library:mylib
elessair 0:f269e3021894 262 #define MYMOD_MACRO2 "TEST" // defined by library:mylib
elessair 0:f269e3021894 263
elessair 0:f269e3021894 264 #endif
elessair 0:f269e3021894 265 ```
elessair 0:f269e3021894 266
elessair 0:f269e3021894 267 When compiling for `Derived`, `mbed_config.h` will look like this:
elessair 0:f269e3021894 268
elessair 0:f269e3021894 269
elessair 0:f269e3021894 270 ```
elessair 0:f269e3021894 271 // Automatically generated configuration file.
elessair 0:f269e3021894 272 // DO NOT EDIT, content will be overwritten.
elessair 0:f269e3021894 273
elessair 0:f269e3021894 274 #ifndef __MBED_CONFIG_DATA__
elessair 0:f269e3021894 275 #define __MBED_CONFIG_DATA__
elessair 0:f269e3021894 276
elessair 0:f269e3021894 277 // Configuration parameters
elessair 0:f269e3021894 278 #define MBED_CONF_MYAPP_WELCOME_STRING "Hello!" // set by application
elessair 0:f269e3021894 279 #define MBED_SERIAL_UART_SPEED 2400 // set by application[*]
elessair 0:f269e3021894 280 #define MBED_CONF_TARGET_STACK_SIZE 256 // set by target
elessair 0:f269e3021894 281 #define MBED_CONF_TARGET_MY_OWN_CONFIG 0 // set by target
elessair 0:f269e3021894 282 #define INTERNAL_GPTMR_PERIOD 100 // set by application[*]
elessair 0:f269e3021894 283 #define MBED_CONF_MYLIB_BUFFER_SIZE 128 // set by library:mylib[NXP]
elessair 0:f269e3021894 284 #define MBED_CONF_MYLIB_QUEUE_SIZE 20 // set by library:mylib[NXP]
elessair 0:f269e3021894 285 // Macros
elessair 0:f269e3021894 286 #define MYMOD_MACRO1 // defined by library:mylib
elessair 0:f269e3021894 287 #define MYMOD_MACRO2 "TEST" // defined by library:mylib
elessair 0:f269e3021894 288
elessair 0:f269e3021894 289 #endif
elessair 0:f269e3021894 290 ```
elessair 0:f269e3021894 291
elessair 0:f269e3021894 292 Note that a macro definition will *not* be generated for a parameter that doesn't have a value.
elessair 0:f269e3021894 293
elessair 0:f269e3021894 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).
elessair 0:f269e3021894 295
elessair 0:f269e3021894 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.
elessair 0:f269e3021894 297
elessair 0:f269e3021894 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.