Компилятор не поддерживает 64-битные целые числа в целевой архитектуре.

Я новичок в компиляторе MPLAB XC8 и не знаю, почему возникает эта ошибка, поскольку я не использовал 64-битное число в своем коде.

Код выглядит следующим образом

      #include <pic16f877a.h>
#pragma config FOSC = EXTRC 
#pragma config WDTE = ON 
#pragma config PWRTE = OFF 
#pragma config BOREN = ON 
#pragma config LVP = ON 
#pragma config CPD = OFF 
#pragma config WRT = OFF 
#pragma config CP = OFF 
#define _XTAL_FREQ 8000000
#include <xc.h>
void main(void) 
{
    TRISB=0x00;
    while(1)
    {
    PORTB = 0xFF;
    __delay_ms(500);
    PORTB = 0x00 ;
    __delay_ms(500);
    }
return;
}

1 ответ

Руководство пользователя XC8 документирует __delay_msмакрос и поясняет, что:

Если эти макросы используются без определения символа частоты генератора, возникнет ошибка, запрошенный период задержки слишком велик...

Попробуйте использовать гораздо меньшую задержку, например 1 мс. Вы можете обернуть задержку в цикл, который повторяется 500 раз, если вам нужно. Компилятор, вероятно, столкнулся с некоторыми числами, которые не могли поместиться в 32-битное целое число, когда он пытался превратить ваши длинные задержки в машинный код, и, к сожалению, он не выдал лучшего сообщения об ошибке.

Кроме того, если я прав в этом, это должно послужить уроком упрощения. Вы могли бы решить эту проблему самостоятельно, упростив программу до такой степени, что в ней всего одна строка кода. mainи он звонит __delay_ms(500). Затем, для дальнейшего упрощения, вы бы попробовали уменьшить задержку и заметили, что проблема исчезла. Вы бы сами разобрались, вместо того, чтобы ждать 2 дня ответа StackOverflow. См. Как создать минимальный воспроизводимый пример.

Другие вопросы по тегам