Ошибка сборки PIC16f877a

Мне удалось успешно скомпилировать приведенную ниже программу на моем рабочем столе или другом ПК. Однако я не могу скомпилировать этот код на своем ноутбуке. Я попытался переустановить программное обеспечение той же версии, что и на рабочем столе. Это дает мне ту же ошибку, но будет компилироваться с кодом, отмеченным «Нормальная светодиодная программа» ниже. Как я могу это исправить?

Программа, которая не компилируется:

#include<pic.h>
__CONFIG(0x3F3A);

main()
{
    TRISB=0;
    PORTB=0;

    PSA=0;
    PS2=0;
    PS1=0;
    PS0=0;
    TMR0=6;
    T0CS=0;
    T0SE=0;
    TMR0IE=1;

    int count=0;

    while(1)
    {
        if(TMR0IF==1)
        {
            TMR0IF=0;

            count=count++;
            if(count==2000)
            {
                RB0=~RB0;
                count=0;
            }
        }
    }       
}

Предупреждающая ошибка:

введите здесь описание изображения

Обычная программа LED (успешно компилируется):

#include <pic.h>
__CONFIG(0x3F38);
main()
{
    TRISB=0;
    PORTB=0;
    while(1)
    {
        PORTB=0x01;
    }
}

person whywhy    schedule 31.05.2014    source источник
comment
Что находится в __CONFIG?   -  person Jongware    schedule 03.06.2014
comment
@Jongware, __CONFIG() - это встроенный компонент Microchip для компилятора HI-TECH, используемый для записи битов конфигурации устройства во флэш-память. Похоже, что и нормальная программа светодиодов, и та, которая дает сбой, являются допустимыми конфигурациями. Вы должны посмотреть на таблицу данных, чтобы увидеть, какие настройки. Единственная разница между этими двумя - это биты генератора, хотя это не должно влиять на компиляцию.   -  person embedded_guy    schedule 03.06.2014


Ответы (1)


Похоже, этот компилятор не поддерживает код C99, в частности объявление переменных в середине блока. Переместите объявление count в начало блока main, например:

main()
{
    int count = 0;

    TRISB = 0;

    ...
}
person nobody    schedule 03.06.2014
comment
Да, это работает правильно :) - person whywhy; 03.06.2014
comment
@whywhy, вы можете взглянуть на компилятор и посмотреть, есть ли флаг для поддержки C99. Если он установлен на вашем ПК, а не на ноутбуке, возможно, поэтому вы получите разные результаты с одним и тем же кодом. - person embedded_guy; 04.06.2014
comment
Привет embedded_guy, я не уверен, что это проблема C99, потому что я решаю ее, переустанавливая программное обеспечение. Возможно, ошибка встроенной функции из-за C99 не работала должным образом в предыдущей версии MPlab. Спасибо за информацию о c99. - person whywhy; 06.06.2014