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

 
 
> При восстановлении контекста SP регистр не восстанавливается
Goofy
сообщение Apr 1 2009, 15:07
Сообщение #1


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

Группа: Свой
Сообщений: 169
Регистрация: 17-09-07
Из: Красноярск
Пользователь №: 30 600



Прилагающаяся к FreeRTOS процедура восстановление контекста
Код
; Set the LR to the task stack.                                     
    LDR        R1, =pxCurrentTCB
    LDR        R0, [R1]
    LDR        LR, [R0]

; The critical nesting depth is the first item on the stack.     
; Load it into the ulCriticalNesting variable.                     
    LDR        R0, =ulCriticalNesting
    LDMFD    LR!, {R1}
    STR        R1, [R0]

; Get the SPSR from the stack.                                     
    LDMFD    LR!, {R0}
    MSR        SPSR_cxsf, R0

; Restore all system mode registers for the task.                 
    LDMFD    LR, {R0-R14}^
    NOP


; Restore the return address.                                     
    LDR        LR, [LR, #+60]

; And return - correcting the offset in the LR to obtain the     
; correct address.                                                 
    SUBS    PC, LR, #4


При отладке JTAGом после выполнения команды LDMFD LR, {R0-R14}^ регистр SP не восстанавливается. Управление передаётся нормально, но фактически задачи пользуют один стек cranky.gif
аналогично при сохранении контекста, не хочет писать сбойное значение SP по адресу currentTCB

процессор изначальной в супервизор, ARM режиме

что упустил в настройках?
Процедура вышла из под автора ОС. Либо стоит не верить глазам и JTAGу... Но факт что более менее ёмкая задача систему валит в data_abort
Go to the top of the page
 
+Quote Post



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

 


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


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