NimBLE-Arduino 1.4.2 had an init/fire race in its FreeRTOS callout porting layer where os_callout_timer_cb dispatched a queued TimerHandle expiry against a not-yet-initialized event (NULL fn pointer), causing PC=0 InstrFetchProhibited within ~1s of boot when the camera task starved the timer service. Confirmed by ets_printf instrumentation. Upgrading to ^2.0.0 rewrites the porting layer and eliminates the race; verified clean on the customer network for 1+ hour. Also rolls in DNS-resilience work that surfaced the BLE crash during provisioning: pin lwIP/esp-netif resolvers to 1.1.1.1/8.8.8.8 across DHCP renewals, add three-tier resolver fallback in reporter with a hardcoded IP of last resort, and switch to raw WiFiClient with manual Host header to bypass HTTPClient's brittle DNS path. Migration touches for NimBLE 2.x: - NimBLEAdvertisedDeviceCallbacks -> NimBLEScanCallbacks - onResult signature now takes const NimBLEAdvertisedDevice* - setAdvertisedDeviceCallbacks -> setScanCallbacks - start(0, nullptr, false) -> start(0, false, false) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
54 lines
1.3 KiB
INI
54 lines
1.3 KiB
INI
; firmware/platformio.ini
|
|
[platformio]
|
|
default_envs = timercam
|
|
|
|
[env:timercam]
|
|
platform = espressif32@6.6.0
|
|
board = m5stack-timer-cam
|
|
framework = arduino
|
|
board_build.partitions = partitions_4mb_ota.csv
|
|
build_src_filter = +<*> -<main_capture.cpp>
|
|
build_flags =
|
|
-DBOARD_HAS_PSRAM
|
|
-mfix-esp32-psram-cache-issue
|
|
-DCORE_DEBUG_LEVEL=1
|
|
-DCONFIG_BT_NIMBLE_ENABLED=1
|
|
-DCONFIG_SPIRAM_USE_MALLOC=1
|
|
-DCONFIG_ARDUINO_LOOP_STACK_SIZE=16384
|
|
monitor_speed = 115200
|
|
upload_speed = 115200
|
|
upload_flags = --no-stub
|
|
lib_deps =
|
|
tzapu/WiFiManager@^2.0.17
|
|
bblanchon/ArduinoJson@^7.0.0
|
|
h2zero/NimBLE-Arduino@^2.0.0
|
|
espressif/esp32-camera
|
|
|
|
; Frame-capture build. Strips WiFi/BLE/CV/reporter; streams raw 96x96 frames
|
|
; over serial at 921600 baud for offline algorithm iteration.
|
|
[env:timercam-capture]
|
|
platform = espressif32@6.6.0
|
|
board = m5stack-timer-cam
|
|
framework = arduino
|
|
board_build.partitions = partitions_4mb_ota.csv
|
|
build_flags =
|
|
-DBOARD_HAS_PSRAM
|
|
-mfix-esp32-psram-cache-issue
|
|
-DCORE_DEBUG_LEVEL=0
|
|
-DCONFIG_SPIRAM_USE_MALLOC=1
|
|
build_src_filter = -<*> +<main_capture.cpp> +<camera.cpp>
|
|
monitor_speed = 460800
|
|
upload_speed = 115200
|
|
upload_flags = --no-stub
|
|
lib_deps =
|
|
espressif/esp32-camera
|
|
|
|
[env:native]
|
|
platform = native
|
|
test_framework = unity
|
|
build_flags =
|
|
-std=c++17
|
|
-DNATIVE_TEST
|
|
lib_deps =
|
|
kochcodes/mbedtls@^3.6.2
|