首页 > 其他分享 >《痞子衡嵌入式半月刊》 第 103 期

《痞子衡嵌入式半月刊》 第 103 期

时间:2024-07-01 23:52:36浏览次数:16  
标签:菜单 LED USB 痞子 嵌入式 103 CherryUSB cot

痞子衡嵌入式半月刊: 第 103 期

这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。

本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。

上期回顾《痞子衡嵌入式半月刊: 第 102 期》

唠两句

历史上的今天:2012年7月1日,全球增加一秒,出现7:59:60

本期共 5 个项目,希望对你有帮助!

项目类

1、CherryUSB - 小而美的嵌入式USB主从协议栈

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 的优势
- 分包功能在中断中处理

2、tslib - 嵌入式中使用最广泛的电阻触摸屏校正算法库

tslib 是嵌入式系统里用得最多的触摸屏校正算法库,其充分利用了矩阵的平移,旋转和缩放等运算。tslib 常用于对电阻触摸屏的功能调试,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。

3、cotParam - 基于C语言的轻量级参数管理框架

cotParam 是一个参数管理框架代码,其功能就是统一管理软件中的各类系统数据参数。该参数管理并不涉及数据是如何储存的。因为有些系统数据并不需要储存起来,只需要进行管理而已。

cotParam 主要特点有:

1. 采用表驱动方式统一管理所有参数,包括缺省值、最小值和最大值等
2. 采用宏定义快速注册和添加参数进行管理
3. 支持基本类型参数和字符串参数
4. 支持序列化和反序列化,便于保存和读取校验
5. 可通过串口协议或其他协议调用接口修改参数

4、cotMenu - 轻量级多级菜单控制框架程序

cotMenu 是一个降低了耦合性,完全独立的菜单框架,菜单显示风格和显示平台完全由自己根据需求设计,而菜单操作统一由菜单模块处理即可,提高程序的移植性。

cotMenu 主要特点有:

1. 采用链表方式实现多级菜单(通过配置选择采用动态分配或者数组实现)
2. 菜单框架作为独立模块,拒绝和按键模块、显示模块进行耦合
3. 在十分独立的情况下,也保证不受菜单的显示风格和显示平台影响,可自由选择设计显示风格和显示平台
4. 快捷菜单操作等
5. 可以采用表驱动的方式初始化菜单,提高代码的可读性

5、cotLed - 轻量级LED控制模块

cotLed 是一个轻量级的LED控制软件框架,可以十分方便地控制LED的各种状态,甚至多个LED组合控制,如跑马灯等。

cotLed 主要特点有:

1. 移植方便,无需修改,只需要初始化提供读取相关IO 状态写入函数即可
2. 丰富的接口实现,
   -- 可以实现单个LED亮灭、翻转、闪烁、呼吸灯、自定义(如多少秒快闪几次等)等多种要求的功能
   -- 可以实现多个LED组合跑马灯、流水灯等功能
   -- 同时支持上述模式的次数设置等
3. 代码量少,且代码注释丰富,风格统一,便于阅读和使用
4. 如果设置某个LED为呼吸灯模式,则需要保证 cotLed_Ctrl调用周期为1毫秒(优先级需要最高,或者定时器调度效果最好)
5. 非阻塞任务,因此裸机和操作系统都适用(操作系统下非线程安全,最好可以使用读写锁,如果没有读写锁则至少使用互斥锁)

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

标签:菜单,LED,USB,痞子,嵌入式,103,CherryUSB,cot
From: https://www.cnblogs.com/henjay724/p/18279067

相关文章

  • 【嵌入式Linux】<总览> 多线程(更新中)
    文章目录前言一、多线程1.概述2.创建线程3.线程退出4.线程回收5.线程分离6.线程取消7.线程的ID比较二、线程同步1.概述2.互斥锁3.死锁4.读写锁5.条件变量6.信号量三、线程池前言记录学习多线程的知识重点与难点,若涉及版权问题请联系本人删除!......
  • 嵌入式Linux系统编程 — 5.5 sleep、usleep和nanosleep系统休眠函数
    目录1为什么需要休眠2 sleep、usleep和nanosleep函数2.1sleep函数2.2 usleep函数2.3 nanosleep函数3示例程序1为什么需要休眠有时需要将进程暂停或休眠一段时间,进入休眠状态之后,程序将暂停运行,直到休眠结束。以下是一些常见的休眠场景和作用:避免过载:在高......
  • 代码随想录算法训练营第50天 | 1143.最长公共子序列 、1035.不相交的线 、53. 最大子
    这几题都挺类似,都是求最长公共子序列,有些题目稍微变了下1143.最长公共子序列体会一下本题和718.最长重复子数组的区别视频讲解:https://www.bilibili.com/video/BV1ye4y1L7CQhttps://programmercarl.com/1143.最长公共子序列.html/***@param{string}text1*@param{......
  • 04_嵌入式软件架构
    目录嵌入式软件基础嵌入式软件分类设备驱动层引导加载程序设备驱动程序嵌入式操作系统嵌入式操作系统概述嵌入式实时操作系统多任务系统上下文切换机内自检微内核操作系统嵌入式软件基础嵌入式软件分类嵌入式软件是指应用在嵌入式计算机系统当中的各种软件,除......
  • Python+ESP嵌入式开发快速上手
    环境搭建MicroPython介绍MicroPython是一种精简版的Python编程语言,专门设计用于嵌入式系统和物联网(IoT)开发。它提供了一个Python3的子集,适用于资源受限的微控制器和单片机环境。MicroPython允许开发人员使用Python的简洁语法和强大功能来编写嵌入式系统的代码。以下是......
  • 嵌入式技术
    嵌入式微处理体系结构 冯诺依曼结构传统计算机采用冯诺依曼结构,也称普林斯顿结构。是一种将程序指令存储器和数据存储器合并在一起的存储结构。 冯诺依曼结构的计算机程序和数据共用一个存储空间,程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置。采用单一......
  • 嵌入式秋招面试中,一定要掌握的嵌入式c基础——关键字详解(1)
    哈喽,大家好,这里是自律鸽。正如标题所强调的,在嵌入式秋招面试中,被问到c语言相关知识的概率几乎达到了百分之百。我本人也在去年的秋招中深切体验了这一点。因此,我想与大家分享一些面试中常问的嵌入式c基础,这些也都是我在求职过程中积累的宝贵经验。关键字1、sizeof:经常被问到......
  • 肝了半个月,嵌入式技术栈大汇总出炉
    嵌入式是一门交叉学科,一个嵌入式电子产品(比如手机)从底层到上层,一般会涉及半导体芯片、电子电路、计算机、操作系统、多媒体等不同专业领域的知识,由于其碎片化的特点,**大多数入门学习者面临着:不知道学什么、怎么学的问题,因此本文我们对嵌入式不同技能进行分类和总结,让入......
  • 【嵌入式Linux】<总览> 文件IO
    文章目录前言一、文件IO常用函数1.open函数2.close函数3.write函数4.read函数5.dup函数6.dup2函数7.lseek函数8.fcntl函数二、文件读写细节1.换行符2.文件描述符3.errno和perror4.系统IO和用户IO5.Linux管理文件6.文件共享三、文件属性1.Lin......
  • 【漏洞挖掘】——103、Blind注入类型深入刨析(中)
    时间盲注使用场景没有True/False,也没有任何错误提示类信息,在这种情况下可以考虑通过时间线的长短来判断是否存在SQL注入,即基于时间的盲注!函数简介sleep():用于延迟IF(Condition,A,B):当Condition为TRUE时,返回A;当Condition为FALSE时,返回BBENCHMARK(count,expr):重复count......