Спасибо. Скачал, посмотрел. Огромный плюс - читаемый исходник! Это действительно с моей точки зрения важно. Что насторожило: внушительные блоки кода под запретом прерываний. В порте Cortex-M3 нет использования примитивов синхронизации, и как следствие наблюдаем такое:
tn_disable_interrupt();
//-- If event attr is TN_EVENT_ATTR_SINGLE and another task already
//-- in event wait queue - return ERROR without checking release condition
if((evf->attr & TN_EVENT_ATTR_SINGLE) && !is_queue_empty(&(evf->wait_queue)))
{
rc = TERR_ILUSE;
}
else
{
//-- Check release condition
if(wait_mode & TN_EVENT_WCOND_OR) //-- any setted bit is enough for release condition
fCond = ((evf->pattern & wait_pattern) != 0);
else //-- TN_EVENT_WCOND_AND is default mode
fCond = ((evf->pattern & wait_pattern) == wait_pattern);
if(fCond)
{
*p_flags_pattern = evf->pattern;
if(evf->attr & TN_EVENT_ATTR_CLR)
evf->pattern = 0;
rc = TERR_NO_ERR;
}
else
{
tn_curr_run_task->ewait_mode = wait_mode;
tn_curr_run_task->ewait_pattern = wait_pattern;
task_curr_to_wait_action(&(evf->wait_queue),
TSK_WAIT_REASON_EVENT,
timeout);
tn_enable_interrupt();
tn_switch_context();
if(tn_curr_run_task->task_wait_rc == TERR_NO_ERR)
*p_flags_pattern = tn_curr_run_task->ewait_pattern;
return tn_curr_run_task->task_wait_rc;
}
}
tn_enable_interrupt();
Если поддерживаете контакт с автором, то можно по ссылке почитать. здесь