Здравствуйте, имею 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? эффект тот же.
Может кто сталкивался?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Здравствуйте, друзья! У меня такой вопрос: есть класс в нем я определил вектор с типом stringИ я вызываю этот класс с этим массивом и хочу туда...
Помогите пожалуйста создать алгоритм реализации хеш-функции и реализовать его на С++
Собственно то, что я сейчас понимаю: Необходимо написать драйвер для HDD (Для устройства, а не файловой системе), тк