ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
11 июля
383267 Топик полностью
tnk_user (25.01.2013 15:59, просмотров: 1) ответил tnk_user на TNKernel: пользовался кто-нибудь флажком с атрибутом TN_EVENT_ATTR_MULTI ?Похоже, функция tn_event_set() не гарантирует пробуждение *всех* задач,ожидающих такой флажок. Функция, которая просматривает очередь ожидающихзадач (scan_event_waitqueue),
Пока решил, что ошибка именно в TNKernel-2.6. Привёл функцию scan_event_waitqueue() к виду, похожему на предыдущую версию (2.5). После этого функции tn_event_set() и tn_event_iset() заработали правильно.static int scan_event_waitqueue (TN_EVENT *evf){ CDLL_QUEUE *que; int rc = 0; /* return code */ for (que = evf->wait_queue.next; que != &(evf->wait_queue); ) { TN_TCB *task = get_task_by_tsk_queue (que); unsigned x; que = que->next; x = evf->pattern & task->ewait_pattern; if ((task->ewait_mode & TN_EVENT_WCOND_OR) ? (x != 0) : (x == task->ewait_pattern)) { queue_remove_entry (&task->task_queue); task->ewait_pattern = evf->pattern; rc |= (task_wait_complete (task) != 0); } } return rc;}Но не могу понять, что могло подтолкнуть на такую ошибку.