из прерывания
Код
rtems_isr
Irq
(
rtems_vector_number vector
)
{
rtems_status_code status;
status = rtems_event_send(Task_id[1], RTEMS_EVENT_0);
}
Irq
(
rtems_vector_number vector
)
{
rtems_status_code status;
status = rtems_event_send(Task_id[1], RTEMS_EVENT_0);
}
задача Task_id[1] получает управление и срабатывает
Код
for(;;)
{
status=rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &irq_evt);
if (status!=RTEMS_SUCCESSFUL)
printf("Error in wait irq\n");
rtems_event_send(Task_id[ 2 ], RTEMS_EVENT_1);
}
{
status=rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &irq_evt);
if (status!=RTEMS_SUCCESSFUL)
printf("Error in wait irq\n");
rtems_event_send(Task_id[ 2 ], RTEMS_EVENT_1);
}
но Task_id[ 2 ], которая ожидает RTEMS_EVENT_1
Код
for(;;)
{
status=rtems_event_receive(RTEMS_EVENT_1, RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &process_evt);
//never reaches this point
{
status=rtems_event_receive(RTEMS_EVENT_1, RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &process_evt);
//never reaches this point
не получает управление,
при этом третья задача, которая крутится по таймеру rtems_task_wake_after
не получает управления пока обе другие ожидают rtems_event_receive
то есть похоже, что управление никогда не отдается из задачи Task_id[1]
я наверно не понял АPI RTEMS-овского - вопрос что я делаю не так? может надо конфигурить или какие-то специальные опции при создании задачи указывать : никогда с этой мутной областью RTEMS-а не сталкивался - подозреваю, что как-то через (*) сделано, но смотреть исходники пока нет сил...
создаю так, приоритеты задачам ставил по разному - не выходит...
Код
status = rtems_task_create(
Task_name[ 1 ], 1, RTEMS_MINIMUM_STACK_SIZE * 8, RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 1 ]
);
status = rtems_task_create(
Task_name[ 2 ], 2, RTEMS_MINIMUM_STACK_SIZE * 8, RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 2 ]
);
status = rtems_task_create(
Task_name[ 3 ], 3, RTEMS_MINIMUM_STACK_SIZE * 8, RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 3 ]
);
Task_name[ 1 ], 1, RTEMS_MINIMUM_STACK_SIZE * 8, RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 1 ]
);
status = rtems_task_create(
Task_name[ 2 ], 2, RTEMS_MINIMUM_STACK_SIZE * 8, RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 2 ]
);
status = rtems_task_create(
Task_name[ 3 ], 3, RTEMS_MINIMUM_STACK_SIZE * 8, RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 3 ]
);