task stack sizes tailored; semaphore controlled wifi task
This commit is contained in:
parent
cb4870bce5
commit
b22fd808b8
@ -6,13 +6,13 @@
|
|||||||
|
|
||||||
; ---> SELECT TARGET PLATFORM HERE! <---
|
; ---> SELECT TARGET PLATFORM HERE! <---
|
||||||
[platformio]
|
[platformio]
|
||||||
;env_default = generic
|
env_default = generic
|
||||||
;env_default = ebox
|
;env_default = ebox
|
||||||
;env_default = heltec
|
;env_default = heltec
|
||||||
;env_default = ttgov1
|
;env_default = ttgov1
|
||||||
;env_default = ttgov2
|
;env_default = ttgov2
|
||||||
;env_default = ttgov21old
|
;env_default = ttgov21old
|
||||||
env_default = ttgov21new
|
;env_default = ttgov21new
|
||||||
;env_default = ttgobeam
|
;env_default = ttgobeam
|
||||||
;env_default = lopy
|
;env_default = lopy
|
||||||
;env_default = lopy4
|
;env_default = lopy4
|
||||||
@ -29,7 +29,7 @@ description = Paxcounter is a proof-of-concept ESP32 device for metering passeng
|
|||||||
release_version = 1.5.7
|
release_version = 1.5.7
|
||||||
; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running!
|
; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running!
|
||||||
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
|
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
|
||||||
debug_level = 3
|
debug_level = 0
|
||||||
; UPLOAD MODE: select esptool to flash via USB/UART, select custom to upload to cloud for OTA
|
; UPLOAD MODE: select esptool to flash via USB/UART, select custom to upload to cloud for OTA
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
;upload_protocol = custom
|
;upload_protocol = custom
|
||||||
|
@ -23,6 +23,19 @@ void doHousekeeping() {
|
|||||||
if (cfg.runmode == 1)
|
if (cfg.runmode == 1)
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
|
|
||||||
|
// task storage debugging //
|
||||||
|
#ifdef HAS_LORA
|
||||||
|
ESP_LOGD(TAG, "Loraloop %d bytes left",
|
||||||
|
uxTaskGetStackHighWaterMark(LoraTask));
|
||||||
|
#endif
|
||||||
|
ESP_LOGD(TAG, "Wifiloop %d bytes left",
|
||||||
|
uxTaskGetStackHighWaterMark(wifiSwitchTask));
|
||||||
|
ESP_LOGD(TAG, "Statemachine %d bytes left",
|
||||||
|
uxTaskGetStackHighWaterMark(stateMachineTask));
|
||||||
|
#ifdef HAS_GPS
|
||||||
|
ESP_LOGD(TAG, "Gpsloop %d bytes left", uxTaskGetStackHighWaterMark(GpsTask));
|
||||||
|
#endif
|
||||||
|
|
||||||
// read battery voltage into global variable
|
// read battery voltage into global variable
|
||||||
#ifdef HAS_BATTERY_PROBE
|
#ifdef HAS_BATTERY_PROBE
|
||||||
batt_voltage = read_voltage();
|
batt_voltage = read_voltage();
|
||||||
@ -48,7 +61,7 @@ void doHousekeeping() {
|
|||||||
esp_get_minimum_free_heap_size(), ESP.getFreeHeap());
|
esp_get_minimum_free_heap_size(), ESP.getFreeHeap());
|
||||||
SendData(COUNTERPORT); // send data before clearing counters
|
SendData(COUNTERPORT); // send data before clearing counters
|
||||||
reset_counters(); // clear macs container and reset all counters
|
reset_counters(); // clear macs container and reset all counters
|
||||||
get_salt(); // get new salt for salting hashes
|
get_salt(); // get new salt for salting hashes
|
||||||
|
|
||||||
if (esp_get_minimum_free_heap_size() <= MEM_LOW) // check again
|
if (esp_get_minimum_free_heap_size() <= MEM_LOW) // check again
|
||||||
esp_restart(); // memory leak, reset device
|
esp_restart(); // memory leak, reset device
|
||||||
|
@ -54,6 +54,7 @@ extern std::array<uint64_t, 0xff>::iterator it;
|
|||||||
extern std::array<uint64_t, 0xff> beacons;
|
extern std::array<uint64_t, 0xff> beacons;
|
||||||
|
|
||||||
extern SemaphoreHandle_t xWifiChannelSwitchSemaphore;
|
extern SemaphoreHandle_t xWifiChannelSwitchSemaphore;
|
||||||
|
extern TaskHandle_t stateMachineTask, wifiSwitchTask;
|
||||||
|
|
||||||
#ifdef HAS_GPS
|
#ifdef HAS_GPS
|
||||||
extern TaskHandle_t GpsTask;
|
extern TaskHandle_t GpsTask;
|
||||||
|
23
src/main.cpp
23
src/main.cpp
@ -59,7 +59,7 @@ hw_timer_t *channelSwitch, *displaytimer, *sendCycle, *homeCycle;
|
|||||||
uint8_t volatile ButtonPressedIRQ = 0, ChannelTimerIRQ = 0,
|
uint8_t volatile ButtonPressedIRQ = 0, ChannelTimerIRQ = 0,
|
||||||
SendCycleTimerIRQ = 0, DisplayTimerIRQ = 0, HomeCycleIRQ = 0;
|
SendCycleTimerIRQ = 0, DisplayTimerIRQ = 0, HomeCycleIRQ = 0;
|
||||||
|
|
||||||
TaskHandle_t stateMachineTask = NULL;
|
TaskHandle_t stateMachineTask, wifiSwitchTask;
|
||||||
|
|
||||||
SemaphoreHandle_t xWifiChannelSwitchSemaphore;
|
SemaphoreHandle_t xWifiChannelSwitchSemaphore;
|
||||||
|
|
||||||
@ -308,8 +308,13 @@ void setup() {
|
|||||||
// https://techtutorialsx.com/2017/05/09/esp32-get-task-execution-core/
|
// https://techtutorialsx.com/2017/05/09/esp32-get-task-execution-core/
|
||||||
|
|
||||||
ESP_LOGI(TAG, "Starting Lora...");
|
ESP_LOGI(TAG, "Starting Lora...");
|
||||||
xTaskCreatePinnedToCore(lorawan_loop, "loraloop", 2048, (void *)1, 1,
|
xTaskCreatePinnedToCore(lorawan_loop, /* task function */
|
||||||
&LoraTask, 1);
|
"loraloop", /* name of task */
|
||||||
|
2560, /* stack size of task */
|
||||||
|
(void *)1, /* parameter of the task */
|
||||||
|
1, /* priority of the task */
|
||||||
|
&LoraTask, /* task handle*/
|
||||||
|
1); /* CPU core */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// if device has GPS and it is enabled, start GPS reader task on core 0 with
|
// if device has GPS and it is enabled, start GPS reader task on core 0 with
|
||||||
@ -317,7 +322,13 @@ void setup() {
|
|||||||
// streaming NMEA data
|
// streaming NMEA data
|
||||||
#ifdef HAS_GPS
|
#ifdef HAS_GPS
|
||||||
ESP_LOGI(TAG, "Starting GPS...");
|
ESP_LOGI(TAG, "Starting GPS...");
|
||||||
xTaskCreatePinnedToCore(gps_loop, "gpsloop", 2048, (void *)1, 2, &GpsTask, 0);
|
xTaskCreatePinnedToCore(gps_loop, /* task function */
|
||||||
|
"gpsloop", /* name of task */
|
||||||
|
1024, /* stack size of task */
|
||||||
|
(void *)1, /* parameter of the task */
|
||||||
|
2, /* priority of the task */
|
||||||
|
&GpsTask, /* task handle*/
|
||||||
|
0); /* CPU core */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// start BLE scan callback if BLE function is enabled in NVRAM configuration
|
// start BLE scan callback if BLE function is enabled in NVRAM configuration
|
||||||
@ -339,10 +350,10 @@ void setup() {
|
|||||||
// start wifi channel rotation task
|
// start wifi channel rotation task
|
||||||
xTaskCreatePinnedToCore(switchWifiChannel, /* task function */
|
xTaskCreatePinnedToCore(switchWifiChannel, /* task function */
|
||||||
"wifiloop", /* name of task */
|
"wifiloop", /* name of task */
|
||||||
3048, /* stack size of task */
|
1024, /* stack size of task */
|
||||||
NULL, /* parameter of the task */
|
NULL, /* parameter of the task */
|
||||||
4, /* priority of the task */
|
4, /* priority of the task */
|
||||||
NULL, /* task handle*/
|
&wifiSwitchTask, /* task handle*/
|
||||||
0); /* CPU core */
|
0); /* CPU core */
|
||||||
|
|
||||||
// start state machine
|
// start state machine
|
||||||
|
@ -57,7 +57,7 @@ void ChannelSwitchIRQ() {
|
|||||||
// Wifi channel rotation task
|
// Wifi channel rotation task
|
||||||
void switchWifiChannel(void * parameter) {
|
void switchWifiChannel(void * parameter) {
|
||||||
while (1) {
|
while (1) {
|
||||||
// task in block state to wait for channel switch timer interrupt event
|
// task is remaining in block state waiting for channel switch timer interrupt event
|
||||||
xSemaphoreTake(xWifiChannelSwitchSemaphore, portMAX_DELAY);
|
xSemaphoreTake(xWifiChannelSwitchSemaphore, portMAX_DELAY);
|
||||||
// rotates variable channel 1..WIFI_CHANNEL_MAX
|
// rotates variable channel 1..WIFI_CHANNEL_MAX
|
||||||
channel = (channel % WIFI_CHANNEL_MAX) + 1;
|
channel = (channel % WIFI_CHANNEL_MAX) + 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user