以下文章内容由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
后期可能会更新的内容
特色
面向对象思想,高内聚低耦合
- 资源占用极低,效率高,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策略为完全型缓冲区策略,后期看情况更新紧凑型策略
阅读全文
770