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

 
 
> scmRTOS и MSP430F5xxx, не работает ОСь
Slash
сообщение Mar 13 2012, 11:42
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 202
Регистрация: 10-04-05
Из: Санкт-Петербург
Пользователь №: 4 011



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

Не получается запустить scmRTOS на процессоре msp430f5529.
Застревает в DUMMY_INSTR().

Я так понимаю, нужно переписать ассемблерный код переключения контекста, т.к. архитектуры F1xxx и F5xxx процессоров отличаются?

Нет ли у кого порта под F5xxx?
Сам я вряд ли смогу его сделать.


OS_Kernel.cpp
Код
void TKernel::sched()
{
    uint_fast8_t NextPrty = highest_priority(ReadyProcessMap);
    if(NextPrty != CurProcPriority)
    {
        SchedProcPriority = NextPrty;
    
        raise_context_switch();
        do
        {
            enable_context_switch();
            DUMMY_INSTR();
            disable_context_switch();
        }
        while(CurProcPriority != SchedProcPriority); // until context switch done
    }
}


Сообщение отредактировал Slash - Mar 13 2012, 11:42
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Slash
сообщение Mar 14 2012, 10:38
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 202
Регистрация: 10-04-05
Из: Санкт-Петербург
Пользователь №: 4 011



Спасибо.
Я немного поторопился, нужно было поразбираться глубже.

Для переключения контекста я использовал Компаратор B.
Но, в отличие от Компратора А (на основе которого сделано переключение в примерах scmRTOS), запрос прерывания не сбрасывается автоматически при входе в обработчик прерывания.
Для сброса запроса прерывания нужно прочитать регистр CBIV, что заодно и сбросит флаг CBIFG в регистре CBINT.

Я добавил строчку
Код
mov.w &CBIV,&CBIV
в файл OS_Target_asm.s43 и программа заработала:
Код
#if scmRTOS_CONTEXT_SWITCH_SCHEME == 1

  //  extern  OS_ContextSwitchStackData
    extern  os_context_switch_hook

    public context_switcher_isr

    common INTVEC(1)
    org   CONTEXT_SWITCH_ISR_VECTOR
    dc16  context_switcher_isr

    rseg ISR_CODE(1)

context_switcher_isr:
    save_regs
    mov.w   SP,r12
    xcall  #os_context_switch_hook
    mov.w   r12,SP
l_restore_context:
    restore_regs
    mov.w &CBIV,&CBIV // добавил
    reti

#endif // scmRTOS_CONTEXT_SWITCH_SCHEME


Можно ли добавить какую-то обертку (например в файл scmRTOS_TARGET_CFG.h) для добавления кода сброса запроса прерывания?


Go to the top of the page
 
+Quote Post
varvar
сообщение May 22 2012, 14:29
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811



Цитата(Slash @ Mar 14 2012, 13:38) *
и программа заработала:


А не могли бы все изменения кратенько описать? Там их, вроде, немного.
Вроде как все относящееся к компараторному регистру поменял, но пока ничего не получилось, компилятор то ли сам по себе глючит, то ли я его недопонимаю.

Как у Вас компилятор отнесся к

DEFCW( ADC10CTL0 , ADC10CTL0_)?

У меня компилятор на эту строку изругался (файл msp430f5510.h) при компиляции OS_Target_asm.s43.

Что ассемблеру тут не нравится (определение из msp430f5510.h)?
Код
#define DEFCW(name, address) __no_init union \
{ \
  struct \
  { \
    volatile unsigned char  name##_L; \
    volatile unsigned char  name##_H; \
  }; \
  volatile unsigned short   name; \
} @ address;




Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 22 2012, 16:11
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (varvar @ May 22 2012, 17:29) *
У меня компилятор на эту строку изругался
bb-offtopic.gif Предлагаете нам догадаться, как именно он изругался - предлагаем вам догадаться, что именно ему не понравилось.
QUOTE (varvar @ May 22 2012, 17:29) *
Что ассемблеру тут не нравится
Наверное ключевые слова совершенно другого языка программирования (Си) union, struct, volatile, unsigned, char, short, @?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
varvar
сообщение May 22 2012, 19:23
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811



Я потому и хотел бы услышать ответ от товарища, которому удалось запустить scmRTOS на этом процессоре - я ничего от себя не добавлял, кроме модификаций связанных с компаратором, задача пустая абсолютно - ждать - переключить лапу. Зачем IARу понадобилось цеплять к этому ассемблерному файлу именно этот h файл - для меня загадка.
Для F2xx в h файлах таких извратов нет, посему все проходит.
Спасибо за наводку, буду рыть дальше. А наличие готового примера работающего с F5xx все-таки значительно облегчило бы участь.
Go to the top of the page
 
+Quote Post



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

 


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


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