0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【CW32】uart_obj_fw 轻量级串口框架

CW32生态社区 来源:CW32生态社区 作者:CW32生态社区 2025-09-29 18:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

审核编辑 黄宇

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

    关注

    34

    文章

    1657

    浏览量

    57640
  • CW32
    +关注

    关注

    1

    文章

    281

    浏览量

    1678
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32移植Free-RTOS】CW32开发者扶持计划

    CW32配置Free-RTOS全过程,CW32开发者扶持计划
    的头像 发表于 04-18 09:38 7145次阅读
    【<b class='flag-5'>CW32</b>移植Free-RTOS】<b class='flag-5'>CW32</b>开发者扶持计划

    CW32饭盒派开发板试用体验】串口实验

    CW32饭盒派开发板实现串口接收并控制LED
    的头像 发表于 05-29 09:13 42w次阅读
    【<b class='flag-5'>CW32</b>饭盒派开发板试用体验】<b class='flag-5'>串口</b>实验

    CW32快速开发入门

    CW32快速开发入门
    的头像 发表于 04-24 18:56 3250次阅读
    <b class='flag-5'>CW32</b>快速开发入门

    CW32 MCU温度监测应用

    监测环境温度,并通过串口将数据发送到PC端进行显示。 硬件连接 CW32 MCU LM35温度传感器 USB转串口模块 代码实现 #include \"cw32f030.h\&qu
    发表于 12-03 08:03

    使用CW32 MCU来实现UART串口通信与GPIO控制

    最近在项目中使用CW32 MCU,完成了一个简单的UART串口通信和GPIO控制的功能。CW32 MCU的资源相对丰富,特别适合一些低成本、低功耗的嵌入式应用。这里分享一下
    发表于 12-04 08:17

    10个轻量级框架

    这些轻量级框架使用HTML5和CSS3标准来帮助您快速开发跨平台的Web移动应用和网站。
    发表于 07-17 08:25

    轻量级的ui框架如何去制作

    原创分享:自制轻量级单片机UI框架框架元素用户接口代码开源平时常看csdn,但是从来没有自己写过。正好这几天需要用单片机做一个简易的ui界面,于是自己写了一个轻量级的ui
    发表于 07-14 07:39

    Dllite_micro (轻量级的 AI 推理框架

    DLLite-Micro 是一个轻量级的 AI 推理框架,可以为 OpenHarmony OS 的轻量设备和小型设备提供深度模型的推理能力DLLite-Micro 向开发者提供清晰、易上手的北向接口
    发表于 08-05 11:40

    如何自制轻量级单片机UI框架

    如何自制轻量级单片机UI框架
    发表于 10-14 06:13

    【应用笔记】CW32 自举程序中使用的 ISP 协议

    提供的 ISP 模式,通过 UART 串口方便地实现对 CW32 微控制器片上 FLASH主存储器的擦除和烧写。本应用笔记将介绍如何进入 CW32 微控制器 ISP 模式,以及所使用的
    发表于 06-06 13:26

    cw32和stm32的区别

    cw32和stm32的区别 CW32和STM32是两种常见的单片机,被广泛应用于各种电子设备中。在本文中,我们将深入探讨CW32和STM32之间的区别和优劣势。 1. 硬件性能 硬件性能是衡量单片机
    的头像 发表于 08-16 11:15 6074次阅读

    CW32单片机UART波特率设置介绍

    CW32单片机UART波特率设置介绍
    的头像 发表于 10-24 17:35 1656次阅读
    <b class='flag-5'>CW32</b>单片机<b class='flag-5'>UART</b>波特率设置介绍

    CW32单片机UART基本数据收发功能介绍

    CW32单片机UART基本数据收发功能介绍
    的头像 发表于 10-24 16:50 1501次阅读
    <b class='flag-5'>CW32</b>单片机<b class='flag-5'>UART</b>基本数据收发功能介绍

    应用笔记-CW32 自举程序中使用的 ISP 协议

    ,通过UART串口方便地实现对CW32微控制器片上FLASH主存储器的擦除和烧写。本应用笔记将介绍如何进入CW32微控制器ISP模式,以及所使用的ISP协议,并详细介绍支持的每个命令。
    发表于 06-06 13:37 7次下载

    基于CW32的物联网应用

    CW32】基于CW32的物联网应用
    的头像 发表于 11-02 15:55 1695次阅读
    基于<b class='flag-5'>CW32</b>的物联网应用