| @@ -35,6 +35,10 @@ uint32_t set_arm_clock(uint32_t frequency); // clockspeed.c | |||
| extern void __libc_init_array(void); // C++ standard library | |||
| void startup_default_early_hook(void) {} | |||
| void startup_early_hook(void) __attribute__ ((weak, alias("startup_default_early_hook"))); | |||
| void startup_default_late_hook(void) {} | |||
| void startup_late_hook(void) __attribute__ ((weak, alias("startup_default_late_hook"))); | |||
| __attribute__((section(".startup"), optimize("no-tree-loop-distribute-patterns"), naked)) | |||
| void ResetHandler(void) | |||
| { | |||
| @@ -115,12 +119,14 @@ void ResetHandler(void) | |||
| } | |||
| SNVS_HPCR |= SNVS_HPCR_RTC_EN | SNVS_HPCR_HP_TS; | |||
| startup_early_hook(); | |||
| while (millis() < 20) ; // wait at least 20ms before starting USB | |||
| usb_init(); | |||
| analog_init(); | |||
| pwm_init(); | |||
| tempmon_init(); | |||
| startup_late_hook(); | |||
| while (millis() < 300) ; // wait at least 300ms before calling user code | |||
| //printf("before C++ constructors\n"); | |||
| __libc_init_array(); | |||