The Super Loop (Infinite Loop)
Jump to navigation
Jump to search
Discussion about syntax
Using a while loop
while (1) {
++loop_cnt;
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
Disassembles to:
117 ++loop_cnt;
08000664: ldr r2, [pc, #12] @ (0x8000674 <main+40>)
08000666: ldr r3, [r2, #0]
08000668: adds r3, #1
0800066a: str r3, [r2, #0]
115 while (1) {
0800066c: b.n 0x8000664 <main+24>
Using a for loop
for (;;) {
++loop_cnt;
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
Disassembles to:
117 ++loop_cnt;
08000664: ldr r2, [pc, #12] @ (0x8000674 <main+40>)
08000666: ldr r3, [r2, #0]
08000668: adds r3, #1
0800066a: str r3, [r2, #0]
115 for (;;) {
0800066c: b.n 0x8000664 <main+24>
Having fun
Alternatives can be imagined - presumably making it more readable. First option would be a strategically placed comment:
for (;/* ever */;) {
++loop_cnt;
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
A macro could also be used.
#define forever for (;;)
forever {
++loop_cnt;
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}