-
目的
为了能快速地实现宏定义的可视化管理及使用其修改数值项
-
以下使用nrf52832为例来新建工程进行演示
step 1:
新建一个工程,工程名为test,然后点保存
step 2:
选择nRF52832_xxAA设备类型,然后点OK键确定
step 3:
选择勾上CORE 5.0.2和Startup这两个选项,然后点击OK键确定
step 4:
新键一个main.c文件并加入到工程,加入nrf_52.h头文件,并输入以下代码后编译
step 5:
新建一个sdk_config.h,并加入工程,然后输入以下内容
-
现在演示Use Configuration Wizard in Context Menu这个功能
step 1:
在sdk_conf.h的文件头部加入// <<< Use Configuration Wizard in Context Menu >>>\n和文件的未尾加
入// <<< end of configuration section >>>这两行,来告诉keil这是一个配置向导菜单的开始与结束声明
step 2:
关闭工程,然后再次打开工程,sdk_config.h中在keil下方会多次一个Configuration Wizard选项,点击此选项
step 3:
1. 上面配置内没有任何东西,现在来讨论<h></h>这对标签,这对标签是声明一个标题头,跟随在<h>后面的内容将会
被当成标题头显示在配置选项卡中,例如声明一个TEST_HEAD,在sdk_config.h中的// <<< Use Configuration Wizard in
Context Menu >>>\n的后面输入以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// </h>
// <<< end of configuration section >>>
#endif
配置选项卡中将会多出一个标题头TEST_HEAD
2.<e>和</e>这个标签是一个单选开关,作用是开启或关闭一位选项,跟随在<e>后面的内容将作为单选开关的描述内容,
例如,在TEST_HEAD标题组中输入以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// </h>
// <<< end of configuration section >>>
#endif
TEST_ENABLE后面将会多出一个单选框
3.如果开启的值不是1和0,而是其它的位,假如要开启或关闭第2位,那么此时使用<e.n></e>这组标签,其中n表示第几位,
例如,在sdk_config.h中输入以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
#define TEST_BIT2 4
// </e>
// </h>
// <<< end of configuration section >>>
#endif
TEST_ENABLE_BIT2多出一个单选框,TEST_BIT2的取值是0和4
4. <i>这个标签是信息提示,使用这个标签,当鼠标停留在当前的条目的时候可以显示提示信息,提示<i>后面的内容,这个标
签是单独的一个标签,不是成对出现的,例如,输入以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
//<i> this is enable bit 2
#define TEST_BIT2 4
// </e>
// </h>
// <<< end of configuration section >>>
#endif
当鼠标放在TEST_ENABLE_BIT2上后会弹出一个提示信息
5. <q>这个标签是单选不分段标签,这个标签也是单独的,没有成对出现,这个和<e></e>标签有点相似,首先都是单选框标
签,不同的是<q>不分段,<e></e>是可以分段,例如输入以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
//<i> this is enable bit 2
#define TEST_BIT2 4
// </e>
// <q> TEST_SINGLE_ENALBE
#define TEST_SINGLE 1
// </h>
// <<< end of configuration section >>>
#endif
TEST_SINGLE_ENALBE在TEST_ENABLE_BIT2的分段下面,TEST_SINGLE_ENALBE下没有任何分组
6. 如果不分段单选标签要指定某一位,那么使用<q.n>来定义,n表示第几位,例如要开启或关闭第7位,则输入以下内容后
保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
//<i> this is enable bit 2
#define TEST_BIT2 4
// </e>
// <q> TEST_SINGLE_ENALBE
#define TEST_SINGLE 1
// <q.7> TEST_SINGLE_BIT7_ENALBE
#define TEST_SINGLE_BIT7 0x80
// </h>
// <<< end of configuration section >>>
#endif
TEST_SINGLE_BIT7_ENALBE单选框的开启或关闭,使TEST_SINGLE_BIT7 的取值是0和0x80两个值
7. <o>这个标签是输入或选择数值,例如,输入以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
//<i> this is enable bit 2
#define TEST_BIT2 4
// </e>
// <q> TEST_SINGLE_ENALBE
#define TEST_SINGLE 1
// <q.7> TEST_SINGLE_BIT7_ENALBE
#define TEST_SINGLE_BIT7 0x80
// <o> INPUT_A_NUMBER
#define TEST_NUMBER 0X28
// </h>
// <<< end of configuration section >>>
#endif
INPUT_A_NUMBER后面可以输入想要的数值
8.假如输入的值要限定范围,则要使用<min-max>标签来修饰,例如限定的输入是0到16之间,则在sdk_config.h中输入
以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
//<i> this is enable bit 2
#define TEST_BIT2 4
// </e>
// <q> TEST_SINGLE_ENALBE
#define TEST_SINGLE 1
// <q.7> TEST_SINGLE_BIT7_ENALBE
#define TEST_SINGLE_BIT7 0x80
// <o> INPUT_A_NUMBER
// <0-16>
#define TEST_NUMBER 0x10
// </h>
// <<< end of configuration section >>>
#endif
当INPUT_A_NUMBER后面输入的值不在0~16之间,则会自动转换成最小或最大值
9.如果输入的值是某个数的倍数,则可以使用<min-max:step>这种标签形式,min为最小值,max为最大值,step为步进数,
例如,输入以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
//<i> this is enable bit 2
#define TEST_BIT2 4
// </e>
// <q> TEST_SINGLE_ENALBE
#define TEST_SINGLE 1
// <q.7> TEST_SINGLE_BIT7_ENALBE
#define TEST_SINGLE_BIT7 0x80
// <o> INPUT_A_NUMBER
// <0-16:2>
#define TEST_NUMBER 0x02
// </h>
// <<< end of configuration section >>>
#endif
实例中INPUT_A_NUMBER输入的值只能是2的倍数才有效
10. 如何使<o>标签的值做成下拉列表呢,需要使用<0=>,<1=>...<n=>之类的标签来实现,例如,输入以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
//<i> this is enable bit 2
#define TEST_BIT2 4
// </e>
// <q> TEST_SINGLE_ENALBE
#define TEST_SINGLE 1
// <q.7> TEST_SINGLE_BIT7_ENALBE
#define TEST_SINGLE_BIT7 0x80
// <o> INPUT_A_NUMBER
// <0-16:2>
#define TEST_NUMBER 0x02
// <o> TEST_LIST_TABLE
// <0=> 0
// <10=> 1
// <100=> 2
#deinf TEST_LIST_NUMBER 0
// </h>
// <<< end of configuration section >>>
#endif
实例中TEST_LIST_TABLE后面将有3个选项的下拉列表可选择
11.如果下拉列表控制指定的某一位,则需要使用<o.n> <0=> 0 <1=> 1等形式,例如,输入以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
//<i> this is enable bit 2
#define TEST_BIT2 4
// </e>
// <q> TEST_SINGLE_ENALBE
#define TEST_SINGLE 1
// <q.7> TEST_SINGLE_BIT7_ENALBE
#define TEST_SINGLE_BIT7 0x80
// <o> INPUT_A_NUMBER
// <0-16:2>
#define TEST_NUMBER 0x02
// <o> TEST_LIST_TABLE
// <0=> 0
// <10=> 1
// <100=> 2
#deinf TEST_LIST_NUMBER 0
// <o.7> TEST_LIST_TABLE_LIMIT
// <0=> 0 <1=> 1
#define TEST_LIST_NUMBER_LIMIT 0x00
// </h>
// <<< end of configuration section >>>
#endif
TEST_LIST_TABLE_LIMIT如果选择1,则TEST_LIST_NUMBER_LIMIT值变成0x80
12.如果是一个32位的值只需要8位,那么使用<0.0..7> <0=> 0 <1=> 1 <255=> 2的形式实现,例如,输入以下内容
后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
//<i> this is enable bit 2
#define TEST_BIT2 4
// </e>
// <q> TEST_SINGLE_ENALBE
#define TEST_SINGLE 1
// <q.7> TEST_SINGLE_BIT7_ENALBE
#define TEST_SINGLE_BIT7 0x80
// <o> INPUT_A_NUMBER
// <0-16:2>
#define TEST_NUMBER 0x02
// <o> TEST_LIST_TABLE
// <0=> 0
// <10=> 1
// <100=> 2
#deinf TEST_LIST_NUMBER 0
// <o.7> TEST_LIST_TABLE_LIMIT
// <0=> 0 <1=> 1
#define TEST_LIST_NUMBER_LIMIT 0x00
// <o.0..7> TEST_BIT0_BIT7
// <0=> 1 <1=> 2 <255=> 3
#define TEST_BIT0_BIT7_NUMBER 255
// </h>
// <<< end of configuration section >>>
#endif
TEST_BIT0_BIT7 的3个选项可改变TEST_BIT0_BIT7_NUMBER的值
13. 输入字符串,使用<s>标签,例如,输入以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
//<i> this is enable bit 2
#define TEST_BIT2 4
// </e>
// <q> TEST_SINGLE_ENALBE
#define TEST_SINGLE 1
// <q.7> TEST_SINGLE_BIT7_ENALBE
#define TEST_SINGLE_BIT7 0x80
// <o> INPUT_A_NUMBER
// <0-16:2>
#define TEST_NUMBER 0x02
// <o> TEST_LIST_TABLE
// <0=> 0
// <10=> 1
// <100=> 2
#deinf TEST_LIST_NUMBER 0
// <o.7> TEST_LIST_TABLE_LIMIT
// <0=> 0 <1=> 1
#define TEST_LIST_NUMBER_LIMIT 0x00
// <o.0..7> TEST_BIT0_BIT7
// <0=> 1 <1=> 2 <255=> 3
#define TEST_BIT0_BIT7_NUMBER 255
// <s> TEST_STRING
#define STRING_VAL "test"
// </h>
// <<< end of configuration section >>>
#endif
TEST_STRING输入的字串将会修改到STRING_VAL中定义的值
14. 如何限定字串的长度呢,使用<s.n>的标签形式来实现,例如,输入以下内容后保存
#ifndef SDK_CONFIG_H
#define SDK_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>\n
// <h> TEST_HEAD
// <e> TEST_ENABLE
#define TEST_BIT0 1
//</e>
// <e.2> TEST_ENABLE_BIT2
//<i> this is enable bit 2
#define TEST_BIT2 4
// </e>
// <q> TEST_SINGLE_ENALBE
#define TEST_SINGLE 1
// <q.7> TEST_SINGLE_BIT7_ENALBE
#define TEST_SINGLE_BIT7 0x80
// <o> INPUT_A_NUMBER
// <0-16:2>
#define TEST_NUMBER 0x02
// <o> TEST_LIST_TABLE
// <0=> 0
// <10=> 1
// <100=> 2
#deinf TEST_LIST_NUMBER 0
// <o.7> TEST_LIST_TABLE_LIMIT
// <0=> 0 <1=> 1
#define TEST_LIST_NUMBER_LIMIT 0x00
// <o.0..7> TEST_BIT0_BIT7
// <0=> 1 <1=> 2 <255=> 3
#define TEST_BIT0_BIT7_NUMBER 255
// <s> TEST_STRING
#define STRING_VAL "test"
// <s.5> TEST_STRING_LIMIT
#define STRING_LIMIT_VAL "Hello"
// </h>
// <<< end of configuration section >>>
#endif
TEST_STRING_LIMIT后面输入的值将限定5个字符长度