Beispiel für Message Buffer in FreeRTOS

Antwort

In FreeRTOS kannst du Message Buffers verwenden, um Daten zwischen Tasks auszutauschen. Hier ist ein einfaches Beispiel, das zeigt, wie du einen Message Buffer erstellen und verwenden kannst. ```c #include <stdio.h> #include "FreeRTOS.h" #include "task.h" #include "message_buffer.h" #define BUFFER_SIZE 100 // Message Buffer Handle MessageBufferHandle_t xMessageBuffer; // Task Prototypen void vSenderTask(void *pvParameters); void vReceiverTask(void *pvParameters); int main(void) { // Initialisiere den Message Buffer xMessageBuffer = xMessageBufferCreate(BUFFER_SIZE); // Erstelle die Tasks xTaskCreate(vSenderTask, "Sender", configMINIMAL_STACK_SIZE, NULL, 1, NULL); xTaskCreate(vReceiverTask, "Receiver", configMINIMAL_STACK_SIZE, NULL, 1, NULL); // Starte den Scheduler vTaskStartScheduler(); // Sollte nie hierher gelangen for (;;); } void vSenderTask(void *pvParameters) { const char *pcMessage = "Hello from Sender!"; size_t xBytesSent; for (;;) { // Sende eine Nachricht xBytesSent = xMessageBufferSend(xMessageBuffer, (void *)pcMessage, strlen(pcMessage) + 1, portMAX_DELAY); if (xBytesSent > 0) { printf("Sent: %s\n", pcMessage); } vTaskDelay(pdMS_TO_TICKS(1000)); // Warte 1 Sekunde } } void vReceiverTask(void *pvParameters) { char pcReceivedMessage[BUFFER_SIZE]; size_t xBytesReceived; for (;;) { // Empfange eine Nachricht xBytesReceived = xMessageBufferReceive(xMessageBuffer, pcReceivedMessage, sizeof(pcReceivedMessage), portMAX_DELAY); if (xBytesReceived > 0) { printf("Received: %s\n", pcReceivedMessage); } } } ``` In diesem Beispiel wird ein Message Buffer mit einer Größe von 100 Bytes erstellt. Die `vSenderTask` sendet eine Nachricht an den Buffer, während die `vReceiverTask` die Nachricht empfängt und ausgibt. Die Tasks laufen in einer Endlosschleife und verwenden `vTaskDelay`, um die CPU nicht zu überlasten.

Frage stellen und sofort Antwort erhalten