diff --git a/libraries/MySensors/core/MyHwESP8266.h b/libraries/MySensors/core/MyHwESP8266.h index b5d9f65..a9693ff 100644 --- a/libraries/MySensors/core/MyHwESP8266.h +++ b/libraries/MySensors/core/MyHwESP8266.h @@ -23,7 +23,6 @@ #ifdef __cplusplus #include -//#include #endif #define MY_SERIALDEVICE Serial @@ -36,7 +35,7 @@ #define hwDigitalWrite(__pin, __value) (digitalWrite(__pin, __value)) #define hwInit() MY_SERIALDEVICE.begin(MY_BAUD_RATE); MY_SERIALDEVICE.setDebugOutput(true) #define hwWatchdogReset() wdt_reset() -#define hwReboot() wdt_enable(WDTO_15MS); while (1) +#define hwReboot() ESP.restart(); #define hwMillis() millis() void hwReadConfigBlock(void* buf, void* adr, size_t length); diff --git a/libraries/MySensors/core/MyMainESP8266.cpp b/libraries/MySensors/core/MyMainESP8266.cpp index 83a8600..7bd262f 100644 --- a/libraries/MySensors/core/MyMainESP8266.cpp +++ b/libraries/MySensors/core/MyMainESP8266.cpp @@ -1,4 +1,7 @@ +//This may be used to change user task stack size: +//#define CONT_STACKSIZE 4096 +#include "Schedule.h" extern "C" { #include "ets_sys.h" #include "os_type.h" @@ -7,17 +10,28 @@ extern "C" { #include "user_interface.h" #include "cont.h" } +#include -#define LOOP_TASK_PRIORITY 0 +#define LOOP_TASK_PRIORITY 1 #define LOOP_QUEUE_SIZE 1 #define OPTIMISTIC_YIELD_TIME_US 16000 struct rst_info resetInfo; -int atexit(void (*func)()) { +extern "C" { + extern const uint32_t __attribute__((section(".ver_number"))) core_version = ARDUINO_ESP8266_GIT_VER; + const char* core_release = +#ifdef ARDUINO_ESP8266_RELEASE + ARDUINO_ESP8266_RELEASE; +#else + NULL; +#endif +} // extern "C" + +int atexit(void(*func)()) { (void)func; - return 0; + return 0; } extern "C" void ets_update_cpu_frequency(int freqmhz); @@ -25,111 +39,108 @@ void initVariant() __attribute__((weak)); void initVariant() { } - - void preloop_update_frequency() __attribute__((weak)); void preloop_update_frequency() { #if defined(F_CPU) && (F_CPU == 160000000L) - REG_SET_BIT(0x3ff00014, BIT(0)); - ets_update_cpu_frequency(160); + REG_SET_BIT(0x3ff00014, BIT(0)); + ets_update_cpu_frequency(160); #endif } -extern void (*__init_array_start)(void); -extern void (*__init_array_end)(void); +extern void(*__init_array_start)(void); +extern void(*__init_array_end)(void); -cont_t g_cont __attribute__ ((aligned (16))); +cont_t g_cont __attribute__((aligned(16))); static os_event_t g_loop_queue[LOOP_QUEUE_SIZE]; static uint32_t g_micros_at_task_start; -/* -extern "C" void abort() { - do { - *((int*)0) = 0; - } while(true); -}*/ - extern "C" void esp_yield() { - if (cont_can_yield(&g_cont)) { - cont_yield(&g_cont); - } + if (cont_can_yield(&g_cont)) { + cont_yield(&g_cont); + } } extern "C" void esp_schedule() { - system_os_post(LOOP_TASK_PRIORITY, 0, 0); + ets_post(LOOP_TASK_PRIORITY, 0, 0); } extern "C" void __yield() { - if (cont_can_yield(&g_cont)) { - esp_schedule(); - esp_yield(); - } - else { - abort(); - } + if (cont_can_yield(&g_cont)) { + esp_schedule(); + esp_yield(); + } + else { + panic(); + } } -extern "C" void yield(void) __attribute__ ((weak, alias("__yield"))); +extern "C" void yield(void) __attribute__((weak, alias("__yield"))); extern "C" void optimistic_yield(uint32_t interval_us) { - if (cont_can_yield(&g_cont) && - (system_get_time() - g_micros_at_task_start) > interval_us) - { - yield(); - } + if (cont_can_yield(&g_cont) && + (system_get_time() - g_micros_at_task_start) > interval_us) + { + yield(); + } } static void loop_wrapper() { - static bool setup_done = false; - if(!setup_done) { - _begin(); // Startup MySensors library - setup_done = true; - } - preloop_update_frequency(); - _process(); // Process incoming data - loop(); - esp_schedule(); + static bool setup_done = false; + preloop_update_frequency(); + if (!setup_done) { + _begin(); // Startup MySensors library + setup_done = true; + } + _process(); // Process incoming data + run_scheduled_functions(); + esp_schedule(); } static void loop_task(os_event_t *events) { (void)events; - g_micros_at_task_start = system_get_time(); - cont_run(&g_cont, &loop_wrapper); - if(cont_check(&g_cont) != 0) { - ets_printf("\r\nsketch stack overflow detected\r\n"); - abort(); - } + g_micros_at_task_start = system_get_time(); + cont_run(&g_cont, &loop_wrapper); + if (cont_check(&g_cont) != 0) { + panic(); + } } static void do_global_ctors(void) { - void (**p)(void); - for(p = &__init_array_start; p != &__init_array_end; ++p) - (*p)(); + void(**p)(void) = &__init_array_end; + while (p != &__init_array_start) + (*--p)(); } +extern "C" void __gdb_init() {} +extern "C" void gdb_init(void) __attribute__((weak, alias("__gdb_init"))); + +extern "C" void __gdb_do_break() {} +extern "C" void gdb_do_break(void) __attribute__((weak, alias("__gdb_do_break"))); + void init_done() { - system_set_os_print(1); - do_global_ctors(); - esp_schedule(); + system_set_os_print(1); + gdb_init(); + do_global_ctors(); + esp_schedule(); } extern "C" void user_init(void) { - struct rst_info *rtc_info_ptr = system_get_rst_info(); - memcpy((void *) &resetInfo, (void *) rtc_info_ptr, sizeof(resetInfo)); + struct rst_info *rtc_info_ptr = system_get_rst_info(); + memcpy((void *)&resetInfo, (void *)rtc_info_ptr, sizeof(resetInfo)); - uart_div_modify(0, UART_CLK_FREQ / (115200)); + uart_div_modify(0, UART_CLK_FREQ / (115200)); - init(); + init(); - initVariant(); + initVariant(); - cont_init(&g_cont); + cont_init(&g_cont); - system_os_task(loop_task, - LOOP_TASK_PRIORITY, g_loop_queue, - LOOP_QUEUE_SIZE); + ets_task(loop_task, + LOOP_TASK_PRIORITY, g_loop_queue, + LOOP_QUEUE_SIZE); - system_init_done_cb(&init_done); -} + system_init_done_cb(&init_done); +} \ No newline at end of file