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

 
 
> 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



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

 


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


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