Компилятор не поддерживает 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. См. Как создать минимальный воспроизводимый пример.