X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Farm%2Fhw%2Fswitch_ctx_arm.S;h=39e9f46a2dabb58b88475203acf095dacd9a1155;hb=ad78a25e6bfb87a82ea5ff441c054e64f99df17c;hp=bde843cda734cd14ed7066fcb69dfa096dc2c4b2;hpb=71743c2a5a8bf9dbf66a945fd9656baed0d16329;p=bertos.git diff --git a/bertos/cpu/arm/hw/switch_ctx_arm.S b/bertos/cpu/arm/hw/switch_ctx_arm.S index bde843cd..39e9f46a 100644 --- a/bertos/cpu/arm/hw/switch_ctx_arm.S +++ b/bertos/cpu/arm/hw/switch_ctx_arm.S @@ -42,6 +42,13 @@ .globl asm_switch_context asm_switch_context: mrs r2, cpsr /* Save status. */ + + /* + * To work correctly the lr should point to proc_exit, so when process finish + * could be return + */ + push {lr} /* Add one element on stack, for next switching */ + stmfd sp!, {r2, r4-r11, lr} /* Save registers. */ str sp, [r1] /* Save old stack pointer. */ @@ -50,4 +57,5 @@ asm_switch_context: ldmfd sp!, {r2, r4-r11, lr} /* Load new registers. */ msr cpsr, r2 /* restore flags reg. */ - mov pc, lr + pop {r0} /* pop on stack address of the process that we want to jump */ + mov pc, r0