Arm Assembler Frage

Gast #967520
Lesenswert?

Hallo,

in folgendem Codeschnipsel ist irgendwie der wurm drinne. Folgende 
Subroutine führt immer zu einer einer "Data Abort" Exception:

fk_switch_context:
     stmfd  sp!, {lr}                   /* Save return address */
     mov   lr , r1
     stmfd  sp!, {r0-r12,lr}            /* Save curr task registers */

     mrs    r0,  cpsr
     stmfd  sp!, {r0}                   /* Save current CPSR */

     orr    r0, r0, #NOINT              /* Disable Int */
     msr    CPSR_c, r0

     MOV     r0, sp
     mov    lr, pc
     LDR     pc,=fk_print_stack

     ldr    r1,=fk_curr_run_task
     ldr    r0,=fk_next_task_to_run

     str    sp, [r2]            /* store sp in preempted tasks's TCB */

 /* new task*/

     ldr    sp, [r0]            /* get new task's sp */

und zwar in der letzten angegeben Zeile. Wenn ich allerdings die drei 
Debugzeilen um fk_print_stack entferne, tritt diese exception nicht mehr 
auf.

Kann mir da jemand weiterhelfen?

Danke, Stefan
Gast #967559
Lesenswert?

Glaube ich nicht, es ist eine reine c-Funktion. Habe eher das Gefühl, 
dass das irgendwas mit Timing zu tun hat. Gibt es Instruktionen die aus 
dem Speicher lesen und denen ein nop oder sowas folgen muss?
Gast #969664
Lesenswert?

Hallo,

ich denke die Execption kommt von
str    sp, [r2]            /* store sp in preempted tasks's TCB */

wenn fk_print_stack eine C-Funktion ist, ist nach dem return von 
fk_print_stack r2 undefiniert.

Oder welche ABI wird genutzt ?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren