Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: scmRTOS и MSP430F5xxx
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > scmRTOS
Slash
Здравствуйте!

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

Для переключения контекста я использовал Компаратор 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) для добавления кода сброса запроса прерывания?


dxp
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
Сергей Борщ
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;
    }
}
Slash
Спасибо!
varvar
Цитата(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;




Сергей Борщ
QUOTE (varvar @ May 22 2012, 17:29) *
У меня компилятор на эту строку изругался
bb-offtopic.gif Предлагаете нам догадаться, как именно он изругался - предлагаем вам догадаться, что именно ему не понравилось.
QUOTE (varvar @ May 22 2012, 17:29) *
Что ассемблеру тут не нравится
Наверное ключевые слова совершенно другого языка программирования (Си) union, struct, volatile, unsigned, char, short, @?
varvar
Я потому и хотел бы услышать ответ от товарища, которому удалось запустить scmRTOS на этом процессоре - я ничего от себя не добавлял, кроме модификаций связанных с компаратором, задача пустая абсолютно - ждать - переключить лапу. Зачем IARу понадобилось цеплять к этому ассемблерному файлу именно этот h файл - для меня загадка.
Для F2xx в h файлах таких извратов нет, посему все проходит.
Спасибо за наводку, буду рыть дальше. А наличие готового примера работающего с F5xx все-таки значительно облегчило бы участь.
Slash
Цитата(varvar @ May 22 2012, 23:23) *
А наличие готового примера работающего с F5xx все-таки значительно облегчило бы участь.

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

Спасибо, у меня тоже по мотивам Ваших сообщений заработало. Но выглядит аляповато. Может, авторы со временем добавят сами в scmRTOS F5xx - все-таки и сами процессоры дешевле, и отлаживать их можно SBW - программатор тексас шлет за около 5 долларов с доставкой. И просто через USB можно загружать код.
arhiv6
Добрый день. А мог бы кто-нибудь выложить рабочий пример для MSP430F5 под GCC?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.