@@ -901,16 +901,16 @@ Now let's compile this code with, and without `volatile` specifier for `s_ticks`
901901and compare generated assembly code:
902902
903903```
904- // NO VOLATILE: | // WITH VOLATILE:
905- // uint32_t s_ticks; | // volatile uint32_t s_ticks;
906-
907- ldr r3, [pc, #8] <-- cache s_ticks | ldr r2, [pc, #12]
908- ldr r3, [r3, #0] <-- in r3 | ldr r3, [r2, #0]
909- adds r0, r3, r0 <-- calc until | adds r3, r3, r0 <-- r3 = until
910- | ldr r1, [r2, #0] <-- reload s_ticks
911- cmp r3, r0 <-- compare | cmp r1, r3 <-- compare
912- bcc.n 200000d2 <delay+0x6> | bcc.n 200000d2 <delay+0x6>
913- bx lr | bx lr
904+ // NO VOLATILE: | // WITH VOLATILE:
905+ // uint32_t s_ticks; | // volatile uint32_t s_ticks;
906+
907+ ldr r3, [pc, #8] <-- cache s_ticks | ldr r2, [pc, #12]
908+ ldr r3, [r3, #0] <-- in r3 | ldr r3, [r2, #0] <-- r3 = s_ticks
909+ adds r0, r3, r0 <-- r0 = r3 + ms | adds r3, r3, r0 <-- r3 = r3 + ms
910+ | ldr r1, [r2, #0] <-- reload! r1 = s_ticks
911+ cmp r3, r0 <-- compare | cmp r1, r3 <-- compare
912+ bcc.n 200000d2 <delay+0x6> | bcc.n 200000d2 <delay+0x6>
913+ bx lr | bx lr
914914```
915915
916916Long story short: if there is no `volalile`, the `delay()` function will loop
0 commit comments