Новые версии мало того что чудят не по детски, еще и последний вызов делают с программным стеком.
Думал что типа корешок для прерываний (которых нету в этом кристалле) случайно поставили. Нет же - убираю последнюю строку с обращением к таблице и вуаля все вызывается с аппаратным стеком!!
Ежу понятно что этот вызов требует стека, но он никак не приводит к переполнению.
Call graph: (fully expanded)
*_main size 0,0 offset 0
* _foo size 0,0 offset 0
* _foo2 size 0,0 offset 0
Просто чума. Впечатление что hitech с 2006 года отдыхает.
Поэтому родились 2 вопроса:
1. Может я что попутал и это лечится ?
1. Есль ли что либо лучше/стабильнее 9.50pl2 ?
Код
#include <pic.h>
const unsigned char tbl[]={0,7,2,5};
unsigned char i=0;
fastcall void foo2(void)
{
i++;
}
fastcall unsigned char foo(void)
{
foo2();
foo2();
}
void main(void)
{
foo();
foo();
GPIO = tbl[i&0x03];
}
const unsigned char tbl[]={0,7,2,5};
unsigned char i=0;
fastcall void foo2(void)
{
i++;
}
fastcall unsigned char foo(void)
{
foo2();
foo2();
}
void main(void)
{
foo();
foo();
GPIO = tbl[i&0x03];
}