我正在开发一个基于 MSP430 微芯片的项目,使用 IAR 编译器。这是简化的问题:
在我的项目中,我有 3 个文件:
在clock.h中:
#define MCLK_8MHZ
void clk_init(void);
在clock.c中:
#include "clock.h"
void clk_init(void)
{
#ifdef MCLK_8MHZ
#define delay_ms(x) __delay_cycles((long)(1000000*(double)x/1000.0))
#endif
#ifdef MCLK_12MHZ
...
#endif
}
在main.c 中:
#include "clock.h"
clk_init();
delay_ms(5);
并且编译器会说 函数“delay_ms”隐式声明
我认为它将 delay_ms() 误认为是函数而不是宏。当然我可以将它定义为一个真正的函数。但我认为这会损害时间控制的准确性。
如何解决这个问题呢?