Ring Buffering|FreeRTOS:xTask

This commit is contained in:
semarnat committed 2026-05-21 14:20:00 -06:00
1 parent 84cd51fd89
commit 4cab6e68e6
7 files changed
+1330 -1

No files matched your search

+55
View File
@@ -0,0 +1,55 @@
#include "Arduino.h"
#include "freertos/ringbuf.h"
//DEBUG
uint8_t i_debug[10] = {0,1,2,3,4,5,6,7,8,9};
const uint16_t SIZE_BUFFER = 1024;
// FreeRTOS
TaskHandle_t ADCTaskHandle = NULL;
TaskHandle_t WebSocketTaskHandle = NULL;
RingbufHandle_t bufferHandle = xRingbufferCreate(SIZE_BUFFER, RINGBUF_TYPE_NOSPLIT);
void ADCTask(void *parameter);
void WebSocketTask(void *parameter);
void setup(){
Serial.begin(230400);
//Iniciar el buffer circular
if (bufferHandle == NULL) {
Serial.printf("Failed to create ring buffer!");
return;
}
xTaskCreatePinnedToCore( ADCTask, "ADCTask", 10000, NULL, 1, &ADCTaskHandle, 0);
xTaskCreatePinnedToCore( WebSocketTask, "WebSocketTask", 10000, NULL, 1, &WebSocketTaskHandle, 0);
}
void loop(){
}
void ADCTask(void *parameter){
for(;;) {
if (xRingbufferSend(bufferHandle, i_debug, sizeof(i_debug), pdMS_TO_TICKS(1000)) != pdTRUE) {
Serial.println("Failed to send message to ring buffer!");
}
vTaskDelay(pdMS_TO_TICKS(10));
}
}
void WebSocketTask(void *parameter){
for(;;) {
size_t receivedMessageSize;
uint8_t* receivedMessage = (uint8_t*)xRingbufferReceive(bufferHandle, &receivedMessageSize, pdMS_TO_TICKS(1000));
// 6. Check if the receive operation was successful
if (receivedMessage != NULL) {
for(size_t i = 0; i < receivedMessageSize; i++) {
Serial.printf("%d ", receivedMessage[i]);}
Serial.println();
vRingbufferReturnItem(bufferHandle, (void*)receivedMessage);
} else {
Serial.println("Failed t+o receive message from ring buffer!");
}
}
}