NRF52832 SDK timer函数编译报错的问题总结及对SDK宏套路的理解

在使用nordic官方SDK的时候,尝尝会看到nrf_xxxx和nrfx_xxx这样的函数开头或文件名开头。其区别是nrfx开头的是对以前代码的扩展或升级。这就有个问题。新软件对就软件的兼容性问题。

为了解决这个问题。NORDIC的官方SDK的宏定义系统做的非常复杂。 初次看,很让人一头雾水。为了方便日后查看。对这两天的摸索做一个总结。

我的SDK版本是15.2。通过研究发现,不同版本,变动还挺大。所以可以仔细研究下。

宏定义主要在如下两个文件中

1.sdk_config.h :新的SDK配置,基本都是在这里进行。
2.apply_old_config.h :为了兼容。又有此文件。里面是很复杂的条件编译。甚至有很多undef这样宏。影响sdk_config.h的宏定义。

apply_old_config.h在nrf_glue.h文件中被引入。如下所示。

加粗样式

以Timer举例说明。

使用CMSIS Configurator工具,打开sdk_config.h文件。可以发现timer的宏开关有两个地方定义。如下图所示。这两个的不同是一个对应旧版本的NRF,一个对应扩展版本的nrfx。
在这里插入图片描述

那应该选哪个呢?

答案是:两个都可以选。但是我建议看官方例程怎么选,就照着选就行了。不然会有奇怪的问题。

在查看timer的官方代码的时候。发现一个别扭的事。代码函数名是NRF的旧版本。但是SDK又通过宏转义成了nrfx了。或许是为了兼容吧。如:代码调用nrf_drv_timer_init。通过代码跟踪其被宏转义成了nrfx_timer_init。
在这里插入图片描述

如果两个宏都选了。会怎样?

答:会报错。所以只能选1个。在这里插入图片描述

官方例程把NRFX_TIMER_ENABLE和TIMER_ENABLE都使能了。不会出问题吗?

答:在apply_old_config.h会看到很多类似下面的宏条件。TIMER_ENABLE定义后。会把NRFX_TIMER_ENABLE的宏去掉。
在这里插入图片描述

#if defined(TIMER_ENABLED)

#undef NRFX_TIMER_ENABLED
#define NRFX_TIMER_ENABLED TIMER_ENABLED

我想使用NRFX_TIMER_ENABLE里面的函数。怎么办

1.需要把apply_old_config.h的 引用去掉。但是会有问题。编译通过了。但是好像代码也要跟着改。否则会运行结果不对。我没有深入研究这个问题。但隐隐感觉应该是函数调用改变了。函数代码不一样了。

参考资料

https://devzone.nordicsemi.com/f/nordic-q-a/42588/the-difference-between-nrfx_timer-and-nrf_drv_timer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值