FreeRTOS http only working once (IllegalInstruction)
Posted: Mon Jan 22, 2024 10:30 pm
Hello
this is my arduino code for an esp32 which just setups wifi and then runs the setGoogleCalendar() function forever:
when i run the setGoogleCalendar function once everything works as it should. However the second time it only runs until the first Serial.println and spits out this error:
Now i have noticed that core 0 panics which runs the wifi functions? and occurs in the http library. However this error only happens when i set the function as a seperate task and does not happen when i let it run normaly.
How is this behaviour possible?
Thank you for your help in advance
this is my arduino code for an esp32 which just setups wifi and then runs the setGoogleCalendar() function forever:
- #include <WiFi.h>
- #include <HTTPClient.h>
- #include "time.h"
- // Replace with your network credentials
- const char* ssid = "FRITZ!Box 6490 Cable";
- const char* password = "xxxx";
- // NTP server to request epoch time
- const char* ntpServer = "fritz.box";
- const String gooleAppsScriptUrl = "https://script.google.com/macros/s/xxxxxxxxxxxx/exec";
- RTC_DATA_ATTR int bootCount = 0;
- //Multithreading
- TaskHandle_t googleCalendar;
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(115200);
- WiFi.begin(ssid, password);
- Serial.print("Connecting to WiFi ..");
- while (WiFi.status() != WL_CONNECTED) {
- if(millis() < 12000){
- Serial.print('.');
- delay(1000);
- }
- else {
- ESP.restart();
- }
- }
- Serial.println(WiFi.localIP());
- }
- void loop() {
- // put your main code here, to run repeatedly:
- if (googleCalendar == NULL){
- xTaskCreate(
- setGoogleCalendar
- , "Google calendar request"
- , 20000 // Stack size
- , NULL // When no parameter is used, simply pass NULL
- , 1 // Priority
- , &googleCalendar // With task handle we will be able to manipulate with this task.
- );
- }
- }
- void setGoogleCalendar(void *pvParameters) {
- (void) pvParameters;
- HTTPClient http;
- http.begin(gooleAppsScriptUrl.c_str());
- http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
- String payload = "";
- int httpStatus = http.GET();
- Serial.println("this is the last thing that gets printed in the second run");
- if (httpStatus == 200){
- Serial.println("this will not get printed in the second run");
- delay(500);
- payload = http.getString();
- }
- else {
- Serial.println("failed google calendar http request: " + httpStatus);
- return;
- }
- Serial.println(payload);
- http.end();
- googleCalendar = NULL;
- vTaskDelete(NULL);
- }
when i put it in the stack trace decoder i get this result:Guru Meditation Error: Core 0 panic'ed (IllegalInstruction). Exception was unhandled.
Memory dump at 0x400d29ec: 00250602 afa2f01d f0a0223c
Core 0 register dump:
PC : 0x400d29f0 PS : 0x00060130 A0 : 0x00000000 A1 : 0x3fffc790
A2 : 0xa38d7f39 A3 : 0x3fffc880 A4 : 0x00000000 A5 : 0x00000000
A6 : 0x00000000 A7 : 0x00000000 A8 : 0xa38d7f39 A9 : 0x3fffc770
A10 : 0x3fffc7bc A11 : 0x400d4d78 A12 : 0xa38d7f39 A13 : 0x00000000
A14 : 0x3fffc828 A15 : 0x3fffc838 SAR : 0x00000017 EXCCAUSE: 0x00000000
EXCVADDR: 0x00000000 LBEG : 0x400899bc LEND : 0x400899c7 LCOUNT : 0x00000000
Backtrace: 0x400d29ed:0x3fffc790
ELF file SHA256: a313233634d34ef3
Due to the error occuring in the last line with only a bracket i expected it to have something to do with rtos tasks not being closed but according to espressif documentation this error should not occur.0x400d29ec: setGoogleCalendar(void*) at C:\Users\johan\OneDrive\Dokumente\Arduino\Freertostestwithtask_copy_20240122224400\Freertostestwithtask_copy_20240122224400.ino:76
0x400d29f0: setGoogleCalendar(void*) at C:\Users\johan\OneDrive\Dokumente\Arduino\Freertostestwithtask_copy_20240122224400\Freertostestwithtask_copy_20240122224400.ino:76
0x400d4d78: TLSTraits::~TLSTraits() at C:\Users\johan\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\HTTPClient\src\HTTPClient.cpp:64
0x400d29ed: setGoogleCalendar(void*) at C:\Users\johan\OneDrive\Dokumente\Arduino\Freertostestwithtask_copy_20240122224400\Freertostestwithtask_copy_20240122224400.ino:76
Now i have noticed that core 0 panics which runs the wifi functions? and occurs in the http library. However this error only happens when i set the function as a seperate task and does not happen when i let it run normaly.
How is this behaviour possible?
Thank you for your help in advance