Как мне вернуться к позиции, с которой я разветвился в сборке? - PullRequest
0 голосов
/ 01 июня 2018

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

mainпетля

swi SWI_CheckBlue


cmp r0, #0
blne BlinkBoth



BlinkBoth:
    mov r0,#(LEFT_LED|RIGHT_LED)
    swi SWI_SETLED

    ldr r3,=500
    BL Wait

    mov r0,#0
    swi SWI_SETLED


Wait:
    stmfd sp!,{r0-r5,lr}
    ldr r4,=0x00007FFF @mask for 15-bit timer
    SWI SWI_GetTicks @Get start time
    and r1,r0,r4 @adjusted time to 15-bit

Wloop:
    SWI SWI_GetTicks @Get current time
    and r2,r0,r4 @adjusted time to 15-bit
    cmp r2,r1
    blt Roll @rolled above 15 bits
    sub r5,r2,r1 @compute easy elapsed time
    bal CmpLoop
Roll:
    sub r5,r4,r1 @compute rolled elapsed time
    add r5,r5,r2
    CmpLoop:cmp r5,r3 @is elapsed time < delay?
    blt Wloop @Continue with delay
Xwait:
    ldmfd sp!,{r0-r5,pc}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...