Gast
#5496237
Hi, ich verwende ein STM32F4 Board mit FreeRTOS und ich versuche gerade, mein Assembler etwas zu verbessern. unsigned int my_pc = 0x08000890; _asm __volatile_ ( "movw R1, #0x0fd0\n" "movt R1, #0x1000\n" "ldr r15,[r1]\n" ); Ich speichere in my_pc einen gewünschen, neuen Program-Counter. Der Wert 0x08... ist der PC an der Stelle unsigned int my_pc. Dannach lade ich mir diesen Wert in Register R1 - dabei ist 0x10000fd0 die Adresse im Speicher, wo my_pc liegt. Nun möchte ich meinen tatsächlichen PC abändern, sodass ich erneut bei unsigned int my_pc lande. Mit gdb habe ich rausgefunden, dass ich R1 nun tatsächlich 0x10000fd0 steht. Allerdings komme ich hier in den Trap handler: prvGetRegistersFromStack (pulFaultStackAddress=0x10000f90 Wieso stimmt die Adresse nicht überein? Verwende ich nun diesen Code, funktioniert mein Vorhaben wie gewünscht: unsigned int my_pc = 0x08000890; _asm __volatile_ ( "movw R1, #0x0fd0\n" "movt R1, #0x1000\n" "ldr r4,[r1]\n" "mov pc,r4\n" ); Wo liegt hier das Problem?