[开发资料] 【CW32】uart_obj_fw 轻量级串口框架

[复制链接]
34|0
磨砂 发表于 2025-11-7 13:11 | 显示全部楼层 |阅读模式
以下文章内容由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版本编译器
功能上通过配置支持仅发送,仅接收,或发送接收都支持
配置项

37931690d5866b2a0a.png

仓库架构

33616690d5857b880d.png

库文件说明

10077690d584e85087.png

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

缓冲区FIFO策略
完全型缓冲区策略:无论数据量大小,收到一包数据都固定消耗一个缓冲区,该方式内存利用率低,但管理起来简单,代码量少。
紧凑型FIFO策略:根据数据量大小,消耗的缓冲区大小为动态,该方式内存利用率高,但管理起来麻烦,需要更多代码。
tips:目前的FIFO策略为完全型缓冲区策略,后期看情况更新紧凑型策略
————————————————
版权声明:本文为CSDN博主「CW32生态社区」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2302_81038468/article/details/152277605

您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

4415

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部