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

 
 
 
Reply to this topicStart new topic
> 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
Сергей Борщ
сообщение Mar 14 2012, 07:29
Сообщение #2


Гуру
******

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



QUOTE (Slash @ Mar 13 2012, 13:42) *
Застревает в DUMMY_INSTR().
Не вызывается прерывание переключения контекста или оно не переключает контекст. Учитывая, что программа продоллжает работать - скорее первое.
QUOTE (Slash @ Mar 13 2012, 13:42) *
Я так понимаю, нужно переписать ассемблерный код переключения контекста, т.к. архитектуры F1xxx и F5xxx процессоров отличаются?
В ассемблерном коде встречаются строчки "#elif __CORE__ == __430X_CORE__", т.е. он должен работать на ядре 430X. Там даже есть набор примеров для ядра 430X.


--------------------
На любой вопрос даю любой ответ
"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
Slash
сообщение Mar 14 2012, 10:38
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 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
dxp
сообщение Mar 14 2012, 11:48
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (Slash @ Mar 14 2012, 17:38) *
Можно ли добавить какую-то обертку (например в файл scmRTOS_TARGET_CFG.h) для добавления кода сброса запроса прерывания?

Да, так и делается. Из contex_switch_hook() вызывается INLINE void context_switch_user_hook() (только надо разрешить её вызов при конфигурации), в ней и сделать все необходимые дополнительные действия. Посмотрите пример для AVR, там как раз блокируется прерывание переключения контекстов внутри кода переключения. Этот пользовательский хук определён как раз в scmRTOS_TARGET_CFG.h. Этот файл и предназначен для тонкой настройки аппаратуры МК, которая используется для поддержки ОС. Для того чтобы не ограничивать пользователя в выборе этой аппаратуры, этот код вынесен на уровень пользовательского проекта. Если выбрали другой источник прерываний для переключения контекстов, то нужно и соответствующий код поддержки обеспечить для него. Вы на правильном пути. sm.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 14 2012, 11:51
Сообщение #5


Гуру
******

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



QUOTE (Slash @ Mar 14 2012, 12:38) *
Можно ли добавить какую-то обертку (например в файл scmRTOS_TARGET_CFG.h) для добавления кода сброса запроса прерывания?
Вы можете вставить эту команду в функцию OS::context_switch_user_hook(), предварительно разрешив ее использование в scmRTOS_CONFIG.h строкой
CODE
#define  scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE  1

Саму функцию можно сделать встраиваемой и поместить в scmRTOS_TARGET_CONFIG.h:
CODE
namespace OS
{
    INLINE void context_switch_user_hook()
    {
         CBIV = CBIV;
    }
}


--------------------
На любой вопрос даю любой ответ
"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
Slash
сообщение Mar 14 2012, 12:23
Сообщение #6


Местный
***

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



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


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

Группа: Участник
Сообщений: 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
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #9


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

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



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


Местный
***

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



Цитата(varvar @ May 22 2012, 23:23) *
А наличие готового примера работающего с F5xx все-таки значительно облегчило бы участь.

Выкладываю проект, который у меня заработал.

Прикрепленные файлы
Прикрепленный файл  rtos_5529.zip ( 174.81 килобайт ) Кол-во скачиваний: 52
 
Go to the top of the page
 
+Quote Post
varvar
сообщение Jun 2 2012, 19:45
Сообщение #11


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

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



Цитата(Slash @ May 29 2012, 16:08) *
Выкладываю проект, который у меня заработал.

Спасибо, у меня тоже по мотивам Ваших сообщений заработало. Но выглядит аляповато. Может, авторы со временем добавят сами в scmRTOS F5xx - все-таки и сами процессоры дешевле, и отлаживать их можно SBW - программатор тексас шлет за около 5 долларов с доставкой. И просто через USB можно загружать код.
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Oct 23 2015, 22:22
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Добрый день. А мог бы кто-нибудь выложить рабочий пример для MSP430F5 под GCC?


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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