mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 07:49:52 +03:00
make task cores configurable in platformio.ini
This commit is contained in:
@@ -74,7 +74,7 @@ MqttClient::MqttClient(espMqttClientTypes::UseInternalTask useInternalTask, uint
|
|||||||
|
|
||||||
MqttClient::~MqttClient() {
|
MqttClient::~MqttClient() {
|
||||||
disconnect(true);
|
disconnect(true);
|
||||||
_clearQueue(2);
|
clearQueue(true);
|
||||||
#if defined(ARDUINO_ARCH_ESP32)
|
#if defined(ARDUINO_ARCH_ESP32)
|
||||||
vSemaphoreDelete(_xSemaphore);
|
vSemaphoreDelete(_xSemaphore);
|
||||||
if (_useInternalTask == espMqttClientTypes::UseInternalTask::YES) {
|
if (_useInternalTask == espMqttClientTypes::UseInternalTask::YES) {
|
||||||
|
|||||||
@@ -39,11 +39,14 @@ build_flags =
|
|||||||
-D CONFIG_ASYNC_TCP_MAX_ACK_TIME=5000 ; default
|
-D CONFIG_ASYNC_TCP_MAX_ACK_TIME=5000 ; default
|
||||||
-D CONFIG_ASYNC_TCP_PRIORITY=10 ; default
|
-D CONFIG_ASYNC_TCP_PRIORITY=10 ; default
|
||||||
-D CONFIG_ASYNC_TCP_QUEUE_SIZE=64 ; default
|
-D CONFIG_ASYNC_TCP_QUEUE_SIZE=64 ; default
|
||||||
-D CONFIG_ASYNC_TCP_RUNNING_CORE=0 ; force async_tcp task to be on other core as Arduino app (default is any core)
|
-D CONFIG_ASYNC_TCP_RUNNING_CORE=1 ; force async_tcp task to be on same core as Arduino app (default is any core)
|
||||||
-D CONFIG_ASYNC_TCP_STACK_SIZE=6144 ; stack usage measured: ESP32: ~2.3K, ESP32S3: ~3.5k - (default is 16K)
|
-D CONFIG_ASYNC_TCP_STACK_SIZE=6144 ; stack usage measured: ESP32: ~2.3K, ESP32S3: ~3.5k - (default is 16K)
|
||||||
; ESPAsyncWebServer
|
; ESPAsyncWebServer
|
||||||
-D WS_MAX_QUEUED_MESSAGES=0 ; log messages are already queued in ems-esp
|
-D WS_MAX_QUEUED_MESSAGES=0 ; log messages are already queued in ems-esp
|
||||||
-D CORE_DEBUG_LEVEL=0
|
-D CORE_DEBUG_LEVEL=0
|
||||||
|
-D EMSESP_SCHEDULER_RUNNING_CORE=1
|
||||||
|
; -D EMSESP_SCHEDULER_STACKSIZE=6144
|
||||||
|
-D EMSESP_MQTT_RUNNING_CORE=1
|
||||||
|
|
||||||
|
|
||||||
unbuild_flags =
|
unbuild_flags =
|
||||||
@@ -101,10 +104,10 @@ monitor_filters = direct
|
|||||||
build_type = release
|
build_type = release
|
||||||
board_build.filesystem = littlefs
|
board_build.filesystem = littlefs
|
||||||
lib_deps =
|
lib_deps =
|
||||||
bblanchon/ArduinoJson @ 7.4.1
|
bblanchon/ArduinoJson @ 7.4.2
|
||||||
ESP32Async/AsyncTCP @ 3.4.2
|
ESP32Async/AsyncTCP @ 3.4.2
|
||||||
ESP32Async/ESPAsyncWebServer @ 3.7.8
|
ESP32Async/ESPAsyncWebServer @ 3.7.8
|
||||||
https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.7
|
https://github.com/MichaelDvP/EMS-ESP-Modules.git @ 1.0.8
|
||||||
|
|
||||||
;
|
;
|
||||||
; Builds for different board types
|
; Builds for different board types
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ void MqttSettingsService::startClient() {
|
|||||||
if (_state.enableTLS) {
|
if (_state.enableTLS) {
|
||||||
isSecure = true;
|
isSecure = true;
|
||||||
if (emsesp::EMSESP::system_.PSram() > 0) {
|
if (emsesp::EMSESP::system_.PSram() > 0) {
|
||||||
_mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::YES);
|
_mqttClient = new espMqttClientSecure(EMSESP_MQTT_PRIORITY, EMSESP_MQTT_RUNNING_CORE);
|
||||||
} else {
|
} else {
|
||||||
_mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::NO);
|
_mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::NO);
|
||||||
}
|
}
|
||||||
@@ -64,7 +64,7 @@ void MqttSettingsService::startClient() {
|
|||||||
#endif
|
#endif
|
||||||
isSecure = false;
|
isSecure = false;
|
||||||
if (emsesp::EMSESP::system_.PSram() > 0) {
|
if (emsesp::EMSESP::system_.PSram() > 0) {
|
||||||
_mqttClient = new espMqttClient(espMqttClientTypes::UseInternalTask::YES);
|
_mqttClient = new espMqttClient(EMSESP_MQTT_PRIORITY, EMSESP_MQTT_RUNNING_CORE);
|
||||||
} else {
|
} else {
|
||||||
_mqttClient = new espMqttClient(espMqttClientTypes::UseInternalTask::NO);
|
_mqttClient = new espMqttClient(espMqttClientTypes::UseInternalTask::NO);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,19 @@
|
|||||||
#define FACTORY_MQTT_MAX_TOPIC_LENGTH 128
|
#define FACTORY_MQTT_MAX_TOPIC_LENGTH 128
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef EMSESP_MQTT_RUNNING_CORE
|
||||||
|
#define EMSESP_MQTT_RUNNING_CORE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef EMSESP_MQTT_STACKSIZE
|
||||||
|
#undef EMC_TASK_STACK_SIZE
|
||||||
|
#define EMC_TASK_STACK_SIZE EMSESP_MQTT_STACKSIZE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef EMSESP_MQTT_PRIORITY
|
||||||
|
#define EMSESP_MQTT_PRIORITY 1
|
||||||
|
#endif
|
||||||
|
|
||||||
class MqttSettings {
|
class MqttSettings {
|
||||||
public:
|
public:
|
||||||
bool enabled;
|
bool enabled;
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
uint8_t EMSuart::last_tx_src_ = 0;
|
uint8_t EMSuart::last_tx_src_ = 0;
|
||||||
|
|
||||||
|
static TaskHandle_t xHandle;
|
||||||
static QueueHandle_t uart_queue;
|
static QueueHandle_t uart_queue;
|
||||||
uint8_t tx_mode_ = 0xFF;
|
uint8_t tx_mode_ = 0xFF;
|
||||||
uint32_t inverse_mask = 0;
|
uint32_t inverse_mask = 0;
|
||||||
@@ -94,12 +95,18 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t
|
|||||||
uart_param_config(EMSUART_NUM, &uart_config);
|
uart_param_config(EMSUART_NUM, &uart_config);
|
||||||
uart_set_pin(EMSUART_NUM, tx_gpio, rx_gpio, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
|
uart_set_pin(EMSUART_NUM, tx_gpio, rx_gpio, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
|
||||||
uart_set_line_inverse(EMSUART_NUM, inverse_mask);
|
uart_set_line_inverse(EMSUART_NUM, inverse_mask);
|
||||||
uart_driver_install(EMSUART_NUM, 129, 0, (EMS_MAXBUFFERSIZE + 1) * 2, &uart_queue, 0); // buffer must be > fifo
|
uart_driver_install(EMSUART_NUM, UART_FIFO_LEN + 1, 0, (EMS_MAXBUFFERSIZE + 1) * 2, &uart_queue, 0); // buffer must be > fifo
|
||||||
uart_set_rx_full_threshold(EMSUART_NUM, 1);
|
uart_set_rx_full_threshold(EMSUART_NUM, 1);
|
||||||
uart_set_rx_timeout(EMSUART_NUM, 0); // disable
|
uart_set_rx_timeout(EMSUART_NUM, 0); // disable
|
||||||
|
|
||||||
// note esp32s3 crashes with 2k stacksize, stack overflow here sometimes wipes settingsfiles.
|
// note esp32s3 crashes with 2k stacksize, stack overflow here sometimes wipes settingsfiles.
|
||||||
xTaskCreate(uart_event_task, "uart_event_task", 2560, NULL, configMAX_PRIORITIES - 1, NULL);
|
#if defined(CONFIG_FREERTOS_UNICORE) || (EMSESP_UART_RUNNING_CORE < 0)
|
||||||
|
xTaskCreate(uart_event_task, "uart_event_task", EMSESP_UART_STACKSIZE, NULL, EMSESP_UART_PRIORITY, &xHandle);
|
||||||
|
#else
|
||||||
|
xTaskCreatePinnedToCore(uart_event_task, "uart_event_task", EMSESP_UART_STACKSIZE, NULL, EMSESP_UART_PRIORITY, &xHandle, EMSESP_UART_RUNNING_CORE);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
vTaskResume(xHandle);
|
||||||
}
|
}
|
||||||
tx_mode_ = tx_mode;
|
tx_mode_ = tx_mode;
|
||||||
uart_enable_intr_mask(EMSUART_NUM, UART_BRK_DET_INT_ENA | UART_RXFIFO_FULL_INT_ENA);
|
uart_enable_intr_mask(EMSUART_NUM, UART_BRK_DET_INT_ENA | UART_RXFIFO_FULL_INT_ENA);
|
||||||
@@ -111,7 +118,7 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t
|
|||||||
void EMSuart::stop() {
|
void EMSuart::stop() {
|
||||||
if (tx_mode_ != 0xFF) { // only call after driver initialisation
|
if (tx_mode_ != 0xFF) { // only call after driver initialisation
|
||||||
uart_disable_intr_mask(EMSUART_NUM, UART_BRK_DET_INT_ENA | UART_RXFIFO_FULL_INT_ENA);
|
uart_disable_intr_mask(EMSUART_NUM, UART_BRK_DET_INT_ENA | UART_RXFIFO_FULL_INT_ENA);
|
||||||
// TODO should we xTaskSuspend() the event task here?
|
vTaskSuspend(xHandle);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -139,7 +146,7 @@ void EMSuart::send_poll(const uint8_t data) {
|
|||||||
* buf contains the CRC and len is #bytes including the CRC
|
* buf contains the CRC and len is #bytes including the CRC
|
||||||
* returns code, 1=success
|
* returns code, 1=success
|
||||||
*/
|
*/
|
||||||
uint16_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) {
|
uint8_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) {
|
||||||
if (len == 0 || len >= EMS_MAXBUFFERSIZE) {
|
if (len == 0 || len >= EMS_MAXBUFFERSIZE) {
|
||||||
return EMS_TX_STATUS_ERR;
|
return EMS_TX_STATUS_ERR;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,17 @@
|
|||||||
#ifndef EMSESP_EMSUART_H
|
#ifndef EMSESP_EMSUART_H
|
||||||
#define EMSESP_EMSUART_H
|
#define EMSESP_EMSUART_H
|
||||||
|
|
||||||
|
#ifndef EMSESP_UART_RUNNING_CORE
|
||||||
|
#define EMSESP_UART_RUNNING_CORE -1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef EMSESP_UART_STACKSIZE
|
||||||
|
#define EMSESP_UART_STACKSIZE 2560
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef EMSESP_UART_PRIORITY
|
||||||
|
#define EMSESP_UART_PRIORITY configMAX_PRIORITIES - 1
|
||||||
|
#endif
|
||||||
#define EMS_MAXBUFFERSIZE 33 // max size of the buffer. EMS packets are max 32 bytes, plus extra for BRK
|
#define EMS_MAXBUFFERSIZE 33 // max size of the buffer. EMS packets are max 32 bytes, plus extra for BRK
|
||||||
|
|
||||||
#define EMSUART_NUM UART_NUM_1 // on C3 and S2 there is no UART2, use UART1 for all
|
#define EMSUART_NUM UART_NUM_1 // on C3 and S2 there is no UART2, use UART1 for all
|
||||||
@@ -61,11 +72,11 @@ class EMSuart {
|
|||||||
EMSuart() = default;
|
EMSuart() = default;
|
||||||
~EMSuart() = default;
|
~EMSuart() = default;
|
||||||
|
|
||||||
static void start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t tx_gpio);
|
static void start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t tx_gpio);
|
||||||
static void send_poll(const uint8_t data);
|
static void send_poll(const uint8_t data);
|
||||||
static void stop();
|
static void stop();
|
||||||
static uint16_t transmit(const uint8_t * buf, const uint8_t len);
|
static uint8_t transmit(const uint8_t * buf, const uint8_t len);
|
||||||
static uint8_t last_tx_src() {
|
static uint8_t last_tx_src() {
|
||||||
return last_tx_src_;
|
return last_tx_src_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,12 @@ void WebSchedulerService::begin() {
|
|||||||
Mqtt::subscribe(EMSdevice::DeviceType::SCHEDULER, topic, nullptr); // use empty function callback
|
Mqtt::subscribe(EMSdevice::DeviceType::SCHEDULER, topic, nullptr); // use empty function callback
|
||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
if (EMSESP::system_.PSram()) {
|
if (EMSESP::system_.PSram()) {
|
||||||
xTaskCreate((TaskFunction_t)scheduler_task, "scheduler_task", 5120, NULL, 1, NULL);
|
#if defined(CONFIG_FREERTOS_UNICORE) || (EMSESP_SCHEDULER_RUNNING_CORE < 0)
|
||||||
|
xTaskCreate((TaskFunction_t)scheduler_task, "scheduler_task", EMSESP_SCHEDULER_STACKSIZE, NULL, EMSESP_SCHEDULER_PRIORITY, NULL);
|
||||||
|
#else
|
||||||
|
xTaskCreatePinnedToCore(
|
||||||
|
(TaskFunction_t)scheduler_task, "scheduler_task", EMSESP_SCHEDULER_STACKSIZE, NULL, EMSESP_SCHEDULER_PRIORITY, NULL, EMSESP_SCHEDULER_RUNNING_CORE);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,18 @@
|
|||||||
#define EMSESP_SCHEDULER_FILE "/config/emsespScheduler.json"
|
#define EMSESP_SCHEDULER_FILE "/config/emsespScheduler.json"
|
||||||
#define EMSESP_SCHEDULER_SERVICE_PATH "/rest/schedule" // GET and POST
|
#define EMSESP_SCHEDULER_SERVICE_PATH "/rest/schedule" // GET and POST
|
||||||
|
|
||||||
|
#ifndef EMSESP_SCHEDULER_RUNNING_CORE
|
||||||
|
#define EMSESP_SCHEDULER_RUNNING_CORE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef EMSESP_SCHEDULER_STACKSIZE
|
||||||
|
#define EMSESP_SCHEDULER_STACKSIZE 5120
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef EMSESP_SCHEDULER_PRIORITY
|
||||||
|
#define EMSESP_SCHEDULER_PRIORITY 1
|
||||||
|
#endif
|
||||||
|
|
||||||
// bit flags for the schedule items. Matches those in interface/src/app/main/SchedulerDialog.tsx
|
// bit flags for the schedule items. Matches those in interface/src/app/main/SchedulerDialog.tsx
|
||||||
// 0-127 (0->0x7F) is day schedule
|
// 0-127 (0->0x7F) is day schedule
|
||||||
// 128/0x80 is timer
|
// 128/0x80 is timer
|
||||||
|
|||||||
Reference in New Issue
Block a user