added freertos task_handler pinned task

This commit is contained in:
mverch67 2024-03-05 09:20:33 +01:00
parent ab6b797bc2
commit e73706949f

View File

@ -33,6 +33,7 @@
// #include <driver/rtc_io.h>
#ifdef ARCH_ESP32
#include "freertosinc.h"
#include "mesh/http/WebServer.h"
#include "nimble/NimbleBluetooth.h"
NimbleBluetooth *nimbleBluetooth;
@ -89,11 +90,13 @@ NRF52Bluetooth *nrf52Bluetooth;
AudioThread *audioThread;
#endif
#ifdef HAS_TFT
#if HAS_TFT
#include "DeviceScreen.h"
#include "sharedMem/MeshPacketClient.h"
#include "sharedMem/MeshPacketServer.h"
void tft_task_handler(void *);
DeviceScreen *deviceScreen = nullptr;
#endif
@ -363,10 +366,6 @@ void setup()
// otherwise keyboard and touch screen will not work
delay(200);
#endif
#ifdef HAS_TFT
deviceScreen = &DeviceScreen::create();
deviceScreen->init(new MeshPacketClient);
#endif
// Currently only the tbeam has a PMU
// PMU initialization needs to be placed before i2c scanning
@ -637,6 +636,12 @@ void setup()
SPI.setFrequency(4000000);
#endif
#if HAS_TFT
MeshPacketServer::init();
deviceScreen = &DeviceScreen::create();
deviceScreen->init(new MeshPacketClient);
#endif
// Initialize the screen first so we can show the logo while we start up everything else.
screen = new graphics::Screen(screen_found, screen_model, screen_geometry);
@ -872,10 +877,6 @@ void setup()
initApiServer(TCPPort);
#endif
#ifdef HAS_TFT
MeshPacketServer::init();
#endif
// Start airtime logger thread.
airTime = new AirTime();
@ -893,11 +894,18 @@ void setup()
// This must be _after_ service.init because we need our preferences loaded from flash to have proper timeout values
PowerFSM_setup(); // we will transition to ON in a couple of seconds, FIXME, only do this for cold boots, not waking from SDS
powerFSMthread = new PowerFSMThread();
#if HAS_TFT
#ifdef HAS_FREE_RTOS
xTaskCreatePinnedToCore(tft_task_handler, "tft", 4096, NULL, 9, NULL, 0);
#endif
#else
setCPUFast(false); // 80MHz is fine for our slow peripherals
#endif
#ifdef ARDUINO_ARCH_ESP32
LOG_DEBUG("--- Free heap : %8d bytes ---\n", ESP.getFreeHeap());
LOG_DEBUG("--- PSRAM : %8d bytes ---\n", ESP.getFreePsram());
LOG_DEBUG("Free heap : %7d bytes\n", ESP.getFreeHeap());
LOG_DEBUG("Free PSRAM : %7d bytes\n", ESP.getFreePsram());
#endif
}
@ -971,12 +979,16 @@ void loop()
}
#if HAS_TFT
void tft_task_handler(void)
void tft_task_handler(void *param = nullptr)
{
while (true) {
if (deviceScreen)
deviceScreen->task_handler();
delay(20);
#ifdef HAS_FREE_RTOS
vTaskDelay((TickType_t)10);
#else
delay(10);
#endif
}
}
#endif