这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。
本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。
上期回顾 :《痞子衡嵌入式半月刊: 第 102 期》
历史上的今天:2012年7月1日,全球增加一秒,出现7:59:60
本期共 5 个项目,希望对你有帮助!
CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统(带 USB IP)的 USB 主从协议栈。
为了方便用户学习 USB 基本知识、枚举、驱动加载、IP 驱动,因此 CherryUSB 代码具备以下优点:
- 代码精简,逻辑简单,无复杂 C 语言语法
- 树状化编程,代码层层递进
- Class 驱动和 porting 驱动模板化、精简化
- API 分类清晰(从机:初始化、注册类、命令回调类、数据收发类;主机:初始化、查找类、数据收发类)
为了方便用户使用 USB 接口,考虑到用户学习过 uart 和 dma,因此 CherryUSB 设计的数据收发类接口具备以下优点:
- 等价于使用 uart tx dma/uart rx dma
- 收发长度没有限制,用户不需要关心 USB 分包过程(porting 驱动做分包过程)
考虑到 USB 性能问题,尽量达到 USB 硬件理论带宽,因此 CherryUSB 设计的数据收发类接口具备以下优点:
- Porting 驱动直接对接寄存器,无抽象层封装
- Memory zero copy
- IP 如果带 DMA 则使用 DMA 模式(DMA 带硬件分包功能)
- 长度无限制,方便对接硬件 DMA 并且发挥 DMA 的优势
- 分包功能在中断中处理
tslib 是嵌入式系统里用得最多的触摸屏校正算法库,其充分利用了矩阵的平移,旋转和缩放等运算。tslib 常用于对电阻触摸屏的功能调试,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。
cotParam 是一个参数管理框架代码,其功能就是统一管理软件中的各类系统数据参数。该参数管理并不涉及数据是如何储存的。因为有些系统数据并不需要储存起来,只需要进行管理而已。
cotParam 主要特点有:
1. 采用表驱动方式统一管理所有参数,包括缺省值、最小值和最大值等
2. 采用宏定义快速注册和添加参数进行管理
3. 支持基本类型参数和字符串参数
4. 支持序列化和反序列化,便于保存和读取校验
5. 可通过串口协议或其他协议调用接口修改参数
cotMenu 是一个降低了耦合性,完全独立的菜单框架,菜单显示风格和显示平台完全由自己根据需求设计,而菜单操作统一由菜单模块处理即可,提高程序的移植性。
cotMenu 主要特点有:
1. 采用链表方式实现多级菜单(通过配置选择采用动态分配或者数组实现)
2. 菜单框架作为独立模块,拒绝和按键模块、显示模块进行耦合
3. 在十分独立的情况下,也保证不受菜单的显示风格和显示平台影响,可自由选择设计显示风格和显示平台
4. 快捷菜单操作等
5. 可以采用表驱动的方式初始化菜单,提高代码的可读性
cotLed 是一个轻量级的LED控制软件框架,可以十分方便地控制LED的各种状态,甚至多个LED组合控制,如跑马灯等。
cotLed 主要特点有:
1. 移植方便,无需修改,只需要初始化提供读取相关IO 状态写入函数即可
2. 丰富的接口实现,
-- 可以实现单个LED亮灭、翻转、闪烁、呼吸灯、自定义(如多少秒快闪几次等)等多种要求的功能
-- 可以实现多个LED组合跑马灯、流水灯等功能
-- 同时支持上述模式的次数设置等
3. 代码量少,且代码注释丰富,风格统一,便于阅读和使用
4. 如果设置某个LED为呼吸灯模式,则需要保证 cotLed_Ctrl调用周期为1毫秒(优先级需要最高,或者定时器调度效果最好)
5. 非阻塞任务,因此裸机和操作系统都适用(操作系统下非线程安全,最好可以使用读写锁,如果没有读写锁则至少使用互斥锁)
文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。