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

 
 
> Проблемы с приоритетами процессов
Anatoly74
сообщение Apr 16 2015, 09:59
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 28-10-10
Пользователь №: 60 480



Игрался с китом Discovery STM32F401. Состряпал для порта М4 простейший пример из 3-х процессов. Все они ждут одного события Flag.signal и зажигают один из 3-х светодиодов. Событие Flag.signal формируется каждые 0.5 сек по системному таймеру. Если scmRTOS_PRIORITY_ORDER = 1 все работает нормально и процессы переключаются в порядке их приоритетов: pr0 -> pr1 -> pr2.
Устанавливаю scmRTOS_PRIORITY_ORDER = 0 и вижу, что порядок переключения остался тем же: pr0 -> pr1 -> pr2. Он не изменяется.
Тогда я взял порт для М3 и прогнал тест на нем. Все то же самое.
Объясните дураку, что я делаю не так.
Вот тексты:

Код
//---------------------------------------------------------------------------
//      Process types
//
typedef OS::process<OS::pr0, 400> TProc1;
typedef OS::process<OS::pr1, 400> TProc2;
typedef OS::process<OS::pr2, 400> TProc3;

TProc1 Proc1;
TProc2 Proc2;
TProc3 Proc3;

OS::TEventFlag Flag;
//---------------------------------------------------------------------------

template<> OS_PROCESS void TProc1::exec()
{
    for(;;)
    {    
               Flag.wait();
        clear_all_VD();
        SetPORT(GPIOD, VD_ORANGE);
    }
}
//---------------------------------------------------------------------------
template<> OS_PROCESS void TProc2::exec()
{
    for(;;)
    {    Flag.wait();
        
        clear_all_VD();
        SetPORT(GPIOD, VD_RED);
     }
}
//---------------------------------------------------------------------------
template<> OS_PROCESS void TProc3::exec()
{
    for(;;)
    {    Flag.wait();
        
        clear_all_VD();
        SetPORT(GPIOD, VD_BLUE);
     }
}
//===================================================

void OS::system_timer_user_hook()
{
    static int16U Tics=0, Cnt=0;
    
    if (++Tics < 250)    return;
    
    Tics = 0;                        // 0.5 сек
    if (++Cnt >= 4)        Cnt = 0;

        Flag.signal_isr();
}

Go to the top of the page
 
+Quote Post



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

 


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


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