• 正文
  • 相关推荐
申请入驻 产业图谱

【CW32】uart_obj_fw 轻量级串口框架

07/23 09:35
770
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

以下文章内容由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策略为完全型缓冲区策略,后期看情况更新紧凑型策略

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

以开放、共享、互助为理念,致力于构建武汉芯源半导体CW32系列MCU生态社区。无论是嵌入式MCU小自还是想要攻破技术难题的工程师,亦或是需求解决方案的产品经理都可在CW32生态社区汲取营养、共同成长。