abivan (25.01.2013 16:24, просмотров: 48) ответил tnk_user на TNKernel: пользовался кто-нибудь флажком с атрибутом TN_EVENT_ATTR_MULTI ?Похоже, функция tn_event_set() не гарантирует пробуждение *всех* задач,ожидающих такой флажок. Функция, которая просматривает очередь ожидающихзадач (scan_event_waitqueue),
я делал аналогичную ф-ю другим методом, может пригодится. у каждой задачи свой флаг.
tn_event_set(EVENT_CALC_P, 0xFFFF);
void TN_TASK TaskDataReady(void *par){
TN_UWORD EventCalcPattern, EventCalcFlag;
BYTE bReady=1;
EventCalcPattern=GetValidPattern_EventCalc();
loop{
tn_event_wait(EVENT_CALC_P, EventCalcPattern,
TN_EVENT_WCOND_AND, &EventCalcFlag, TN_WAIT_INFINITE);
....
}
}
/*******************************************************/
/* Имя GetValidPattern_EventCalc */
/* */
/* Тип */
/* */
/* Назначение Выдать по запросу маску события */
/*=====================================================*/
/* */
/**/ unsigned /**/
/* Код возврата : */
/* флаг - Успешное выполнение */
/* 0 - свободные флаги отсутствуют */
/* */
/**/ GetValidPattern_EventCalc(void) /**/
/* */
/*******************************************************/
{
static unsigned uValidFlag=0x1;
uValidFlag<<=1;
return(uValidFlag);
}