Я использую симулятор руки, чтобы написать программу, которая для простоты этого вопроса мигает двумя светодиодами в симуляторе, когда нажата одна из синих клавиш.моя проблема в том, что когда я переходил от своей программы к мигающей функции, он не возвращался туда, откуда я переходил, вместо этого, когда он заканчивал цикл ожидания, он просто делал все, что написано под циклом ожидания
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}