реклама на сайте
подробности

 
 
> RTEMS : не работает rtems_event_send->rtems_event_receive, вообще не понимаю, как сделать синхронизацию задач
yes
сообщение Nov 24 2010, 12:45
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



то есть такое впечатление, что при входе в rtems_event_receive задача не блокируется и не переключается на другую

из прерывания
Код
rtems_isr
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);
}


но 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


не получает управление,
при этом третья задача, которая крутится по таймеру 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 ]
  );
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 23:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.02887 секунд с 7
ELECTRONIX ©2004-2016