前提・実現したいこと
ESP32-DevKitCでタイマー割り込みイネーブル後にWifi接続(接続監視・再接続)したい
タイマー割り込みはデータの一定時間の収集や通信タイミングに使用したい
wifi通信は接続後も切断した場合に再接続する処理を行いたいのでタイマー割り込みイネーブル後にも接続処理をできるようにしたい
(できれば別タスクで)
発生している問題・エラーメッセージ
タイマー割り込み処理イネーブル後にWifi接続するとリブートを繰り返してしまう
ただし条件としてタイマー割り込み内の処理で他のファイルの関数を呼び出した場合
例えば.inoファイル内で宣言された変数や関数を呼び出した場合は起きない
Rebooting... ets Jun 8 2016 00:22:57 rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:2 load:0x3fff0018,len:4 load:0x3fff001c,len:1216 ho 0 tail 12 room 4 load:0x40078000,len:9720 ho 0 tail 12 room 4 load:0x40080400,len:6364 entry 0x400806b8 Guru Meditation Error: Core 1 panic'ed (Cache disabled but cached memory region accessed) Core 1 register dump: PC : 0x40139b30 PS : 0x00060034 A0 : 0x800812f4 A1 : 0x3ffbe790 A2 : 0x3ffbecd8 A3 : 0x20000000 A4 : 0x00000400 A5 : 0x00000000 A6 : 0x3ffc15f8 A7 : 0xffffffff A8 : 0x80080f4d A9 : 0x00000001 A10 : 0x00060e23 A11 : 0x00000000 A12 : 0x3ffba264 A13 : 0x0000abab A14 : 0x3ffc3248 A15 : 0x00000001 SAR : 0x00000012 EXCCAUSE: 0x00000007 EXCVADDR: 0x00000000 LBEG : 0x00000000 LEND : 0x00000000 LCOUNT : 0x00000000 Core 1 was running in ISR context: EPC1 : 0x40086ac7 EPC2 : 0x00000000 EPC3 : 0x00000000 EPC4 : 0x40139b30 Backtrace: 0x40139b30:0x3ffbe790 0x400812f1:0x3ffbe7b0 0x40084809:0x3ffbe7d0 0x40086ac4:0x3ffba190 0x40082c23:0x3ffba1b0 0x40088c15:0x3ffba1d0
該当のソースコード
sketch_sep15a.ino
#include <WiFi.h> #include "testtest.hpp" const char* ssid = "***"; const char* password = "***"; hw_timer_t * timer = NULL; void IRAM_ATTR lOOusecTimer(){ test(); } void setup() { Serial.begin(115200); while (!Serial); timer = timerBegin(0, 80, true); timerAttachInterrupt(timer, &lOOusecTimer, true); timerAlarmWrite(timer, 100, true); timerAlarmEnable(timer); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } } void loop() { delay(1000); }
testtest.cpp
void test(){ }
testtest.hpp
void test();
試したこと
・サンプルでは同一タスクで接続してるが、別タスクにしてCPUコアをPRO_CPU_NUMやAPP_CPU_NUMなど指定を変えてメインタスクと別にすることで回避できないか試したが同じ結果になった
・Wifi接続処理に使用しているタイマーがあり競合しているのではないかと、タイマーを0~3まで変更してみたが同じ結果になった
・タイマーイネーブル前だと問題なくWifi接続
補足情報(FW/ツールのバージョンなど)
Arduino Ver1.8.13
できるだけシンプルな形にしたつもりですが、問題解決の糸口が見つけられませんでした。他のサイトでもTimer割り込みとWifi接続を両立しているサンプルはありましたが、Timerイネーブル前に接続してその後は通信の監視はしていないものばかりで行き詰まってしまいました。どなたか思い当たる点がありましたら宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/09/17 01:15