论多串口通信架构(方便多编程语言和不同硬件之间移植)
标签(空格分隔): 多串口 队列 多语言移植
写此文的目的有二:
1、方便自己,觉得在以后的工程中,总是避不过多串口的问题,不像单串口时那么简单,考虑到可靠性,要使用队列,而且指令有首尾标志位时,也需要识别。如果只用一种语言写,在用另外一种语言或者另外一种硬件时,又要重新想结构。希望能写出一个架构,每次套用即可。
2、也是把经验分享给新手,节省时间。
下面以C语言为例来说明架构
1、文件层面上
UART_QUEUE.h | UART_QUEUE.c |
---|---|
变量定义:队列结构体、接收完整指令数组 函数声明:.c文件里的函数 |
1、初始化 : Uart_Init(UARTX) 初始化UARTX的寄存器,设置波特率,定义这个口的队列,接收\发送完整指令数组,还有所有串口初始化的公用部分。 2、队列初始化: Uart_Queue_Init(UARTX_queue) 将队列的队首队尾初始化 3、存入队列 : Uart_Queue_pushAchar(UARTX_queue,data) 将data存入UARTX_queue的队尾 4、取出队列: Uart_Queue_popAchar(UARTX_queue) 返回值是从队首取出的一个数据 5、计算队列长度: Uart_Queue_size(UARTX_queue) 若队列中没有数则不进行取数。 6、取出一条完整的指令 : Uart_Queue_getAcmd(&cmd_bufferX_R[],UARTX_queue) 返回值是指令的长度,若是没有读取到完整的指令则返回0 7、发送一个字节 : Uart_sendAchar(UARTX,data) 8、发送一个字符串 Uart_sendAcmd(UARTX,data) |
2、图解数据的流动
队列初始状态
队首在队尾后
队首在队尾前