arm-gcc-none-eabi-gcc Создает рекурсии

253
11 октября 2017, 08:32

Здравствуйте, имею 2 функции

BOOL_8 blink = TRUE;
extern "C" void blink_led() {
    if (blink == FALSE) {
        GPIO->p3_outp_clr = P3_STATE_GPO(19);
    }
    else {
        GPIO->p3_outp_set = P3_STATE_GPO(19);
    }
    blink = (~blink) & 0x1;
}
extern "C" void tick1_handler( void )
{
    blink_led();
    TIMER_CNTR0->ir = 1;
}

Долго не мог понять, почему зависает, пока не заглянул в дизасемблер:

00000000 <blink_led>:
   0:   e59f2024        ldr     r2, [pc, #36]   ; 2c <blink_led+0x2c>
   4:   e59f1024        ldr     r1, [pc, #36]   ; 30 <blink_led+0x30>
   8:   e5d23000        ldrb    r3, [r2]
   c:   e3a00702        mov     r0, #524288     ; 0x80000
  10:   e3530000        cmp     r3, #0
  14:   e2033001        and     r3, r3, #1
  18:   e2233001        eor     r3, r3, #1
  1c:   05810008        streq   r0, [r1, #8]
  20:   15810004        strne   r0, [r1, #4]
  24:   e5c23000        strb    r3, [r2]
  28:   e12fff1e        bx      lr
  2c:   00000000        .word   0x00000000
  30:   40028000        .word   0x40028000
...
00000000 <tick1_handler>:
   0:   e92d4008        push    {r3, lr}
   4:   ebfffffe        bl      0 <tick1_handler>
   8:   e59f3008        ldr     r3, [pc, #8]    ; 18 <tick1_handler+0x18>
   c:   e3a02001        mov     r2, #1
  10:   e5832000        str     r2, [r3]
  14:   e8bd8008        pop     {r3, pc}
  18:   40044000        .word   0x40044000

tick1_handler - бесконечная рекурсия. Может ли это быть последствиям оптимизации? Или это баг компилятора?

У меня установлен arm-none-eabi-gcc (15:4.9.3+svn231177-1) 4.9.3 20150529 (prerelease) Пробовал на arm-none-eabi-gcc (4.8.2-14ubuntu1+6) 4.8.2? эффект тот же.

Может кто сталкивался?

READ ALSO
Как добавить элемент в массив?

Как добавить элемент в массив?

Здравствуйте, друзья! У меня такой вопрос: есть класс в нем я определил вектор с типом stringИ я вызываю этот класс с этим массивом и хочу туда...

456
Реализация алгоритма Хеш-функция [требует правки]

Реализация алгоритма Хеш-функция [требует правки]

Помогите пожалуйста создать алгоритм реализации хеш-функции и реализовать его на С++

144
Драйвер для HDD [требует правки]

Драйвер для HDD [требует правки]

Собственно то, что я сейчас понимаю: Необходимо написать драйвер для HDD (Для устройства, а не файловой системе), тк

212