QUOTE (yuri_t @ Mar 2 2011, 01:00)

TNKernel v.2.6 имеет порты ARM, Cortex-M3 и новый порт TI MSP430x.
вопрос по функции tn_event_wait при вызове функции, если ожидаемые флаги не установлены, т.е. функция возвращается с параметром TERR_TIMEOUT, не возвращает значение в параметр " * p_flags_pattern".
имхо это не совсем правильно. приведу пример:
мне нужно быстро разбудить задачу по одному из битов битовой маски флага, а по другому не критично, например достаточно его проверять каждые 100 системных тиков. поэтому я вызываю функцию в следующем виде:
CODE
rc = tn_event_wait(&event_all_uart,
EVENT_1,
TN_EVENT_WCOND_OR, &flag, 100);
// ожидалось, что будет работать так
if (flag & EVENT_2) {...}
на самом деле для проверки некритичного флага EVENT_2, мне придется дополнительно вызывать функцию tn_event_wait_polling с маской 0xFFFFFFFF предварительно обнулив флаг, т.е. совершаю несколько дополнительных неоправданных действий, тем более что переменная все равно создана, занимает память
CODE
rc = tn_event_wait(&event_all_uart,
EVENT_1,
TN_EVENT_WCOND_OR, &flag, 100);
flag = 0;
rc = tn_event_wait_polling(&event_all_uart,
0xFFFFFFFF,
TN_EVENT_WCOND_OR, &flag);
if (flag & EVENT_1) {...}
if (flag & EVENT_2) {...}
еще ситуация усугубляется, если флаг был выставлен, затем очищен функцией tn_event_clear, но перед вызовом функции n_event_wait не обнулен, получается что по таймауту в переменной flag либо остается прошлое значение, либо вообще случайное. и флаги которые не вызывают "подъем" задачи мы вообще не видим