XC8编译器无法识别__delay宏

时间:2020-07-01 13:51:51

标签: c xc8 attiny

我想对一个ATtiny85微控制器进行编程,并且已经意识到我的程序需要一些延迟才能正常工作。我正在使用MPLabX和XC8编译器。因此,我应该能够使用__delay_ms()宏,并且MPLab会识别该宏,并且不会将红线放在代码下。但是,当我尝试编译程序时,使用宏的每一行都会引发错误。 “对__delay_ms的未定义引用”,以及使用该宏的第一行的其他“隐式声明__delay_ms”。我确实正确定义了_XTAL_FREQ并包含了xc.h。

即使没有延迟宏,代码也可以正常编译,但是不能正常工作,所以我需要延迟。

我不知道问题是什么。我之前使用__delay_ms宏对其他微控制器进行了编程。我也在使用最新版本的XC8编译器。并且根据编译器的文档,该版本与ATtiny85完全兼容。

我也试图在Internet上找到解决方案,但没有找到任何解决我问题的方法...

有什么想法可以解决问题吗?

2 个答案:

答案 0 :(得分:1)

因此,我在xc8的包含目录中进行了更多挖掘,发现了一些东西。 如果包含util / delay.h,则可以使用这些函数,但只能使用一个下划线而不是两个下划线。因此命令必须是_delay_ms()。然后,我可以编译代码,但是它缺少F_CPU的定义。但是,这只会导致警告而不是错误。我将尝试找出F_CPU的定义位置。我猜它是相对于_XTAL_FREQ定义的...

我会及时通知您。

答案 1 :(得分:0)

也许这应该是一条评论,但是我想给你一个例子,它对我来说很好:

这是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);
    }
 }