为什么必须在工程配置里的预处理中修改?

在3模键盘例程中,config.h中的CLK_OSC32K注释写着“该项请勿在此修改,必须在工程配置里的预处理中修改”。这是为什么呢?我这个文件不需要多个项目共用。另外如果用vscode + platformIO来开发的话,这要怎么处理?

您好,如果确定要用到无线功能,可以在CHXXx_common.h中,包含#include "CONFIG.h",这样就绕过了“必须在工程配置里的预处理中修改”的限制。

注意CHXXx_common.h是公共文件,若其他用不到无线功能的工程编译到,会由于找不到CONFIG.h而报错。

image.png


@TECH_JW 你似乎误会了我的问题,“必须在工程配置里的预处理中修改”的意思我的理解是如下图,在设置里手动填入这些宏定义,而不是在config.h里或者在别的.h文件里直接写“CLK_OSC32K=1”

屏幕截图 2024-03-06 160427.png


不是所有宏定义都必须要在工程配置中修改。EVT中有部分公共文件,比如说BLE例程中的config.h。在公共文件里直接修改参数,多数情况也是可以用的,但是会影响其他使用该公共文件的工程。比如说修改了config,h中的HAL_SLEEP改为了1启用了休眠,那么所有BLE工程都启用了休眠。

CLK_OSC32K比较特殊,您也注意到了,其后有注释,要求必须在您上楼的图中修改。原因是CH58x_common.h(以CH583EVT为例)中,有参数CAB_LSIFQ,是根据BLE例程中才用到的宏CLK_OSC32K去条件编译的。按2楼的方法,在确定使用BLE的情况下,可以在CH58x_common.h添加包含config,h,那么可以直接修改config,h的参数,也就可以用vscode + platformIO来开发了。

如果直接在CH58x_common.h中默认包含config,h,那么其他未使用BLE的例程会编译报错,比如说ADC例程,因为config,h只在BLE文件夹下的例程中才默认被使用。

3楼的工程配置中去配置CLK_OSC32K,其优先级更高,CH58x_common.h也会根据工程配置的CLK_OSC32K去条件编译CAB_LSIFQ了。

您可以尝试在config.h中直接修改CLK_OSC32K为2,观察CH58x_common.h中的CAB_LSIFQ是否有变动。


只有登录才能回复,可以选择微信账号登录