The Super Loop (Infinite Loop)

From Stm32World Wiki
(Redirected from 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 */
    }