为什么在将函数插入示例代码后出现错误?

时间:2018-05-20 08:45:43

标签: c embedded microcontroller spi nrf52

为令人难以置信的模糊标题道歉;我会在这里尝试更具体。

我正在SEGGER Embedded Studio IDE中的NRF52832微控制器上开发一个程序,该程序通过SPI从外部ADC接收数据,并输出一个占空比取决于ADC数据的PWM信号。

我得到了SPI驱动程序的示例代码和PWM驱动程序在不同的项目中工作,现在我试图将两者结合起来。但是,当我从PWM驱动程序插入一个函数到SPI驱动程序并在SPI驱动程序中插入相应的包含文件时,我在(看似)不相关的头文件中出错。这是一个具体的例子:

(1)我添加宏

APP_PWM_INSTANCE(PWM1,1);

到SPI驱动程序初始化PWM实例,就像PWM驱动程序一样。当然,如果没有包含宏定义的头文件,我会收到错误。

(2)所以,我包括头文件:

#include "/Users/payton/opt/nRF5_SDK_15.0.0/nRF5_SDK_15.0.0_a53641a/components/libraries/pwm/app_pwm.h"

编译器接受新的头文件和添加的宏,但由于nrfx_timer.h头文件中间出现以下错误,构建失败:

#define NRFX_TIMER_INSTANCE(id)                                   \
{                                                                 \
    .p_reg            = NRFX_CONCAT_2(NRF_TIMER, id),             \
    .instance_id      = NRFX_CONCAT_3(NRFX_TIMER, id, _INST_IDX), \
    .cc_channel_count = NRF_TIMER_CC_CHANNEL_COUNT(id),           \
}

ERROR: 
'NRFX_TIMER1_INST_IDX' undeclared here (not in a function)
in definition of macro 'NRFX_CONCAT_3_'
in expansion of macro 'NRFX_CONCAT_3'
in expansion of macro 'NRFX_TIMER_INSTANCE'
in expansion of macro 'NRF_DRV_TIMER_INSTANCE'
in expansion of macro 'APP_PWM_INSTANCE'
Build failed

错误指向定义.instance_id

的行

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:-1)

NRFX_CONCAT_3出现(从其名称和错误输出)作为通过三个组件的串联创建符号的宏。生成的符号未定义。

也许它是在其他一些标题中定义的,你没有包含,或者有一些条件编译意味着排除了所需的定义,或者你的目标没有定时器实例3。

找到NRFX_TIMER1_INST_IDX的定义,并确定文件是否包含在内以及定义的配置。