вдогонку. кстати, о птичках. разобрался с векторами, порт переделал, все собралось, запускаю я свой урезанный проект под FreeRTOS, он успешно зависает в момент старта операционки. начинаю разбираться, обнаруживаю любопытный факт
Код
portRESTORE_CONTEXT MACRO
[..]
; 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
ENDM
данный код используется для переключения задач, в том числе при старте. для первого запуска, разумеется, значения регистров в стеке забиваются фейковыми значениями. при выполнении LDMFD LR, {R0-R14}^ регистр LR (он же R14) восстанавливается из стека, значение его теряется, после чего
Код
LDR LR, [LR, #+60]
SUBS PC, LR, #4
отправляет PC в аут. любопытно, что в STR710 этот код прекрасно себе работает. никто с этим не сталкивался? или я опять туплю? и как лучше избавляться от этого, не восстанавливать R14 из стека? а как тогда быть с переключением контекста?...