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

 
 
> Не работает шедулер OS на MSP430F5437a
SMRM
сообщение Aug 25 2016, 13:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 26-06-09
Пользователь №: 50 667



В проекте на MSP430F5437a пытаюсь применить uCOS-III.
По старту OS в OSStart(&os_err) - заполняются TCB - вроде все правильно.
Затем начинается вызов самих тасков в порядке приоритета.
Сначала вызывается первый task - все нормально.
Затем первый task в pend, переходим на второй. И здесь проблема в schedulere.
Вместо перехода на следующий похоже возвращаемся на старую точку.
Вот код:
OSCtxSw
POPX.W R12 ; Pop lower 16 bits of PC.

POPX.W R13 ; Pop upper 4 bits of PC.

PUSHX.W R12 ; Save lower 16 bits of PC.

RLAM.A #4, R13 ; Save SR + upper 4 bits of PC.
RLAM.A #4, R13
RLAM.A #4, R13
MOVX.W SR, R12
ADDX.A R13, R12
PUSHX.W R12

PUSHM.A #12, R15 ; Save R4-R15.

MOVX.A &OSTCBCurPtr, R13 ; OSTCBCurPtr->StkPtr = SP
MOVX.A SP, 0(R13)

CALLA #OSTaskSwHook

MOVX.B &OSPrioHighRdy, R13 ; OSPrioCur = OSPrioHighRdy
MOVX.B R13, &OSPrioCur

MOVX.A &OSTCBHighRdyPtr, R13 ; OSTCBCurPtr = OSTCBHighRdyPtr
MOVX.A R13, &OSTCBCurPtr

MOVX.A @R13, SP ; SP = OSTCBHighRdyPtr->StkPtr

POPM.A #12, R15 ; Restore R4-R15.

RETI

После
POPM.A #12, R15
все регистры заполняются верно(смотрел в debug), в том числе и SP.
Если поставить точку останова на RETI и затем сделать один шаг в Debug, то
переходит как и требуется на следующий task, записанный в контексте.
Если же после RETI продолжить в автомате, то переключается не на task,
а похоже в точку вызова OSCtxSw.
Go to the top of the page
 
+Quote Post



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

 


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


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