为什么在将函数插入示例代码后出现错误?
Why am I getting errors after inserting functions to example code?
对于令人难以置信的含糊标题深表歉意;我会尽量在这里更具体。
我正在 SEGGER Embedded Studio IDE 中的 NRF52832 微控制器上开发一个程序,该程序通过 SPI 从外部 ADC 接收数据并输出占空比取决于数据的 PWM 信号模数转换器。
我得到了 SPI driver 和 PWM driver 在不同项目中工作的示例代码,现在我正在尝试将两者结合起来。但是,当我从 PWM driver 插入一个函数到 SPI driver 并在 SPI driver 中插入相应的包含文件时,我在(看似)不相关的 header 文件。这是一个具体的例子:
(1) 我添加宏
APP_PWM_INSTANCE(PWM1,1);
到 SPI driver 来初始化 PWM 实例,就像 PWM driver 一样。当然,如果没有包含宏定义的 header 文件,我会得到一个错误。
(2) 因此,我包含 header 文件:
#include "/Users/payton/opt/nRF5_SDK_15.0.0/nRF5_SDK_15.0.0_a53641a/components/libraries/pwm/app_pwm.h"
编译器接受新的 header 文件和添加的宏,但构建失败,因为 nrfx_timer.h header 文件中间出现以下错误:
#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
的行
知道为什么会这样吗?
NRFX_CONCAT_3
似乎(从其名称和错误输出)是一个通过连接三个组件创建符号的宏。结果生成的符号未定义。
也许它是在其他一些头文件中定义的,你没有包含,或者有一些条件编译意味着排除了所需的定义,或者你的目标可能没有计时器实例 3。
查找 NRFX_TIMER1_INST_IDX
的定义并确定是否包含该文件及其定义的配置。
找到文件头sdk_config.h和#define NRFX_TIMER1_ENABLED 1.我解决了。
对于令人难以置信的含糊标题深表歉意;我会尽量在这里更具体。
我正在 SEGGER Embedded Studio IDE 中的 NRF52832 微控制器上开发一个程序,该程序通过 SPI 从外部 ADC 接收数据并输出占空比取决于数据的 PWM 信号模数转换器。
我得到了 SPI driver 和 PWM driver 在不同项目中工作的示例代码,现在我正在尝试将两者结合起来。但是,当我从 PWM driver 插入一个函数到 SPI driver 并在 SPI driver 中插入相应的包含文件时,我在(看似)不相关的 header 文件。这是一个具体的例子:
(1) 我添加宏
APP_PWM_INSTANCE(PWM1,1);
到 SPI driver 来初始化 PWM 实例,就像 PWM driver 一样。当然,如果没有包含宏定义的 header 文件,我会得到一个错误。
(2) 因此,我包含 header 文件:
#include "/Users/payton/opt/nRF5_SDK_15.0.0/nRF5_SDK_15.0.0_a53641a/components/libraries/pwm/app_pwm.h"
编译器接受新的 header 文件和添加的宏,但构建失败,因为 nrfx_timer.h header 文件中间出现以下错误:
#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
的行知道为什么会这样吗?
NRFX_CONCAT_3
似乎(从其名称和错误输出)是一个通过连接三个组件创建符号的宏。结果生成的符号未定义。
也许它是在其他一些头文件中定义的,你没有包含,或者有一些条件编译意味着排除了所需的定义,或者你的目标可能没有计时器实例 3。
查找 NRFX_TIMER1_INST_IDX
的定义并确定是否包含该文件及其定义的配置。
找到文件头sdk_config.h和#define NRFX_TIMER1_ENABLED 1.我解决了。