Switched hub Freertos to multicore
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {}
|
||||
|
||||
Reference in New Issue
Block a user