前三节原始说明了UART的原理以及构建过程。《嵌入式硬件通信接口协议-UART(一)协议基础》《嵌入式硬件通信接口协议-UART(二)有所不同电气规范下的标准》《嵌入式硬件通信接口协议-UART(三)较慢用于串口及应用于》事实上UART只是一个传输层的协议。
在实际的项目用于中,往往是根据项目的明确市场需求,在以UART作为物理传输模块的通信方式上,自定义私有的应用层协议,这个应用层协议本质就是数据协议,并且对协议的解析和构建,都必须MCU对数据展开内存、计算出来、校验、分析等操作者。说道到内存,在这再行买个关子……估算大部分人首先想起的是,代码里定义个全局变量的内存数组,然后从串口的接管寄存器朗读数据,并逐一字节地写道内存数组里,接完一包数据,继续执行数据分析……这个点子是对的,逻辑是合的,但是……多少字节是原始一包数据?如果是中断接管,第一包在收完还并未再也几乎处置,有数据进去启动时中断,又被载入内存数组覆盖面积原有数据呢?针对这问题,或许有人不会想起,多定义几个内存数组,数据包写满一个内存数组则开始写道另一内存数组,或者分析处置前再行拷贝出来,再行或者分析处置前关串口接管……说来说去,这样子倒腾数据,一包一包的拷来移除的,过于没有效率了,还想关中断,这样通信效率也太低了!针对这里的内存问题,引进一个经典:循环缓冲区Circularbuffer。有很多称谓:圆形缓冲区(器)、圆形队列…如此经典,在互联网上的资料也是相当多了,中文版的讲解引荐用于百度百科展开搜寻“环形缓冲器”,英文版引荐用于维基百科展开搜寻“Circularbuffer”,在此仍然赘述。
当你理解循环缓冲区之后,是不是早就磨刀霍霍地想立刻敲打代码?不生气,再行到开源社区网站去找一去找,这里引荐GitHub。好的开源项目,有人参予确保,还有人参予用于并给与对系统,使得项目代码更加强壮。
到GitHub主页搜寻“Circularbuffer”寻找涉及项目,检验C语言的项目:从搜寻结果中看见,按照涉及程度排序方式下,被星标珍藏的项目最少的是“TPCircularBuffer”,点进来后找到它用作音频处置“Asimple,fastcircularbufferimplementationforaudioprocessing”换回个精简的来看吧。回到搜寻结果列表,页面第二个的“Ring-Buffer”,它的叙述早已解释是用作嵌入式系统“Asimpleringbuffer(circularbuffer)designedforembeddedsystems.”眼见embedded就平易近人,就用这项目参照。
本文关键词:优德88
本文来源:优德88-www.billsphotoblog.com