| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | #include "FreeRTOS.h"#include "task.h"#include "semphr.h"#include "queue.h"#include <stdint.h>#include "tinystdio.h"#include "usart.h"#ifdef RS485_USART#undef DBG#define DBG if(0)#define RS485_BUFSIZE   256static uint8_t buf[RS485_BUFSIZE];static void rs485_thread(void *arg){    (void)arg;    while (1) {        /* Get packet */        uint16_t n = 0;        xQueueReceive(rs485RxQ, &buf[n++], portMAX_DELAY);        while (xQueueReceive(rs485RxQ, &buf[n], 10) == pdTRUE && n < RS485_BUFSIZE) {            n++;        }        /* Echo inverted packet */        uint16_t i = 0;        while (i < n) {            uint8_t byte = ~buf[i++];            if (xQueueSend(rs485TxQ, &byte, 1000) == pdTRUE) {                rs485_enable_tx();            } else {                DBG printf("[echo] rx data lost\r\n");                return;            }        }    }}void rs485echo_init(void){    xTaskCreate(rs485_thread, ( char * ) "rs485_thr", configMINIMAL_STACK_SIZE,        NULL, tskIDLE_PRIORITY, NULL);}#endif
 |