2015-03-29 2 views
0

Я пытаюсь скопировать код из памяти кода в стек, а затем использовать этот код в стеке для выполнения. Я использую следующую функциюВыполнение кода в Stack in Cortex-M4

;Personal Function 
IMPORT extfunc 
EXPORT func 
func 
LDR R0,=extfunc;Function in C 
LDR R1,=0x00000000;Counter for Counting instructions when i make code generic 
PUSH {LR};For nested call  
ADD R3,SP,#0x00;move 
SUB SP,#0x10;As stack grows upwards, we just make space for 10 instructions for testing 
ADD R5,SP,#0x0;Where we branch after copying 
LOOP 
LDR SP,[R0];Load in stack instruction 
ADD R1,R1,#0x01;instruction count 
ADD R0,#0x04;next C instruction address 
ADD SP,#0x04;next instruction address 
CMP R1,#0x10;Copy 10 instructions 
BLT LOOP 
ADD R0,PC,#0x0C;Get ready for branching 
ADD LR,R0,#0x00;LR prepared 
ADD PC,R5,#0x00;GO 
ADD SP,R3,#0x00;When we return restore the SP 
POP {LR} 
BX LR 

, но я получаю следующие ошибки

startup_XMC4500.s(335): error: A1477E: This register combination results in UNPREDICTABLE behaviour

startup_XMC4500.s(336): error: A1477E: This register combination results in UNPREDICTABLE behaviour

Видимо, вы не можете переместить компьютер на любой произвольный адрес, рассчитанного во время выполнения, может кто-нибудь сказать мне обходной путь к этому проблема?

ответ

0

Оказывается, вы не можете манипулировать специальными регистрами, добавляя регистры с некоторым значением и сохраняя их обратно, вам придется использовать явные инструкции по загрузке или хранению.