From 9b472a465b98e9ac4eb71b9afed7f0075d4a1ee9 Mon Sep 17 00:00:00 2001 From: funshine Date: Fri, 23 Jan 2015 13:25:54 +0800 Subject: [PATCH] move nodemcu init stage after user_init(), rebuild bin --- app/user/user_main.c | 55 +++++++++++++++------------- pre_build/latest/nodemcu_latest.bin | Bin 382688 -> 382712 bytes 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/app/user/user_main.c b/app/user/user_main.c index 77c7939e..7d470e2c 100644 --- a/app/user/user_main.c +++ b/app/user/user_main.c @@ -50,30 +50,8 @@ extern void spiffs_mount(); // extern uint16_t flash_get_sec_num(); -/****************************************************************************** - * FunctionName : user_init - * Description : entry of user application, init user function here - * Parameters : none - * Returns : none -*******************************************************************************/ -void user_init(void) +void nodemcu_init(void) { - // NODE_DBG("SDK version:%s\n", system_get_sdk_version()); - // system_print_meminfo(); - // os_printf("Heap size::%d.\n",system_get_free_heap_size()); - // os_delay_us(50*1000); // delay 50ms before init uart - -#ifdef DEVELOP_VERSION - uart_init(BIT_RATE_74880, BIT_RATE_74880); -#else - uart_init(BIT_RATE_9600, BIT_RATE_9600); -#endif - // uart_init(BIT_RATE_115200, BIT_RATE_115200); - - #ifndef NODE_DEBUG - system_set_os_print(0); - #endif - NODE_ERR("\n"); // Initialize platform first for lua modules. if( platform_init() != PLATFORM_OK ) @@ -85,9 +63,9 @@ void user_init(void) if( !flash_init_data_written() ){ NODE_ERR("Restore init data.\n"); - // Flash init data at FLASHSIZE - 0x04000 Byte. + // Flash init data at FLASHSIZE - 0x04000 Byte. flash_init_data_default(); - // Flash blank data at FLASHSIZE - 0x02000 Byte. + // Flash blank data at FLASHSIZE - 0x02000 Byte. flash_init_data_blank(); } @@ -119,3 +97,30 @@ void user_init(void) task_init(); system_os_post(USER_TASK_PRIO_0,SIG_LUA,'s'); } + +/****************************************************************************** + * FunctionName : user_init + * Description : entry of user application, init user function here + * Parameters : none + * Returns : none +*******************************************************************************/ +void user_init(void) +{ + // NODE_DBG("SDK version:%s\n", system_get_sdk_version()); + // system_print_meminfo(); + // os_printf("Heap size::%d.\n",system_get_free_heap_size()); + // os_delay_us(50*1000); // delay 50ms before init uart + +#ifdef DEVELOP_VERSION + uart_init(BIT_RATE_74880, BIT_RATE_74880); +#else + uart_init(BIT_RATE_9600, BIT_RATE_9600); +#endif + // uart_init(BIT_RATE_115200, BIT_RATE_115200); + + #ifndef NODE_DEBUG + system_set_os_print(0); + #endif + + system_init_done_cb(nodemcu_init); +} diff --git a/pre_build/latest/nodemcu_latest.bin b/pre_build/latest/nodemcu_latest.bin index 2317b6030144cc2067d789ea0cb49dbac39a03ef..059667121d45d291d5e9e77a64bc8c9cf5114439 100644 GIT binary patch delta 9446 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