从以下包含的标题中看不到定义的参数[AVR C ++]

时间:2018-03-18 14:41:32

标签: c++ macros header include avr

我无法弄清楚以下代码有什么问题。

我正在用C ++构建一个AVR项目。我需要定义一些将在项目的不同部分使用的参数。更具体地说,我想定义CPU频率,以便在项目的其他部分进行一些计算。

// ======= main.cpp ======
#define F_CPU 16000000UL
#include "MyDriver.h"

int main(void)
{
   [...]
}

// ======= MyDriver.h =======
#ifndef MY_DRIVER_H_
#define MY_DRIVER_H_

#ifndef F_CPU
   #error "Please define F_CPU in order to implement the driver"
#endif

#include <avr/io.h>
#include <avr/interrupt.h>


#endif    
[...]

编译器根据我的#error指令返回错误:在MyDriver.h中,未定义F_CPU。 考虑并推测问题可能属于F_CPUmain.cpp的定义这一事实,我想创建一个顶级config.h标题以包含所有全局定义:

// ======= main.cpp ======
#include "config.h"
#include "MyDriver.h"

int main(void)
{
   [...]
}

// ======= config.h ========
#ifndef CONFIG_H_
#define CONFIG_H_

#define F_CPU 16000000UL

#endif

// ======= MyDriver.h =======
#ifndef MY_DRIVER_H_
#define MY_DRIVER_H_

#ifndef F_CPU
   #error "Please define F_CPU in order to implement the driver"
#endif

#include <avr/io.h>
#include <avr/interrupt.h>

[...]
#endif    

没有任何变化:MyDriver.h无法看到F_CPU定义。我还使用了一些编译指示来验证编译器是否会遇到config.h并且他们确认了这一点。

有什么建议吗?

提前感谢

编辑 - 解决方案

我的内疚没有适当地寻找解决方案。类似的问题在讨论中 Macro defined in main.c not visible in another included file

所以使用config.h的方式是正确的,但我必须在每个标题中包含config.h,而不是从主文件中包含// ======= main.cpp ====== #include "MyDriver.h" int main(void) { [...] } // ======= config.h ======== #ifndef CONFIG_H_ #define CONFIG_H_ #define F_CPU 16000000UL #endif // ======= MyDriver.h ======= #ifndef MY_DRIVER_H_ #define MY_DRIVER_H_ #include "config.h" #ifndef F_CPU #error "Please define F_CPU in order to implement the driver" #endif #include <avr/io.h> #include <avr/interrupt.h> [...] #endif

IService

1 个答案:

答案 0 :(得分:0)

您的示例代码编译没有问题。这里必须包含一些未包含在您的代码中的内容。我的猜测是你要么没有完全按照你的想法进行编译(我们已经在那里)或者在这里没有包含的标题中有一些宏观魔法。