之前用Keil MDK做项目的时候有个想法:宏定义能做成可视化模板吗?这样我就不用直接修改相应的了.h或者.c文件还可以减少工程编译问题造成的手误。
此外,当程序需要更改参数时,也可以告诉不懂程序的人帮助配置,以提高程序的维护性。很荣幸,Keil MDK支持这种方法!
那么如何实现呢?在官方文档中搜索:
该文档描述得非常详细,并提供了一个配置模板,我们只需按照文档描述描述相应的格式来生成一个图形配置界面。(),我在这里用的是KeilV5.不清楚后面的新版本是否改善了这个问题。
接下来我们再建一个.h或者一个.c然后是文件.h文件或者.c加入文件开头:
//<<<UseConfigurationWizardinContextMenu>>>
加入文件结尾:
//<<<UseConfigurationWizardinContextMenu>>>
然后重新关闭项目,继续打开项目,然后打开文件,看到以下效果:
接下来,我们需要在配置导向的开头和结尾添加我们的配置方法。以下是配置方法的语法规则:
接下来,我们可以根据上述官方网站提供的配置模板和参数快速修改我们想要的配置模板,提供单选框、复选框、字符串、参数范围定义等功能的配置方案。以熊派为例:
//<<<UseConfigurationWizardinContextMenu>>> #ifndef__BEARPI_CONFIG_H #define__BEARPI_CONFIG_H //是否支持调试 //<c1>DebugConfig //<i>DebugConfiggeneration #define_USE_DEBUG //</c> ///小熊派发配置,选择E53传感器模块及IoT通信模组 //<h>BearPiConfig //<o>SelectE53Module //<i>Default:E53_IA1 //<0=>E53_IA1 //<1=>E53_SC1 //<2=>E53_SC2 //<3=>E53_SF1 //<4=>E53_IS1 //<5=>E53_ST1 #defineBEARPI_E53_MODULE0 //<o>SelectWANModule //<i>Default:E53_IA1 //<0=>NB-IoT&Card-NB35-A //<1=>WIFI-WIFI8266 //<2=>2G-G26 //<3=>HiLink-HiLink710 #defineBEARPI_WAN_MODULE0 //</h> 是否支持调试LED //<c1>SupportDebugLed //<i>UsePC13debugled #define_SUPPORT_DEBUG_LED //</c> 是否支持键盘 //<c1>SupportKeyBoard //<i>Supportusingkeyboard #define_SUPPORT_KEYBOARD //</c> //是否支持AT24C02 //<c1>SupportAT24C02 //<i>SupportusingAT24C02tostoremoduleparameters #define_SUPPORT_AT24C02 //</c> //是否支持W25Q64 //<c1>SupportW25Q64 //<i>SupportusingSPIFLASHtostoremoduleparameters //#define_SUPPORT_W25Q64 //</c> //是否支持SD卡 //<c1>SupportSDCard //<i>SupportusingSPIFLASHtostoremoduleparameters #define_SUPPORT_SDCARD //</c> ///版本信息 //<s>Versioninformation //<i>version #defineBEARPI_CONFIG_VERSION"1.0.0" #endif//__BEARPI_CONFIG_H //<<<endofconfigurationsection>>>
最终效果如下:
当我们选择相应的功能时,宏定义会自动修改相应的参数,如修改版本信息:
20220326
我们.h文件中的宏定义修改了该值:
Keil MDK这个功能真是单片机工程师的福音!
参考资料
[1]https://www.keil.com/support/man/docs/uv4cl/uv4cl_ut_configwizard.htm
[2]https://blog.csdn.net/qq_15647227/article/details/89297207
—— The End——
往期推荐
你掌握了新手经常忽略的嵌入式基础知识点吗?
有趣的项目,OLED实现"裸眼3D"
国内单片机替代选型集合势在必行!
走进晶圆厂,深入了解芯片制造工艺
大疆工厂的自动化程度,真的有点高
实用的单片机接反电路,再也不怕电源接反了
最适合单片机的通信协议,如何设计?
你点的每个,我都认真当成了