Switched hub Freertos to multicore

This commit is contained in:
AlexanderHD27
2025-01-03 12:48:10 +01:00
parent 1fd8737fe4
commit bac01e3a9b
9 changed files with 55 additions and 24 deletions

View File

@@ -6,11 +6,11 @@
#include "task.h"
GobotRPC_CI::GobotRPC_CI(I_GobotRPC_CI_Hardware *hardware) {
GobotRPC_CI::GobotRPC_CI(I_GobotRPC_CI_Hardware *hardware, UBaseType_t core) {
this->hardware = hardware;
this->hardware->registerCB_RxData(GobotRPC_CI_rxData_cb, this);
xTaskCreate(GobotRPC_CI_heartBeatTaskFn, "Heartbeat Task", 2048, this, 2, &this->heartBeatTaskHandle);
xTaskCreateAffinitySet(GobotRPC_CI_heartBeatTaskFn, "Heartbeat Task", 2048, this, 2, core, &this->heartBeatTaskHandle);
}
// Rx Side

View File

@@ -12,8 +12,9 @@
// Initialize stuff
GobotRPC_CI_Hardware_RP2040_UART * g_GobotRPC_CI_Hardware_RP2040_UART;
GobotRPC_CI_Hardware_RP2040_UART::GobotRPC_CI_Hardware_RP2040_UART(uart_inst_t *uart, uint baudrate) {
GobotRPC_CI_Hardware_RP2040_UART::GobotRPC_CI_Hardware_RP2040_UART(uart_inst_t *uart, uint baudrate, UBaseType_t core) {
g_GobotRPC_CI_Hardware_RP2040_UART = this;
this->core = core;
initRxTaskAndQueues();

View File

@@ -33,7 +33,8 @@ void GobotRPC_CI_Hardware_RP2040_UART::initRxTaskAndQueues() {
}
rxSignalSemaphore = xSemaphoreCreateBinary();
xTaskCreate(GobotRPC_CI_Hardware_RP2040_UART_Task_RXProcessing, "UART RX Processing", 1024, this, 3, &this->rxProcessingTaskHandle);
xTaskCreateAffinitySet(GobotRPC_CI_Hardware_RP2040_UART_Task_RXProcessing, "UART RX Processing", 1024, this, 3, core, &this->rxProcessingTaskHandle);
}
inputBufferRXState_t fillBuffer(inputBuffers_t * buffer, char data) {

View File

@@ -29,7 +29,7 @@ private:
TaskHandle_t heartBeatTaskHandle;
public:
GobotRPC_CI(I_GobotRPC_CI_Hardware *hardware);
GobotRPC_CI(I_GobotRPC_CI_Hardware *hardware, UBaseType_t core);
void registerCB_TxPacket(callback_TxPacket cb, void *args);
void send_RxPacket(char *data, size_t len, uint32_t addr);

View File

@@ -45,7 +45,6 @@ private:
inputBuffers_t inputBufferPool[NUM_INPUT_BUFFERS];
TaskHandle_t rxProcessingTaskHandle;
SemaphoreHandle_t rxSignalSemaphore;
QueueHandle_t emptyInputBuffersQueue;
@@ -56,12 +55,15 @@ private:
SemaphoreHandle_t txMutex;
UBaseType_t core;
public:
GobotRPC_CI_Hardware_RP2040_UART(uart_inst_t *uart, uint baudrate);
GobotRPC_CI_Hardware_RP2040_UART(uart_inst_t *uart, uint baudrate, UBaseType_t core);
void send(char *data, size_t len) override;
void registerCB_RxData(callback_rxData cb, void *args);
void initRxTaskAndQueues();
void onRx_ISR();
void rxBufferingTaskFn();
void rxProcessingTaskFn();

View File

@@ -12,6 +12,9 @@
#define LED_PIN 25
#define UART_CORE_MASK 0b01
#define I2C_CORE_MASK 0b10
void vTaskMain(void * pvParameters) {
while(1) {
gpio_put(LED_PIN, 1);
@@ -37,13 +40,15 @@ int main() {
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, true);
GobotRPC_CI_Hardware_RP2040_UART gobotrpc_ci_hardware(uart0, 115200);
GobotRPC_CI gobotRPC_ci(&gobotrpc_ci_hardware);
GobotRPC_CI_Hardware_RP2040_UART gobotrpc_ci_hardware(uart0, 115200, 0b01);
GobotRPC_CI gobotRPC_ci(&gobotrpc_ci_hardware, 0b01);
gobotRPC_ci.registerCB_TxPacket(onTxPacket, &gobotRPC_ci);
TaskHandle_t taskHandle;
xTaskCreate(vTaskMain, "Main Task", 2048, &gobotRPC_ci, 1, &taskHandle);
xTaskCreateAffinitySet(vTaskMain, "Main Task", 2048, &gobotRPC_ci, 1, UART_CORE_MASK, &taskHandle);
vTaskCoreAffinitySet(taskHandle, 0);
vTaskStartScheduler();
while(1) {}