Přetečení zásobníku ???

Odpovědět
MiraVorlik
Příspěvky: 13
Registrován: 10 čer 2022, 10:00
Reputation: 0

Přetečení zásobníku ???

Příspěvek od MiraVorlik » 29 čer 2022, 13:00

Ahoj řeším problém pravděpodobně s přetečením zásobníku u ESP32, který funguje jako client a přijímá data ze severu. Skenování se provádí na jádru 0 a loop by měl běžet na jádru 1. Funguje to krásně ale bohužel náhodně třeba po 7. po 12. mi to vyhodí chybu a následuje restart. Ukázka viz. níže, v první časti vše proběhne jak má a za 4 minuty už hází chybu. Pod ukázkou je dekódován Backtrace, ale bohužel ten mi toho taky moc neřekne :(

Kód: Vybrat vše

12:16:58.781 -> BLE-ON    Scanning.....
12:17:59.866 -> Device found. Connecting!
12:17:59.866 -> Místa v zásobníku ve smyčce:   3208
12:17:59.959 ->  - Connected to server
12:18:00.474 ->  - Found our characteristics
12:18:00.521 -> We are now connected to the BLE Server.
12:18:03.045 -> Vlhkost
12:18:03.045 -> pData:  323254494650         lenght:  6 
12:18:03.045 -> Hodnota float: 61.20      výpočet: 61.20
12:18:03.045 -> Teplota
12:18:03.045 -> pData:  323250524653        lenght:  6 
12:18:03.045 -> Hodnota float: 24.50
12:18:03.608 -> doConnect = false
12:18:03.608 -> BLE-OFF
12:21:03.637 -> BLE-ON    Scanning.....
12:22:05.098 -> Device found. Connecting!
12:22:05.098 -> Místa v zásobníku ve smyčce:   3208
12:22:05.428 -> lld_pdu_get_tx_flush_nb HCI packet count mismatch (0, 1)
12:22:05.568 ->  - Connected to server
12:22:05.615 -> Guru Meditation Error: Core  0 panic'ed (Unhandled debug exception). 
12:22:05.615 -> Debug exception reason: Stack canary watchpoint triggered (BTU_TASK) 
12:22:05.615 -> Core  0 register dump:
12:22:05.615 -> PC      : 0x400956a7  PS      : 0x00060036  A0      : 0x80094434  A1      : 0x3ffd0e20  
12:22:05.615 -> A2      : 0x3ffbef48  A3      : 0xb33fffff  A4      : 0x0000abab  A5      : 0x00060023  
12:22:05.663 -> A6      : 0x00060023  A7      : 0x0000cdcd  A8      : 0xb33fffff  A9      : 0xffffffff  
12:22:05.663 -> A10     : 0x3ffbef34  A11     : 0x00000001  A12     : 0x00060023  A13     : 0x00000002  
12:22:05.663 -> A14     : 0x007bef48  A15     : 0x003fffff  SAR     : 0x0000001f  EXCCAUSE: 0x00000001  
12:22:05.663 -> EXCVADDR: 0x00000000  LBEG    : 0x40090404  LEND    : 0x4009041a  LCOUNT  : 0xffffffff  
12:22:05.663 -> 
12:22:05.663 -> 
12:22:05.663 -> Backtrace:0x400956a4:0x3ffd0e200x40094431:0x3ffd0e60 0x40092b88:0x3ffd0e90 0x40092b38:0xa5a5a5a5  |<-CORRUPTED
12:22:05.663 -> 
12:22:05.663 -> 
12:22:05.663 -> 
12:22:05.663 -> 
12:22:05.663 -> ELF file SHA256: 0000000000000000
12:22:05.663 -> 
12:22:05.663 -> Rebooting...
12:22:05.709 -> ets Jun  8 2016 00:22:57
12:22:05.709 -> 
12:22:05.709 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
12:22:05.709 -> configsip: 0, SPIWP:0xee
12:22:05.709 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
12:22:05.709 -> mode:DIO, clock div:1
12:22:05.709 -> load:0x3fff0030,len:1344
12:22:05.709 -> load:0x40078000,len:13516
12:22:05.709 -> load:0x40080400,len:3604
12:22:05.709 -> entry 0x400805f0
12:22:06.457 -> Starting Arduino BLE Client 
Decoding stack results
0x400956a4: xPortEnterCriticalTimeout at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp_hw_support/include/soc/compare_set.h line 25
0x40094431: vTaskSwitchContext at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/port/xtensa/include/freertos/portmacro.h line 578


Zde je kód pro jádro 0:

Kód: Vybrat vše

void Task1code( void * parameter) {
  while (1) {
    if (doConnect == false){
      Serial.println("BLE-OFF");
      vTaskDelay(180000 / portTICK_PERIOD_MS); //3min
      BLEScan* pBLEScan = BLEDevice::getScan();
      pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
      pBLEScan->setActiveScan(true);
       Serial.println("BLE-ON    Scanning.....");
       pBLEScan->start(0);
       Serial.print("Místa v zásobníku ve smyčce:   ");
       Serial.println(uxTaskGetStackHighWaterMark( NULL )); 
       }   
      else {
        vTaskDelay(50 / portTICK_PERIOD_MS);} 
       }
    }
Už se s tím peru týden, ale je strašně málo informací jak chybu hledat :roll: Tak kdyby se našel nějaký odborník .... budu vděčný za jakýkoli postup....

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 12 hostů