【CW32】uart_obj_fw 轻量级串口框架

描述

以下文章内容由CW32生态社区用户提供:

https://gitee.com/teletubbies-die-of-murder/lightweight-serial-framework

介绍

轻量级跨平台串口通信框架,专为资源受限的嵌入式设备设计。单个对象RAM占用最小68字节左右(不算缓冲区),ROM占用1-2k字节左右,功能支持裁剪,资源占用小并不代表低性能,该库参考了freeRTOS的队列实现,进行简化处理,保留最核心的功能,对于数据的FIFO操作,分析了拷贝原数据的劣势,采用了类似拷贝指针的方式,减少内存占用,提高效率。同时代码风格较好,有配套注释以及作者开发过程中的思考。

demo

demo使用CW32F030C8 ARM Cortex-M0+ 内核单片机,该例程充分发挥了单片机的性能,提供了单字节中断和DMA的框架例程,用户可参考此例程来快速开始。

例程请复制以下链接至网页端打开:

https://gitee.com/teletubbies-die-of-murder/lightweight-serial-framework

后期可能会更新的内容

发送同样增加缓冲区FIFO方式,先就绪到缓冲区后,在另一个线程发送,不在原地发送

引入DMA半满全满中断API

线程安全的实现方式会再增加一种

特色

面向对象思想,高内聚低耦合

资源占用极低,效率高,ROM占用1-2k字节

数据溢出保护,自动切换或锁定缓冲区

支持串口单字节中断,适配没有dma的单片机

支持串口DMA或DMA+IDLE中断

支持轻量级printf,使用第三方xprintf库节省内存

支持变量转字符串库,省去printf,进一步减小内存

日志输出功能,在初始化时为用户提示错误信息以及初始化详情

线程安全设计,用户根据所使用的RTOS实现lock和unlock后,使用外设是非常安全的

无malloc函数,零动态内存申请

兼容C89版本编译器

功能上通过配置支持仅发送,仅接收,或发送接收都支持

配置项

配置项 作用
USE_ONE_BYTE_IT_MODE 串口单字节中断模式 1-启用,0-不启用
USE_DMA_MODE 串口DMA模式 1-启用,0-不启用
USE_DMA_NOT_HAVE_RX_IDLE_MODE 不支持DMA空闲中断模式 1-启用,0-不启用
USE_DMA_RX_CNT_MODE DMA接收计数器模式选择
USE_UART_TX_BIN_DATA 串口发送二进制数据接口 1-启用,0-不启用
USE_UART_TX_STR_DATA 串口发送字符串数据接口 1-启用,0-不启用
USE_UART_PRINTF 串口格式化输出接口 1-启用,0-不启用
UART_PRINTF_BUFFER_SIZE 串口printf缓存区大小
USE_UART_PRINTF_BUF_STATIC 串口printf静态缓存区 1-使用,0-不使用
USE_INFO_LOG 启用日志打印 1-启用,0-不启用
USE_CHECK_INPUT_HANDLE_PARA 检查输入参数合法性 1-启用,0-不启用
USE_STD_LIB 使用标准库printf 1-启用,0-不启用
USE_STRING_EX_LIB 使用字符串扩展库 1-启用,0-不启用
USE_UART_TX_RX_MODE_SELECT 串口发送接收模式选择 1-启用,0-不启用

仓库架构

文件 功能
demo 示例工程
lib 库文件
other 其他文件

库文件说明

文件 功能
uart_obj 串口收发框架核心文件
xprintf 第三方轻量级printf库
string_ex 自定义扩展字符串库

多缓冲区的意义

在生产消费模型中,如果生产的数据能在下一次生产之前及时消费,则并不需要多缓冲区,否则需要,因为不加多缓冲区会发生数据覆盖或者数据丢失的情况。多缓冲区的意义在于,短时间内生产速度大于消费速度,对这种情况进行数据缓存,如果一直是生产速度大于消费速度,缓冲区再大也会被填满,该问题不是缓冲区的问题了,是性能跟不上,考虑降低生产速度,优化代码或者更换高性能芯片。多缓冲区结合DMA是最优的,在解析期间,DMA可以继续接收数据,两者并行。因此FIFO深度为2为最低标准,设置为1将没有缓存和并行的效果,实际设置多少根据项目需求选择。

缓冲区FIFO策略

完全型缓冲区策略:无论数据量大小,收到一包数据都固定消耗一个缓冲区,该方式内存利用率低,但管理起来简单,代码量少。

紧凑型FIFO策略:根据数据量大小,消耗的缓冲区大小为动态,该方式内存利用率高,但管理起来麻烦,需要更多代码。

tips:目前的FIFO策略为完全型缓冲区策略,后期看情况更新紧凑型策略

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分