[an error occurred while processing this directive]
|
Попробовал скомпилить один своих проектов с 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