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

 
 
> TEventFlag. порт под msp430, возвращаемое значение IsSignaled()
Sergey Bold
сообщение May 20 2009, 07:55
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 20-05-09
Из: Харьков
Пользователь №: 49 299



Здравствуйте.

Пробую использовать в проекте на msp430 scmRTOS.
Возник вопрос.
Использую событие TEventFlag, проверяю установленно или нет, ну и далее там.

======== Пример ==============
Код
extern OS::TEventFlag g_SF_Initialization;

OS_PROCESS void TTaskZonesDetection::Exec()
{
//    ждем пока наш модуль не будет сконфигурирован
      if( !g_SF_Initialization.IsSignaled() )
    {
        g_SF_Initialization.Wait();
    }

============================

Функция g_SF_Initialization.IsSignaled() всегда возвращает "false", даже если событие установлено.
Немного проясняет листинг, сперва идёт сравнение, потом восстанавливается регистр SR, где флаги после сравнения.
Естественно флаги портятся, и команда JEQ выполняется как душе угодно.

======== Листинг ==============
Код
26          OS_PROCESS void TTaskZonesDetection::Exec()
   \   __code __task void OS::process<OS::pr4, (word)56U>::Exec()
   \                     ??Exec:
     27          {
   \   000000   2183         SUB.W   #0x2, SP
     28          //    ждем пока наш модуль не будет сконфигурирован
     29                if( !g_SF_Initialization.IsSignaled() )
   \   000002   81420000     MOV.W   SR, 0x0(SP)
   \   000006   32C2         DINT
   \   000008   0343         NOP
   \   00000A   D293....     CMP.B   #0x1, &g_SF_Initialization + 2
   \   00000E   2241         MOV.W   0x0(SP), SR
   \   000010   0524         JEQ     ??Exec_3
     30              {
     31                  g_SF_Initialization.Wait();
   \   000012   0E43         MOV.W   #0x0, R14
   \   000014   3C40....     MOV.W   #g_SF_Initialization, R12
   \   000018   B012....     CALL    #??Wait
     32              }

==========================================

IAR пробовал и 3.41 и 4.20.1 - ведут себя одинаково.
Только если выключить всю оптимизацию, в листинге будет правильно работающий код,
но тогда scmRTOS не работает, нужны inline - функции.
Как заставить компилятор генерить работоспособный код?
Или что-то я не понимаю?
Go to the top of the page
 
+Quote Post



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

 


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


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