[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ: Дешевый трюк оптимизатора.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено дядя Вова 22 августа 2001 г. 05:43
В ответ на: Ответ: Он (HI-TECH-C) просто это делает, и всё :-) Ради интереса, попробуй....(см. ниже) отправлено Hog 21 августа 2001 г. 19:45

Банальная подмена в вышеозначенном примере вызова подпрограммы обычным GOTO ничего общего с расширением аппаратного стека программным путем не имеет. Создается иллюзия углубления стека, однако как только дело касается прерываний и возврата из них эта фишка перестает работать. Поэтому многозадачность и ре-ентерабельность на PIC-ах младше 18-х не проходит. А это обидно. Кстати, (это уже для аппологетов HITECH-C, каковым вы, похоже, являетесь), ниже маленькая подлянка с умножением. Microchip в своих C-17 и C-18 поступает честно и дает исходники ,более чем 8х8 умножения, которые можно продублировать и использовать в прерываниях. А вот как обойти эту гадость в HT-C без востоянного запрещения прерываний перед умножением?

#include
#include

static unsigned long x, y, z;
static unsigned long X, Y, Z;


void interrupt _TMR0(void) @ 0x10
{
Z = X * Y;
s ++;
TMR0H = 0xFF;
TMR0L = 0xE0;
}

main(void)
{
X = 5000;
Y = 600;
T0IE = 1;
TMR0H = 0xFF;
TMR0L = 0xE0;
T0CS = 1;
ei();
x = 2550;
y = 2550;
z = x * y;
while(1)
{
}
}

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru