diff --git a/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/main.cpp b/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/main.cpp index eb85733149..c0e85d143b 100644 --- a/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/main.cpp +++ b/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/main.cpp @@ -9,11 +9,13 @@ struct A A() { board::setStatusLed(true); + board::setErrorLed(false); } ~A() { board::setStatusLed(false); + board::setErrorLed(true); } }; diff --git a/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/sys/board.cpp b/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/sys/board.cpp index 489b33f59e..1ad2670743 100644 --- a/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/sys/board.cpp +++ b/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/sys/board.cpp @@ -127,6 +127,7 @@ void setErrorLed(bool state) } // namespace board /* + * Basic hardware initialization * C++ runtime initialization */ extern "C" @@ -147,13 +148,22 @@ static void call_init_array(unsigned long* start, unsigned long* end) } } -void __pre_main() +// We need to disable pedantic mode to call main() +#pragma GCC diagnostic ignored "-Wpedantic" + +extern int main(); + +void __start() { + board::init(); + call_init_array(&__preinit_array_start, &__preinit_array_end); call_init_array(&__init_array_start, &__init_array_end); call_init_array(&_ctor_start, &_ctor_end); - board::init(); + (void)main(); + + while (true) { } } } diff --git a/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/sys/startup_armcm0.S b/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/sys/startup_armcm0.S index c7169a69f9..670c8e62ee 100644 --- a/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/sys/startup_armcm0.S +++ b/libuavcan_drivers/lpc11c24/test_olimex_lpc_p11c24/src/sys/startup_armcm0.S @@ -239,10 +239,7 @@ Reset_Handler: blt .flash_to_ram_loop .flash_to_ram_loop_end: - ldr r0, =__pre_main - blx r0 - - ldr r0, =main + ldr r0, =__start bx r0 .pool .size Reset_Handler, . - Reset_Handler