嵌入式开发常用开源库及工具汇总

嵌入式开发常用开源库及工具汇总 阿帅 2024-01-25 15:25:59 2505

文章目录

基库

TBOX

TBOX 是一个用c语言实现的跨平台开发库。针对各个平台,封装了统一的接口,简化了各类开发过程中常用操作,使你在开发过程中,更加关注实际应用的开发,而不是把时间浪费在琐碎的接口兼容性上面,并且充分利用了各个平台特有的一些特性进行优化。这个项目的目的,是为了使C开发更加的简单高效。
项目主页:https://github.com/tboox/tbox/
TBOX 目前支持的平台有: Windows, Macosx, Linux, Android, iOS, *BSD等等。

sc-master

类似TBOX
Gear-Lib-适用于IOT/嵌入式/网络服务开发的C基础库
Gear-Lib是一个适用于IOT/嵌入式/网络服务开发的C基础库。软件全部用POSIX C实现,目标是为了跨平台兼容Linux, Windows, Android, iOS。
项目主页:https://github.com/gozfree/gear-lib
目前Gear-Lib中实现了涵盖数据结构、网络库、异步、I/O、多媒体、系统抽象层等方向共34个库。
包含librtsp

SDS

Simple Dynamic Strings (简称 SDS) 是一个 C 语言字符串库,旨在通过添加堆分配的字符串来增强有限的libc字符串处理功能。
项目主页:https://github.com/antirez/sds
SDS设计中没有使用C结构来表示字符串,而是使用存储在SDS返回给用户的字符串的实际指针之前的二进制前缀。
它的原理是sdsnew出来的字符串中包括了一个字符串header信息,来存储诸如长度之类的信息,来避免内存操作异常。
sds中的接口,操作的必须是通过sdsnew出来的字符串。

系统

FreeRTOS

优点:相比linux更轻;相比单片机开发模式,拥有多任务调度、文件系统,提高开发效率;相比其他实时操作系统,freertos开源免费。
参考资料:https://mp.weixin.qq.com/s/vsxjGTE5RiyXKzYOsR80qA【FreeRTOS基础与应用,入门必看】
Open-CMSIS-Pack - 简化物联网工作流和生命周期管理框架
Open-CMSIS-Pack 项目将提供集成和管理软件组件的基础设施,并改善嵌入式和物联网项目之间的代码重用。该项目目前作为一个孵化项目由Linaro与Arm、NXP和ST合作主持和管理。

组件重用的软件兼容性长期以来一直是微控制器领域的一个挑战,特别是对于物联网来说,与PC或数据中心相比,物联网在硬件层面上更加多样化。Open-CMSIS-Pack将消除这种复杂性,为软件组件打包提供一个标准,并为验证、分发、集成、管理和维护提供相关的基础工具。
项目地址:https://www.open-cmsis-pack.org/

rv-main

600行写的RISC-V内核
用它来学习risc-v内核非常不错
项目地址:https://github.com/mnurzia/rv

测试

gcov

gcov 全称 GCC Coverage,是一个测试代码覆盖率的工具,命令行方式的控制台程序,伴随GCC发布,配合GCC共同实现对C/C++文件的语句覆盖和分支覆盖测试;
工具地址:https://gcc.gnu.org/onlinedocs/gcc/Gcov.html
gcov 可以统计每一行代码的执行频率,实际上哪些代码确实被执行了,每一段代码(section code)的耗时(执行时间),因此,gcov可以帮你优化代码,当然这个优化动作还是应该由开发者完成。
gcov是gcc自带的一个功能,通过增加编译选项打开它
示例:
gcc -fprofile-arcs -ftest-coverage -g -O0 test.c
目录下将生成*.gcda
需安装lcov
sudo apt install lcov
在当前目录下执行:
lcov -c -d . -o test.info —rc lcov_branch_coverage=1
genhtml —branch-coverage -o result test.info

生成result目录下的index.html即为测试结果

数据存储

Ring-Buffer

Ring-Buffer 是特意为嵌入式系统精简优化的环形队列,源代码仅 80 行,实现简洁可靠。
项目地址:https://github.com/AndersKaloer/Ring-Buffer

IonDB

IonDB 专为 Arduino 和 IoT 提供开箱即用的,基于磁盘的快速存储功能,为受限系统提供键值存储功能,速度非常快,可以充分提升 Arduino 的性能。
项目主页:https://github.com/iondbproject/iondb
一般情况下,IonDB 支持:

  1. 存储一个键的任意值
  2. 重复键支持
  3. 范围和等值查询
  4. 基于硬盘的持久化数据存储

    FlashDB

    FlashDB 是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能及可靠性。并在保证极低的资源占用前提下,尽可能延长 Flash 使用寿命。
    项目地址:https://github.com/armink/FlashDB
    FlashDB 提供两种数据库模式:
  • 键值数据库 :是一种非关系数据库,它将数据存储为键值(Key-Value)对集合,其中键作为唯一标识符。KVDB 操作简洁,可扩展性强。
  • 时序数据库 :时间序列数据库 (Time Series Database , 简称 TSDB),它将数据按照 时间顺序存储 。TSDB 数据具有时间戳,数据存储量大,插入及查询性能高。
    FlashDB 主要特性如下:
  1. 资源占用极低,内存占用几乎为 0 ;
  2. 支持 多分区,多实例 。数据量大时,可细化分区,降低检索时间;
  3. 支持 磨损平衡 ,延长 Flash 寿命;
  4. 支持 掉电保护 功能,可靠性高;
  5. 支持 字符串及 blob 两种 KV 类型,方便用户操作;
  6. 支持 KV 增量升级 ,产品固件升级后, KVDB 内容也支持自动升级;
  7. 支持 修改每条 TSDB 记录的状态,方便用户进行管理;

实际测试发现,数据库插入、读取元素非常慢
100条数据:插入、读取均12秒左右

cjson

JSON是一种轻量级的数据交换格式,可以把JSON的结构理解成无序的、可嵌套的key-value键值对集合,这些key-value键值对以结构体或数组的形式来组织的。cJSON是C语言写的一个JSON解析库。
项目主页: https://github.com/DaveGamble/cJSON

jsmn

号称世界上最快的JSON解析器/标记器。jsmn 是基于 C 语言的一个极简的 JSON 解析器,它可以很容易地集成到资源有限或嵌入式项目中。大多数 JSON 解析器提供了一系列函数来加载 JSON 数据、解析数据并根据其名称提取任何值。jsmn 证明了检查每个 JSON 包的正确性或分配临时对象来存储解析的 JSON 字段通常是一种过度的做法。
项目地址:https://github.com/zserge/jsmn
libinimini - 适用单片机的 ini 极简解析库
市面上大多数 ini 解析库几乎都涉及到了 fopen()/fgets().. 以及 malloc(),所以主要适用于 linux 系统。libinimini 是一个非常简单的 ini 配置文件解析库,适用于 RTOS 或裸跑的单片机。
项目地址:https://github.com/lovemengx/libinimini
libinimini 具有以下几种特点:

  1. 内存空间占用可控,libinimini 只使用用户指定的一段内存空间进行解析和返回结果。
  2. 不关心数据的来源,libinimini 通过回调用户的接口获取每一行文本,不关心文本来自文件还是其它通信接口。
  3. 使用方便简单易上手,用户只需实现以行为单位的文本数据回调接口,之后只需等待 libinimini 解析结果即可。

    加解密

    wolfssl

    wolfSSL 是一个基于C语言的轻量级 SSL/TLS 库,专门针对嵌入式和 RTOS 环境,主打特点是体积小,速度快,功能集。
    https://github.com/wolfSSL/wolfssl

    mbedTLS

    mbedTLS 原名 PolarSSL,是一个开源、可移植、易于使用、代码可读性高的SSL库。
    项目主页:https://github.com/ARMmbed/mbedtls
    mbedTLS 可实现常用的加密/解密算法,X.509 证书操作以及 TLS/DTLS 协议。它的各个功能模块相对独立、耦合低,可以通过配置宏定义裁剪,非常适合用于嵌入式系统。mbedTLS 目前由 TrustedFirmware 维护。

    解压缩

    heatshrink

    heatshrink 是基于 LZSS 的小型压缩库,声称使用 50-300 字节的内存可以很好地运行。支持压缩和解压,没有版权设置,随意使用。Flash需求方面,作者用avr-gcc测试,仅需1KB的空间
    项目地址:https://github.com/atomicobject/heatshrin

    音视频

    Opus - 高灵活度的开源音频编解码器

    Opus 是用 C 语言开发的一个高灵活度的音频编码器,针对 ARM、x86 有特殊优化。Opus 在各方面都有着明显优势,它同时支持语音与音乐的编码,融合了 SILK 编码方法和 CELT 编码方法。SILK 原本被用于 Skype 中,基于语音信号的线性预测分析(LPC),对音乐支持并不好。而 CELT 尽管适用于全带宽音频,但对低比特率语音的编码效率不高,所以两者在 Opus 中形成了互补。
    项目主页:https://www.opus-codec.org/
    Opus 特点包括:
  4. 比特率从 6kb/s 到 510 kb/s
  5. 采样率从 8kHz(窄带)到 48kHz(全频段)
  6. 帧大小从 2.5ms 到 60ms
  7. 支持恒定比特率(CBR)和可变比特率(VBR)
  8. 从窄带到全频带的音频带宽
  9. 支持语音和音乐
  10. 支持单声道和立体声
  11. 支持多达255个通道(多流帧)
  12. 动态可调比特率,音频带宽和帧大小
  13. 良好的稳健性和隐蔽性
  14. 浮点和定点实现

    TJpgDec

    为小型嵌入式系统高度优化的 JPEG 解码库。
    嵌入式项目里(尤其是视频相关)有时候经常需要跟 JPEG 格式打交道,关于 JPEG 解码最知名的莫过于 IJG 组织开发的 libjpeg 解码库,但是 libjpeg 主要针对 Linux 等大型 OS 平台开发的,而在嵌入式 MCU 平台下,TJpgDec 会更合适一点。

仿真工具

WOKWI

WOKWI 是一个很酷的支持Arduino、ESP32、树莓派Pico在线仿真学习的网站。
软件官网:https://wokwi.com/
WOKWI 网站特点如下:

  1. 完全免费
  2. 基于浏览器(无需安装,无需下载!)
  3. 支持多种板卡(UNO、Mega、Nano、ATtiny85、Franzzininho、Raspberry Pi Pico 等)
  4. 易于与他人共享项目(它只是一个链接,任何人都可以从其他位置打开项目)
  5. 支持多种传感器 - 湿度传感器、模拟和数字温度传感器、PIR传感器、运动传感器等
  6. 多种显示器 - OLED、LCD、数码管、智能LED等

    网络

    RIL

    RIL 是一款专门为嵌入式平台开发的无线通信模组(GSM/GPRS/CatM1/NB-Iot)管理软件。它与其它大型框架(例如Android RIL、Wince RIL)不同的是,它被设计成应用于资源受限物联网终端设备(单片机+无线模组的方案),并提供物联网通信所需的基本功能,包含网络注册、连接管理、短信收发及Socket通信。目前已支持EC21、BG96、 HL8518等模组,相关的应用也在持续更新中。
    项目主页:https://gitee.com/moluo-tech/ril
    RIL 基本特性包含:
  7. 包含网络注册、连接、短信收发及Socket通信管理等基本功能。
  8. 模组驱动使用插件化方式管理,同一个系统中能够挂载适配多个模组,并能够动态选择模组驱动程序。
  9. 通过简单的修改就能够适用于不同的RTOS平台。
  10. 内置多种情况下的异常处理机制,保证模组稳定运行。
  11. 内置常用组件,如带断点续传功能的HTTP文件下载、TFTP传输、MQTT等。

LwIP

LwIP 是瑞典计算机科学院(SICS)的 Adam Dunkels 开发的一个小型开源的 TCP/IP 协议栈。LwIP 的设计初衷是:用少量的资源消耗(RAM)实现一个较为完整的 TCP/IP 协议栈。
项目官网:http://savannah.nongnu.org/projects/lwip/
LwIP 有无操作系统的支持都可以运行,它只需十几 KB 的 RAM 和 40KB 左右的 ROM 就可以运行,这使得 LwIP 协议栈适合在低端的嵌入式系统中使用。
LwIP 具有主要特性如下:

  1. 支持 ARP 协议(以太网地址解析协议)。
  2. 支持 ICMP 协议(控制报文协议),用于网络的调试与维护。
  3. 支持 IGMP 协议(互联网组管理协议),可以实现多播数据的接收。
  4. 支持 UDP 协议(用户数据报协议)。
  5. 支持 TCP 协议(传输控制协议),包括阻塞控制、 RTT 估算、快速恢复和快速转发。
  6. 支持 PPP 协议(点对点通信协议) ,支持 PPPoE。
  7. 支持 DNS(域名解析)。
  8. 支持 DHCP 协议,动态分配 IP 地址。
  9. 支持 IP 协议,包括 IPv4、 IPv6 协议,支持 IP 分片与重装功能,多网络接口下的数据包转发。
  10. 支持 SNMP 协议(简单网络管理协议)。
  11. 支持 AUTOIP,自动 IP 地址配置。
  12. 提供专门的内部回调接口(Raw API),用于提高应用程序性能。
  13. 提供可选择的 Socket API、 NETCONN API (在多线程情况下使用) 。

    硬件工具

    advent-calendar-of-circuits-2020

    Gregory Davill 是来自澳大利亚的一个技术牛人,在开源硬件领域非常有名且活跃。他在2020年12月坚持每一天设计一个电路板,用 KiCad 完成电路设计到 PCB 的布局布线完成,这便是 advent-calendar-of-circuits-2020 项目。
    项目地址:https://github.com/gregdavill/advent-calendar-of-circuits-2020
    电子森林苏老师将这 31 个项目全部整理了出来,这对于正在学习、使用 KiCad 的工程师朋友一定很有帮助。
    全部项目:https://www.eetree.cn/doc/detail/2330

日志

EasyLogger

EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如:IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。
项目主页: https://github.com/armink/EasyLogger
EasyLogger 主要特性如下:

  1. 支持用户自定义输出方式(例如:终端、文件、数据库、串口、485、Flash…);
  2. 日志内容可包含级别、时间戳、线程信息、进程信息等;
  3. 日志输出被设计为线程安全的方式,并支持 异步输出 及 缓冲输出 模式;
  4. 支持多种操作系统(RT-Thread、UCOS、Linux、Windows…),也支持裸机平台;
  5. 日志支持 RAW格式 ,支持 hexdump ;
  6. 支持按 标签 、 级别 、 关键词 进行动态过滤;
  7. 各级别日志支持不同颜色显示;
  8. 扩展性强,支持以插件形式扩展新功能。

算法

TinyMaix - 面向单片机的超轻量级的神经网络推理库

TinyMaix 是专为低资源的单片机设计的 AI 神经网络推理框架,通常被称为 TinyML。TinyMaix 可以让你在任意单片机上运行轻量级深度学习模型。

  • 项目地址:https://github.com/sipeed/TinyMaix
    关键特性:
  • 核心代码少于400行(tm_layers.c+tm_model.c+arch_cpu.h), 代码段(.text)少于3KB
  • 低内存消耗,甚至Arduino ATmega328 (32KB Flash, 2KB Ram) 都能基于TinyMaix跑mnist(手写数字识别)
  • 支持INT8/FP32/FP16模型,实验性地支持FP8模型,支持keras h5或tflite模型转换
  • 支持多种芯片架构的专用指令优化: ARM SIMD/NEON/MVEI,RV32P, RV64V
  • 友好的用户接口,只需要load/run模型~
  • 支持全静态的内存配置(无需malloc)
  • MaixHub 在线模型训练支持、

    驱动

    mr-library-一个专为嵌入式系统设计的轻量级框架

    mr-library 是一个专为嵌入式系统设计的轻量级框架,模块化的软件架构充分考虑了嵌入式系统的资源和性能要求。通过提供标准化的设备管理等,极大地简化了嵌入式应用的开发难度,帮助开发者快速构建嵌入式应用程序。

设备框架 为开发者提供标准化的接口(open、close、ioctl、read、write),解耦应用程序与底层硬件驱动,使应用开发无需硬件驱动的实现细节。当硬件变动时,只需要适配底层驱动,上层应用可以无缝地迁移到新硬件上,大大提高了软硬件的可重用性和可扩展性。
项目地址:https://gitee.com/MacRsh/mr-library
c-periphery-在linux中用于外围设备访问的c库
c-periphery是一个小型 C 库,用于在用户空间 Linux 中进行 GPIO,LED,PWM,SPI,I2C,MMIO 和串行外围设备 I/O 接口访问。c-periphery 简化了本机 Linux API 并将其整合到这些接口。
c-periphery 在嵌入式 Linux 环境(包括 Raspberry Pi,BeagleBone 等平台)中可用于与外部外围设备接口。c-periphery 是可重入的,在标准C库和Linux之外没有任何依赖关系,可编译成静态库以方便与其他项目集成。
项目地址:https://github.com/vsergeev/c-periphery

Ethersweep - 开源以太网可控步进电机

Ethersweep 是 NEMA17 步进电机的电机控制器,可以从普通以太网网络来控制。我们可以从任何机器发送 UDP 消息来控制电机,也可以控制多个电机,因为每个电机从网络上的 DHCP 服务器获得一个 IP 地址。此外还可以将 End-stop 和 e-stop 连接到控制器。传感器数据,如编码器反馈,电压,运行和按钮状态也可以通过网络请求来请求。
项目地址:https://github.com/neumi/ethersweep

其他工具

SWIG - 将C/C++程序转换成其他高级编程语言

SWIG 能够将用 C 和 C++ 编写的程序转换成各种高级编程语言。包括常见的脚本语言,如 Javascript、Perl、PHP、Python、Tcl和Ruby。还支持非脚本语言,如 C#、D语言、Go语言、Java(包括Android)、Lua、OCaml、Octave、Scilab和 R。还支持一些解释和编译的Scheme实现(Guile、MzScheme/Racket)。
工具地址:https://www.swig.org/
SWIG 最常用于创建高级解释或编译的编程环境、用户界面,并作为测试和原型化 C/C++ 软件的工具。SWIG 通常用于解析 C/C++ 接口,并生成上述目标语言调用到 C/C++ 代码所需的“粘合代码”。SWIG 还可以以 XML 的形式导出其解析树。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
阿帅
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
关于作者
阿帅

阿帅

暂无个性签名~

原创21
阅读2.1w
收藏12
点赞33
评论0
打赏用户 0
我要创作
分享技术经验,可获取创作收益
分类专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
阿帅
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区