[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Банальная подмена в вышеозначенном примере вызова подпрограммы обычным GOTO ничего общего с расширением аппаратного стека программным путем не имеет. Создается иллюзия углубления стека, однако как только дело касается прерываний и возврата из них эта фишка перестает работать. Поэтому многозадачность и ре-ентерабельность на PIC-ах младше 18-х не проходит. А это обидно. Кстати, (это уже для аппологетов HITECH-C, каковым вы, похоже, являетесь), ниже маленькая подлянка с умножением. Microchip в своих C-17 и C-18 поступает честно и дает исходники ,более чем 8х8 умножения, которые можно продублировать и использовать в прерываниях. А вот как обойти эту гадость в HT-C без востоянного запрещения прерываний перед умножением?
#include static unsigned long x, y, z; main(void)
E-mail:
info@telesys.ru
#include
static unsigned long X, Y, Z;
void interrupt _TMR0(void) @ 0x10
{
Z = X * Y;
s ++;
TMR0H = 0xFF;
TMR0L = 0xE0;
}
{
X = 5000;
Y = 600;
T0IE = 1;
TMR0H = 0xFF;
TMR0L = 0xE0;
T0CS = 1;
ei();
x = 2550;
y = 2550;
z = x * y;
while(1)
{
}
}
Ответы