LPC11C24: Fixed C++ runtime initialization

This commit is contained in:
Pavel Kirienko
2014-04-14 15:28:50 +04:00
parent 03fc05a456
commit f451aba2c6
3 changed files with 15 additions and 6 deletions
@@ -9,11 +9,13 @@ struct A
A()
{
board::setStatusLed(true);
board::setErrorLed(false);
}
~A()
{
board::setStatusLed(false);
board::setErrorLed(true);
}
};
@@ -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) { }
}
}
@@ -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