До кучи: с помощью Vlad27 еще выловил баг в STD-версии для PIC16 (PICC STD 9.60PL3) //------------------------------------
volatile char var0;
bank1 volatile char var1;
//------------------------------------
char func (char i)
{
if (i) return 1;
return 0;
}
//------------------------------------
void Task (void)
{
for (;;)
{
func(0);
func(var0);
var1++;
};
}
//------------------------------------
void main (void)
{
while (1) Task();
}
//------------------------------------
И вот листинг функции Task:
12: ; void Task (void)
13: ; {
14: ; for (;;)
15: ; {
16: ; func(0);
07F9 3000 MOVLW 0 ;
07FA 27F3 CALL func ;
17: ; func(var0);
07FB 0820 MOVF var0, W ;
07FC 27F3 CALL func ;
18: ; var1++;
07FD 1683 BSF STATUS, 0x5 ;
07FE 0AA0 INCF var0, F ;
19: ; };
07FF 2FF9 GOTO 0x7f9 ;
20: ; }
В начале функции (и цикла тоже) отсутствует предустановка STATUS'а, и после одного прохода тела цикла попадаем в его начало с установленным RP0. На 9.80 по-простому такую ошибку не сгенерить, он не понимает bank'ов
-
- я уже окончательно кроме старых проектов перешел на pro - AVF(24.03.2011 06:07)