配置系统
<p><a href="https://os.mbed.com/docs/mbed-os/v5.14/reference/configuration.html">https://os.mbed.com/docs/mbed-os/v5.14/reference/configuration.html</a></p>
<h4></h4>
<p><code>Arm Mbed OS</code>配置系统作为<code>OS</code>的一部分,自定义了编译时配置参数。每个库可以在<code>mbed_lib.json</code>定义一些配置参数.<code>mbed_app.json</code>可以覆盖这些配置参数。配置使用JSON格式定义,如一些配置参数: </p>
<ul>
<li>获取数据的周期</li>
<li>OS线程的默认堆栈大小</li>
<li>串口接收缓存大小</li>
<li>Mbed目标的flash和RAM空间大小
<code>Arm Mbed OS</code>配置系统收集和解析所有<code>mbed_lib.json</code>文件和<code>mbed_app.json</code>文件目标配置的定义.配置系统创建一个单一的头文件<code>mbed_config.h</code>包含了所有配置参数的定义转换成C预处理宏。</li>
</ul>
<blockquote>
<p><code>mbed compile</code>将<code>mbed_config.h</code>放到build文件夹下,它在编译前执行配置系统
<code>mbed export</code>将<code>mbed_config.h</code>放到根目录文件夹下,在创建工程文件前运行配置系统</p>
<p>注意:配置系统提供增加自定义目标的方法 <code>Mbed OS</code>工具查找根目录下的<code>custom_targets.json</code>将其作为目标.</p>
</blockquote>
<h4>获取支持的配置选项</h4>
<p><code>mbed compile --config</code></p>
<h4><code>mbed_app.json</code>,<code>mbed_lib.json</code>的配置</h4>
<p>配置系统允许用户使用JSON对象<code>target_overrides</code>覆盖任何已定义的参数</p>
<pre><code>"target_overrides": {
"*": {
"cellular.random_max_start_delay": "100"
},
"K64F": {
"cellular.use-apn-lookup": false
}
}</code></pre>
<ul>
<li><code>mbed_lib.json</code>覆盖库配置</li>
<li><code>mbed_app.json</code>覆盖应用和库的配置</li>
</ul>
<h4>定义配置参数</h4>
<p>配置系统可以解析目标,库和应用定义的<code>config</code>的JSON对象的配置</p>
<pre><code>{
"config": {
"param1": {
"help": "The first configuration parameter",
"macro_name": "CUSTOM_MACRO_NAME",
"value": 0
},
"param2": {
"help": "The second configuration parameter",
"required": true
},
"param3": {
"help": "The third configuration parameter",
"value_min": 0,
"value_max": 10,
"value": 5
},
"param4": {
"help": "The fourth configuration parameter",
"accepted_values": ["test1", "test2", "0x1000"],
"value": "test2"
},
"param5": {
"help": "The fifth configuration parameter",
"value": null
},
"param6": 10
}
}</code></pre>
<p>配置项的值不定义<code>undefined</code>或设置成<code>null</code>允许在编译时指定<code>mbed compile --config</code>,r然而这个配置项不会在 <code>mbed_config.h</code>出现且不影响应用或<code>OS</code>除非它被复写了。 <code>param1</code>~<code>param5</code>使用描述对象定义。描述对象支持下面的键值:</p>
<ul>
<li>help: 可选,描述配置参数目的</li>
<li>value: 可选,定义参数值</li>
<li>value_min: 可选,定义参数最小值</li>
<li>value_max: 可选,定义参数最大值</li>
<li>accepted_values: 可选,定义可接收参数列表</li>
<li>required: 可选,指定在编译前是否必须设置参数值,默认<code>false</code>。</li>
<li>macro_name: 可选,指定宏名称。</li>
</ul>
<blockquote>
<p>配置系统自动在每个配置参数前加入前缀,这样同名的配置参数不会与目标或库的配置发生冲突。 前缀是</p>
</blockquote>
<table>
<thead>
<tr>
<th>位置</th>
<th>前缀</th>
</tr>
</thead>
<tbody>
<tr>
<td>target</td>
<td><code>target.</code></td>
</tr>
<tr>
<td>任何库</td>
<td>库名称<code>name.</code></td>
</tr>
<tr>
<td>应用</td>
<td><code>app.</code></td>
</tr>
</tbody>
</table>
<h4><code>mbed_lib.json</code> spec</h4>
<p>允许的section</p>
<table>
<thead>
<tr>
<th>section</th>
<th>必须</th>
<th>定义</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>是</td>
<td>库的名称</td>
</tr>
<tr>
<td><code>macros</code></td>
<td>否</td>
<td><code>mbed_config.h</code>定义的宏列表</td>
</tr>
<tr>
<td><code>config</code></td>
<td>否</td>
<td>库的配置参数</td>
</tr>
<tr>
<td><code>target_overrides</code></td>
<td>否</td>
<td>覆盖目标和本库的配置</td>
</tr>
</tbody>
</table>
<pre><code>{
"name": "mylib",
"config": {
"buffer_size": 1024,
"timer_period": {
"help": "The timer period (in us)",
"macro_name": "INTERNAL_GPTMR_PERIOD",
"required": true
},
"queue_size": {
"help": "Size of event queue (entries)",
"value": 10
}
},
"macros": ["MYMOD_MACRO1", "MYMOD_MACRO2=\"TEST\""],
"target_overrides": {
"K64F": {
"timer_period": 100,
"queue_size": 40
},
"NXP": {
"queue_size": 20,
"buffer_size": 128,
"target.features_add": ["IPV4"]
}
}
}</code></pre>
<h4><code>mbed_app.json</code> spec</h4>
<p><code>mbed_app.json</code>放在应用的根目录下或通过<code>mbed compile</code>和<code>mbed export</code>的<code>--app-config</code>指定。 允许的section:</p>
<table>
<thead>
<tr>
<th>section</th>
<th>必须</th>
<th>定义</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>artifact_name</code></td>
<td>否</td>
<td>执行文件名称。默认是文件夹名</td>
</tr>
<tr>
<td><code>macros</code></td>
<td>否</td>
<td><code>mbed_config.h</code>宏列表</td>
</tr>
<tr>
<td><code>config</code></td>
<td>否</td>
<td>配置参数</td>
</tr>
<tr>
<td><code>target_overrides</code></td>
<td>否</td>
<td>复写目标,库和应用配置</td>
</tr>
</tbody>
</table>
<pre><code>{
"artifact_name": "my-application",
"config": {
"welcome_string": {
"help": "The string printed on the display on start-up",
"value": "\"Hello!\""
}
},
"target_overrides": {
"*": {
"mylib.timer_period": 100
},
"NCS36510": {
"target.mac_addr_high": "0x11223344"
}
}
}</code></pre>
<blockquote>
<p>如果override不带前缀,则覆盖<code>config</code>中配置参数</p>
</blockquote>