想用代码实现一个功能时,我们可以先看看是否有前辈已经实现了该功能,并且开源分享在网上。一般我们自己造出来的轮子的可用性基本上是很难和大神们造的轮子相比的。
因此多了解一下优秀的开源库的使用,可以让我们编码的时候少走很多弯路。
之前我就做了一个系列博客,关于分享C、C++的开源库。文章如下:
【C语言开源库】在Clion上使用开源库cJSON
【C语言开源库】C语言必备实用第三方库Melon(包括数据结构算法)
【C语言开源库】C语言开源库zlog的使用
【C语言开源库】在CLion上使用一个轻量的适合嵌入式系统的环形缓冲库ring buffer 和C语言Unity单元测试框架
【C语言开源库】 一个只有500行代码的开源http服务器:Tinyhttpd
【C++开源库】Windows和linux下好用的串口通讯API库
很多其实都是浅尝辄止,但阅读使用这些开源库可以让我们学习优秀的编码习惯和编码方式,可以为我们用代码实现需求积累武器库。
本人最近在学习数据结构的课程,在过程中发现用C语言来实现各种数据结构类型的时候很难做到真正意义上的通用的数据结构,于是在网上搜罗了一些所谓的C语言通用数据结构库,在此也将这些数据结构库一一罗列,方便大家查找和使用。C语言没有像C++那样的STL库,语言本身并不是一种真正意义上的高级语言,实现项目中真正用到的算法中的C语言的数据结构也很少,要么是按照自己的需求来实现,要么一般都用C++来完成大型的项目工程,C++有现成的库来开发,可以缩短工程的时间和提高效率。但是C语言仍然保持在编程语言占有率的前列,这其实依赖于在底层系统级开发应用中扮演着不可替代的作用。最新的开发者编程语言的情况可以查看这篇文章:
http://www.infoq.com/cn/articles/stack-overflow-report
比较大型的C语言通用数据结构的库有(数据结构只是其中的一小部分):
Gnulib - The GNUPortability Library相关的链接:
http://www.gnu.org/software/gnulib/
2.ApachePortable Runtime (APR) project相关的链接:
http://apr.apache.org/
下面是一些相对比较小的C语言数据结构和算法的库
SGLIB - A Simple Generic Library for C 相关链接:http://sglib.sourceforge.net/
libcstl-2.3.0相关链接:http://libcstl.org/
GDSL - The Generic Data Structures Library 相关链接:
http://home.gna.org/gdsl/
http://www.manpagez.com/man/3/queue/ 这类数据结构通常封装在系统级的内核目录下,比如:sys/queue.h等。
鸿蒙OS:一款面向全场景的开源分布式操作系统。
RT-Thread:一款小而美的物联网操作系统。
TencentOS tiny:一款面向物联网领域开发的实时操作系统。
freertos:一个轻量级的操作系统。
µC/OS :一个功能齐全的嵌入式操作系统。
mbed-os :ARM自己打造、主打IoT的一整套软件解决方案 。
BabyOS:专为MCU项目开发提速的代码框架 。
LuatOS :LuatOS是运行在嵌入式硬件的实时操作系统,只需要少量内存的flash空间就能运行,用户编写lua代码就可完成各种功能。
Contiki-OS:一个小型的,开源的,极易移植的多任务操作系统。
DJYOS:都江堰操作系统。
klite :简洁易用的嵌入式操作系统内核。
lmosem :一个完全从第一行引导代码开始编写,基于ARM平台,支持多进程、多CPU、内存管理、文件与设备管理的全32位操作系统内核。
freenos:FreeNOS微内核操作系统。
cJSON:一个基于C语言的轻量级的JSON解析库。
jsmn:一个小巧的基于C语言的JSON解析库。
MultiTimer :一个软件定时器扩展模块。
MultiButton:一个小巧简单易用的事件驱动型按键驱动模块。
SmartTimer :一个轻量级的基于STM32的定时器调度器 。
CmBacktrace :一款针对 ARM Cortex-M 系列 MCU 的错误代码自动追踪库。
EasyLogger:一款超轻量级、高性能的 C/C++ 日志库。
EasyFlash:一款开源的轻量级嵌入式Flash存储器库 。
SFUD:一款开源的串行 SPI Flash 通用驱动库。
lw_oopc:轻量级的C语言面向对象编程框架。
PLOOC:受保护的低开销面向对象编程。
cmd-parser:一个非常简单好用的命令解析器。
mqttclient:一个省资源、高稳定的MQTT客户端。
NorthFrame :一个单片机极简图形化状态机框架 。
letter-shell:一个功能强大的嵌入式shell。
pigweed:谷歌开源的嵌入式目标库(模块)集合。
lwrb:一个轻量级通用环缓冲区管理器库。
cQueue :使用ANSI C 编写的消息队列功能函数。
Unity:一个轻量级的、适合嵌入式的测试框架。
Embedded Unit:是个纯标准c构建的单元测试框架。
CuTest :一款微小的C语言单元测试框, 全部代码加起来不到一千行。
cmockery:谷歌C单元测试框架。
googletest:谷歌C++测试框架。
znfat :振南fat,国产嵌入式文件系统方案 。
libu:一个C语言写的多平台工具库。
LWIP:一个小型开源的TCP/IP协议栈 。
SQLite :一个开源的嵌入式关系数据库。
OpenBLT:一种开源引导加载程序。
Linux Lab :Linux 内核实验室,基于 Docker/Qemu 的极速 Linux 内核学习、开发和测试环境。
airkissOpen :腾讯airkiss协议解析库 。
nr_micro_shell :shell for MCU,单片机命令行交互。
FlexibleButton:FlexibleButton 是一个基于标准 C 语言的小巧灵活的按键处理库。
mbedtls :一个开源、便携,易于使用,可读的和灵活的SSL库。
mosquitto或mosquitto(下载速度快):一个开源的MQTT代理。
inih:C 语言编写的 INI 文件解析器。
QP:QP实时嵌入式框架。
MS-RTOS:Micro Safe RTOS 。
protobuf-c:protobuf-c。
eepromfs:基于EEPROM的简易类文件的数据读写库 。
gear-lib :适用于IOT/嵌入式/网络服务开发的C库 。
mult_timer :一个Linux下的超级精简的多重定时器 。
EFSM :是一个基于事件驱动的有限状态机 。
GuiLite:大道至简 - 5千行/仅头文件/全平台GUI库 。
yoxios:基于Linux开发的轻量级物联网系统和硬件平台。
ToughGFX:一个C++编写的GUI软件框架 。
emwin:一个老牌GUI库。
littlevGL :一个免费的开源图形库。
野牛 LittlevGL demo:基于野牛开发板的 LittlevGL demo 程序 。
MonoGUI :一个黑白图形用户接口系统 。
MiniGUI:一个快速、稳定、跨操作系统的GUI。
QT:跨平台的应用程序和用户界面框架。
Gtk:一个用于创造图形用户接口的图形库。
AWTK:是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架 。
HomeAssistant :一款基于 Python 的智能家居开源系统。
Domoticz :一个开源的智能家居系统 。
Kaa IoT Platform:功能丰富的开放和高效的物联网云平台。
RT-Thread IoT SDK :基于RT-Thread IOT开发板的各类例程。
从零打造物联网:一份适合嵌入式开发人员学习的web开发教程。
qt_2019_ncov:基于Qt/C++实现的新冠肺炎疫情监控平台。
H7-TOOL_STM32H7_App :H7-TOOL 多功能开发工具。
DAPLink/CMSIS DAP:一个调试器, 集成下载、调试和USB虚拟串口。
mcush:MCU shell。
DoST:Linux 下开发 STM32 。
Crazepony:Crazepony开源四轴飞行器。
MiniQ :一个迷你四轴飞行器。
LiPow-Firmware:基于STM32G0采用USB type-C供电的开源锂电池充电器。
Avem:一个轻量级无人机飞控。
SoftWareSerial:一个STM32 IO口模拟实现软件串口程序。
串口ISP程序:一个stm32串口ISP程序。
DSO_Nano :一个手持示波器。
DSView:一个跨平台的逻辑分析仪。
MCU-Development:基于51、430、STM32F10X、STM32F407X、T4MC123G平台的各常见硬件模块demo。
Arduino :开源电子原型平台。
EWAHBoolArray:bitmap算法。
100ask download:百文网资料下载中心。
armfly:安富莱/硬汉嵌入式论坛。
fire download:野火资料下载中心。
openedv download:正点原子资料下载中心。
野火:野火电子论坛。
正点:正点原子论坛。
ST:ST中文社区。
NXP社区:恩智浦论坛。
Linux:Linux内核官网。
Linux源码:可在线阅读Linux内核源码。
Buildroot:buildroot源码。
Debian:Debian官网。
Ubuntu:Ubuntu官网。
荔枝派:荔枝派指南。
清华镜像站:清华大学开源软件镜像站。
中科大镜像站:中国科技大学镜像站。
u-boot:u-boot源码下载页面。
bear-pi:小熊派demo。
宅学部落:一个Linux、编程语言、内核、驱动开发学习网站。
单片机教程网:单片机基础、设计实例、论坛。
GNU:GNU官网。
ChinaUnix:Linux/Unix相关。
PyQt5:PyQt5教程。
qter:QT开源社区。
git手册:git学习手册。
开源项目风格:Google 开源项目风格指南 (中文版)。
电子世家:一个电子类导航网站。
21ic:21IC中国电子网。
芯路恒电子:小梅哥博客、FPGA论坛。
嵌入式开发者社区:创龙论坛。
micropython:micropython中文网。
泰晓科技:Linux相关。
电堂科技:STM32相关。
源代码使用示例聚合器:从超过100万个开源项目搜索CPP代码示例。
KST-51 :《手把手教你学51单片机》 。
原子哥:专注电子技术教学。。
digoboy:地瓜派视频网。
c.biancheng:C语言中文网。
open-c-book :《C语言编程透视》。
PyQt5:PyQt5在线教程。
open-shell-book:《Shell 编程范例》 。
software_unit_test:《软件单元测试入门与实践》。
kerneltravel:Linux内核之旅。
蜗窝科技:慢下来,享受技术。
bookstack:书栈网。
wireshark:抓包工具下载链接。
MobaXterm:一个好用的终端软件。
Stduino:一款面向32位处理器快速入门学习的集成开发平台 。