XC8 编译器无法识别 __delay 宏
XC8 compiler does not recognize __delay macros
我想对 ATtiny85 微控制器进行编程,并意识到我的程序需要一点延迟才能正常工作。我正在使用 MPLabX 和 XC8 编译器。所以我应该能够使用 __delay_ms() 宏并且 MPLab 确实识别宏并且不会将红线放在代码下方。但是,当我尝试编译程序时,在我使用宏的每一行都会抛出一个错误。 “对 __delay_ms 的未定义引用”以及使用宏的第一行的附加“__delay_ms 的隐式声明”。我确实正确定义了 _XTAL_FREQ 并包含了 xc.h。
代码在没有延迟宏的情况下也能正常编译,但它不能正常工作,所以我需要延迟。
我不知道是什么问题。我之前用 __delay_ms 宏编程过其他微控制器。我也在使用最新版本的 XC8 编译器。根据编译器的文档,该版本与 ATtiny85 完全兼容。
我也尝试在互联网上寻找解决方案,但没有找到任何对我的问题有帮助的东西...
知道问题出在哪里吗?
也许这应该是一个评论,但我想给你一个适合我编译的例子:
这是 PIC 的工作方式
编译器:xc8 2.0
#include <xc.h>
#define _XTAL_FREQ 4000000
void main (void)
{
while(1)
{
__delay_ms(1);
}
}
对于 AVR,它有点不同:(太疯狂了!)
#define F_CPU 4000000UL
#include <xc.h>
#include <avr/delay.h>
int main(void)
{
while (1)
{
_delay_ms(1);
}
}
所以我在 xc8 的包含目录中做了更多的挖掘,我发现了一些东西。
如果我包含 util/delay.h 我可以使用这些函数,但只使用一个下划线而不是两个。所以命令必须是_delay_ms()。然后我可以编译代码,但它缺少 F_CPU 的定义。然而,这只会导致警告而不是错误。我将尝试找出 F_CPU 的定义位置。我猜它是相对于 _XTAL_FREQ 某处定义的...
我会及时通知您最新的信息。
并且.. Microchip 通过 AVR 再次改变了一切.. 这是 MPLABX 5.5 和 XC8 2.32。
#define F_CPU 4000000UL
#include <xc.h>
#include <util/delay.h> // change to util from avr
int main(void)
{
while (1)
{
_delay_ms(1);
}
}
`
我想对 ATtiny85 微控制器进行编程,并意识到我的程序需要一点延迟才能正常工作。我正在使用 MPLabX 和 XC8 编译器。所以我应该能够使用 __delay_ms() 宏并且 MPLab 确实识别宏并且不会将红线放在代码下方。但是,当我尝试编译程序时,在我使用宏的每一行都会抛出一个错误。 “对 __delay_ms 的未定义引用”以及使用宏的第一行的附加“__delay_ms 的隐式声明”。我确实正确定义了 _XTAL_FREQ 并包含了 xc.h。
代码在没有延迟宏的情况下也能正常编译,但它不能正常工作,所以我需要延迟。
我不知道是什么问题。我之前用 __delay_ms 宏编程过其他微控制器。我也在使用最新版本的 XC8 编译器。根据编译器的文档,该版本与 ATtiny85 完全兼容。
我也尝试在互联网上寻找解决方案,但没有找到任何对我的问题有帮助的东西...
知道问题出在哪里吗?
也许这应该是一个评论,但我想给你一个适合我编译的例子:
这是 PIC 的工作方式
编译器:xc8 2.0
#include <xc.h>
#define _XTAL_FREQ 4000000
void main (void)
{
while(1)
{
__delay_ms(1);
}
}
对于 AVR,它有点不同:(太疯狂了!)
#define F_CPU 4000000UL
#include <xc.h>
#include <avr/delay.h>
int main(void)
{
while (1)
{
_delay_ms(1);
}
}
所以我在 xc8 的包含目录中做了更多的挖掘,我发现了一些东西。 如果我包含 util/delay.h 我可以使用这些函数,但只使用一个下划线而不是两个。所以命令必须是_delay_ms()。然后我可以编译代码,但它缺少 F_CPU 的定义。然而,这只会导致警告而不是错误。我将尝试找出 F_CPU 的定义位置。我猜它是相对于 _XTAL_FREQ 某处定义的...
我会及时通知您最新的信息。
并且.. Microchip 通过 AVR 再次改变了一切.. 这是 MPLABX 5.5 和 XC8 2.32。
#define F_CPU 4000000UL
#include <xc.h>
#include <util/delay.h> // change to util from avr
int main(void)
{
while (1)
{
_delay_ms(1);
}
}
`