[an error occurred while processing this directive]
Неудачный переход с RXT51_TINY_1 -> RXT51_TINY_2
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Эсперыч 04 ноября 2002 г. 09:31

Попробовал скомпилить один своих проектов с RXT51_TINY_2, так начались какие-то глюки - некоторые задачи просто "повисли".
Стал разбираться, и наткнулся на то, что "повисают" некторые из задачт, в которых используется строчка:
os_wait2 (K_IVL, XX);

Причем только те из них, где XX меньше какой-то критической величины.
Замена этих строк на os_wait2 (K_TMO, XX) или возврат под RXT51_TINY_1 снимает проблему.

Пример "зависающего" кода, усеченного до примитива:
------------------------------------------------------------------
void lcd_show (void) _task_ LCD_SHOW { // program execution starts here
bool B = 0;

while (1) { // endless loop

os_wait2 (K_TMO, 10); // При K_TMO работает с любыми значениями

// os_wait2 (K_IVL, 69); // Со значения 69 и ниже НЕ работает - "зависает" на этой строчке...

// os_wait2 (K_IVL, 70); // Со значения 70 и выше РАБОТАЕТ

P1_2 = B; // Моргать светодиодом
B = ~B;
}
}
---------------------------------------------------------------------

В общем пришлоcь откатиться обратно под RXT51_TINY_1 :(

PS. Делитель INT_CLOCK EQU 4500 ; 2.5ms for 21,6MHz (400 Hz)
PPS. Конретное значение XX в некоторых пределах менятся и зависит от числа стартованных задач...

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

Ответы



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

E-mail: info@telesys.ru