嵌入式开发常用开源库及工具汇总
文章目录
基库
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 支持:
- 存储一个键的任意值
- 重复键支持
- 范围和等值查询
- 基于硬盘的持久化数据存储
FlashDB
FlashDB 是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能及可靠性。并在保证极低的资源占用前提下,尽可能延长 Flash 使用寿命。
项目地址:https://github.com/armink/FlashDB
FlashDB 提供两种数据库模式:
- 键值数据库 :是一种非关系数据库,它将数据存储为键值(Key-Value)对集合,其中键作为唯一标识符。KVDB 操作简洁,可扩展性强。
- 时序数据库 :时间序列数据库 (Time Series Database , 简称 TSDB),它将数据按照 时间顺序存储 。TSDB 数据具有时间戳,数据存储量大,插入及查询性能高。
FlashDB 主要特性如下:
- 资源占用极低,内存占用几乎为 0 ;
- 支持 多分区,多实例 。数据量大时,可细化分区,降低检索时间;
- 支持 磨损平衡 ,延长 Flash 寿命;
- 支持 掉电保护 功能,可靠性高;
- 支持 字符串及 blob 两种 KV 类型,方便用户操作;
- 支持 KV 增量升级 ,产品固件升级后, KVDB 内容也支持自动升级;
- 支持 修改每条 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 具有以下几种特点:
- 内存空间占用可控,libinimini 只使用用户指定的一段内存空间进行解析和返回结果。
- 不关心数据的来源,libinimini 通过回调用户的接口获取每一行文本,不关心文本来自文件还是其它通信接口。
- 使用方便简单易上手,用户只需实现以行为单位的文本数据回调接口,之后只需等待 libinimini 解析结果即可。
加解密
wolfssl
wolfSSL 是一个基于C语言的轻量级 SSL/TLS 库,专门针对嵌入式和 RTOS 环境,主打特点是体积小,速度快,功能集。
https://github.com/wolfSSL/wolfsslmbedTLS
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 特点包括: - 比特率从 6kb/s 到 510 kb/s
- 采样率从 8kHz(窄带)到 48kHz(全频段)
- 帧大小从 2.5ms 到 60ms
- 支持恒定比特率(CBR)和可变比特率(VBR)
- 从窄带到全频带的音频带宽
- 支持语音和音乐
- 支持单声道和立体声
- 支持多达255个通道(多流帧)
- 动态可调比特率,音频带宽和帧大小
- 良好的稳健性和隐蔽性
- 浮点和定点实现
TJpgDec
为小型嵌入式系统高度优化的 JPEG 解码库。
嵌入式项目里(尤其是视频相关)有时候经常需要跟 JPEG 格式打交道,关于 JPEG 解码最知名的莫过于 IJG 组织开发的 libjpeg 解码库,但是 libjpeg 主要针对 Linux 等大型 OS 平台开发的,而在嵌入式 MCU 平台下,TJpgDec 会更合适一点。
仿真工具
WOKWI
WOKWI 是一个很酷的支持Arduino、ESP32、树莓派Pico在线仿真学习的网站。
软件官网:https://wokwi.com/
WOKWI 网站特点如下:
- 完全免费
- 基于浏览器(无需安装,无需下载!)
- 支持多种板卡(UNO、Mega、Nano、ATtiny85、Franzzininho、Raspberry Pi Pico 等)
- 易于与他人共享项目(它只是一个链接,任何人都可以从其他位置打开项目)
- 支持多种传感器 - 湿度传感器、模拟和数字温度传感器、PIR传感器、运动传感器等
- 多种显示器 - 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 基本特性包含: - 包含网络注册、连接、短信收发及Socket通信管理等基本功能。
- 模组驱动使用插件化方式管理,同一个系统中能够挂载适配多个模组,并能够动态选择模组驱动程序。
- 通过简单的修改就能够适用于不同的RTOS平台。
- 内置多种情况下的异常处理机制,保证模组稳定运行。
- 内置常用组件,如带断点续传功能的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 具有主要特性如下:
- 支持 ARP 协议(以太网地址解析协议)。
- 支持 ICMP 协议(控制报文协议),用于网络的调试与维护。
- 支持 IGMP 协议(互联网组管理协议),可以实现多播数据的接收。
- 支持 UDP 协议(用户数据报协议)。
- 支持 TCP 协议(传输控制协议),包括阻塞控制、 RTT 估算、快速恢复和快速转发。
- 支持 PPP 协议(点对点通信协议) ,支持 PPPoE。
- 支持 DNS(域名解析)。
- 支持 DHCP 协议,动态分配 IP 地址。
- 支持 IP 协议,包括 IPv4、 IPv6 协议,支持 IP 分片与重装功能,多网络接口下的数据包转发。
- 支持 SNMP 协议(简单网络管理协议)。
- 支持 AUTOIP,自动 IP 地址配置。
- 提供专门的内部回调接口(Raw API),用于提高应用程序性能。
- 提供可选择的 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 主要特性如下:
- 支持用户自定义输出方式(例如:终端、文件、数据库、串口、485、Flash…);
- 日志内容可包含级别、时间戳、线程信息、进程信息等;
- 日志输出被设计为线程安全的方式,并支持 异步输出 及 缓冲输出 模式;
- 支持多种操作系统(RT-Thread、UCOS、Linux、Windows…),也支持裸机平台;
- 日志支持 RAW格式 ,支持 hexdump ;
- 支持按 标签 、 级别 、 关键词 进行动态过滤;
- 各级别日志支持不同颜色显示;
- 扩展性强,支持以插件形式扩展新功能。
算法
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 的形式导出其解析树。
- 分享
- 举报
-
浏览量:2985次2020-08-20 17:58:22
-
浏览量:1631次2020-08-19 16:43:27
-
浏览量:2413次2020-08-20 17:57:43
-
浏览量:2394次2020-08-19 16:46:46
-
浏览量:3803次2020-07-17 16:50:14
-
浏览量:385次2023-10-30 16:16:11
-
浏览量:2292次2020-08-17 18:01:42
-
浏览量:2058次2020-08-17 18:04:26
-
浏览量:1912次2020-08-19 16:45:18
-
浏览量:2144次2020-08-19 16:49:12
-
浏览量:2048次2020-08-17 18:06:38
-
浏览量:3258次2020-08-17 18:05:11
-
浏览量:1964次2020-08-20 18:01:22
-
浏览量:770次2023-12-25 15:42:30
-
浏览量:2362次2020-08-20 18:03:14
-
浏览量:891次2023-11-17 11:33:55
-
浏览量:699次2024-01-25 15:08:45
-
浏览量:775次2023-11-10 15:59:27
-
浏览量:3770次2020-08-19 16:34:45
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
阿帅
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明