惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
Stack Overflow Blog
Stack Overflow Blog
S
SegmentFault 最新的问题
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
U
Unit 42
GbyAI
GbyAI
B
Blog RSS Feed
博客园 - Franky
L
LangChain Blog
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 三生石上(FineUI控件)
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research

Gitee 官方博客

花几千块报志愿之前,先把这 7 个问题问清楚 Gitee 618 年中盛典开启:企业版新购最高送一年,PocketClaw 首次限时折扣 Gitee 成为首批「供应链安全号」成员单位,携手共建国产工业软件生态 七大赛道 TOP 10 公布!Gitee 年度开源项目评选结果正式揭晓 GLM-Image 上线模力方舟:首个国产芯片训练的多模态图像生成模型 「开源技术」正式纳入国家职教体系,Gitee 已为开源教育落地做好准备 Gitee 软件工厂:以密级管理为底座,构建符合国家保密资质的安全研发体系 Claude Code 的代码安全困境:插件机制齐全,却绕不开模型幻觉 北京中关村学院入驻 Gitee:打造 AI for Science 教学新范式 Gitee 移动软件工厂:突破网络限制的开发新模式 从依赖到可控:开源基础设施的国家命题 模力方舟 MCP Server 上线:在 Cursor 里玩 AI 生图+语音 【国内首家】 Gitee Repo 通过信通院《可信制品管理能力分级要求》先进级(最高级)评估 Gitee Repo 助力关键领域 DevSecOps落地:构建安全可控的制品管理体系 会翻译、懂产品、还能画头像:Gitee 智能三连上线! Gitee Pipe:关键领域 DevSecOps 的核心引擎 时代命题下的民营科技担当:从备份战略看 Gitee 的国家定位 没人喜欢写 README?Gitee:现在你不用写了 关键领域软件工厂的安全中枢:Gitee Scan 全面升级供应链检测能力 Gitee MCP 现已支持远程访问:无需本地部署,AI 助手即插即用 Gitee 企业版效能度量全面升级:构建可衡量、可洞察、可优化的研发体系 高标准+安全可控:关键领域研发为什么选择 Gitee Code? 河南农担 x Gitee:以数字化赋能「三农」信贷服务新范式 Gitee Test:驱动软件工厂DevSecOps 落地,保障关键领域安全稳定 马建仓 AI 助手全流程升级:更聪明的研发搭子,更专业的协作助手 从公益初心到商业化探索,开源中国助推中国开源生态之路 以知识管理赋能 DevSecOps,Gitee Wiki 加速关键领域软件自主演进 Gitee 企业版测试管理全面升级:流程更顺畅,交付更可靠 Gitee 企业版 AI 队友邀测开启:程序员的贴身助理来了 Gitee 构件治理实践:CBB 分布式管理助力软件工厂建设
入门简单、轻量好用的嵌入式开发开源项目
Gitee · 2022-03-17 · via Gitee 官方博客
入门简单、轻量好用的嵌入式开发开源项目-Gitee 官方博客
入门简单、轻量好用的嵌入式开发开源项目-Gitee 官方博客

前言

从现实生活来看,使用嵌入式的产品比比皆是。譬如常使用的手机、平板电脑、智能家居、智能汽车、物联网以及航天航空设备等。可以说,嵌入式系统的市场前景是相当巨大的。 尤其是当前随着物联网上升为国家战略后,造芯片成为各类科技企业发展必修课之后,作为芯片的底层技术————嵌入式系统也渐渐从后台走到前台

实际上,目前存在多种嵌入式系统的定义,但是从比较广泛且官方的说法来看:

嵌入式系统是什么?

“嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。”

纵观嵌入式系统的发展,至今已有30余年的历史,但是这项系统并不只是包括为了解决特定问题而设计的硬件系统,同时也有控制系统的软件。从而,这对于嵌入式系统的开发人员而言,增添了新的挑战。

首先对于嵌入式软件的开发而言,主要的挑战源自于嵌入式开发需要掌握底层「硬件」领域的知识,一旦硬件的更改将会对软件开发带来重大影响。

此外,对于嵌入式的开发者而言,搞嵌入式系统的入门门槛较高,毕竟拥有软硬结合的能力,远远比单纯掌握某种程序开发语言更为艰难。

虽然入门困难,但是目前越来越多的开发者主动将自己的嵌入式软件开发开源出来了,分享给更多需要学习嵌入式的开发者们,从自己玩到大家一块玩,既能让更多的人使用开发者的开源软件,了解学习并交流嵌入式开发,从自己玩到大家一块玩,同时还将软件的价值最大化。

今天,我们就给大家介绍几款入门简单、轻量好用的嵌入式开源软件开发,让大家共同学习、交流,一起丰富嵌入式开发的生态环境。


eventos-nano

开源许可证: MIT

项目作者: EventOS( EventOS 是一个 RTOS 项目)

项目地址: eventos-nano

项目地址: https://gitee.com/event-os/eventos-nano

推荐原因:  eventos-nano 是一个企业级的嵌入式开发框架。之所以叫 Nano ,是因为它真的非常轻量。最低占用 ROM 1.5KB,RAM 172 字节。核心技术是事件总线,支持 Reactor 和状态机两种模式,协作式内核,极度可靠。可深度裁剪,移植方便。

项目启动代码: 除源码外,只需要实现三个代码,就可以使用EventOS Nano来编写程序。

1. main.c main 函数,初始化和启动 EventOS Nano 。

/* include ------------------------------------------------------------------ */
#include "eventos.h"                                // EventOS Nano头文件
#include "event_def.h"                              // 事件主题的枚举
#include "eos_led.h"                                // LED灯闪烁状态机

/* define ------------------------------------------------------------------- */
static eos_u32_t eos_sub_table[Event_Max];          // 订阅表数据空间
static eos_u8_t eos_heap_memory[1024];              // 事件池空间

/* main function ------------------------------------------------------------ */
int main(void)
{
    // EventOS Nano的初始化
    eos_init();                                     // EventOS初始化
    eos_sub_init(eos_sub_table);                    // 订阅表初始化
    eos_event_pool_init(eos_heap_memory, 1024);     // 事件池初始化

    // 状态机模块的初始化
    eos_led_init();                                 // LED状态机初始化

    // 启动EventOS Nano。
    eos_run();                                      // EventOS启动并运行

    return 0;
}

2. eos_port.c 如 EventOS 在特定平台上的接口实现,也就是 EventOS Nano 移植的相关代码。

可前往在《 UM-02-002 EventOS Nano 移植文档》查看详细说明。

3. .ceos_led.c LED 的闪烁状态机。LED灯闪烁,就是单片机界的 Hello World 。

/* include ------------------------------------------------------------------ */
#include "eos_led.h"                    // 模块头文件
#include "eventos.h"                    // EventOS头文件
#include "event_def.h"                  // 事件定义头文件
#include <stdio.h>                      // 标准输入输出库

/* data structure ----------------------------------------------------------- */
typedef struct eos_led_tag {            // LED类
    eos_sm_t super;

    eos_bool_t status;
} eos_led_t;

static eos_led_t led;                   // led对象,单例模式

/* static state function ---------------------------------------------------- */
// 初始状态
static eos_ret_t state_init(eos_led_t * const me, eos_event_t const * const e);
// Led的ON状态
static eos_ret_t state_on(eos_led_t * const me, eos_event_t const * const e);
// Led的Off状态
static eos_ret_t state_off(eos_led_t * const me, eos_event_t const * const e);

/* api ---------------------------------------------------- */
void eos_led_init(void)
{
    static eos_u32_t queue[32];                 // 事件队列
    eos_sm_init(&led.super, 1, queue, 32);      // 状态机初始化
                                                // 状态机启动,以state_init作为初始状态。
    eos_sm_start(&led.super, EOS_STATE_CAST(state_init));

    led.status = 0;
}

/* static state function ---------------------------------------------------- */
static eos_ret_t state_init(eos_led_t * const me, eos_event_t const * const e)
{
    // 订阅事件Event_Time_500ms
    EOS_EVENT_SUB(Event_Time_500ms);
    // 使事件Event_Time_500ms,每隔500ms就被发送一次。
    eos_event_pub_period(Event_Time_500ms, 500);

    return EOS_TRAN(state_off);
}

static eos_ret_t state_on(eos_led_t * const me, eos_event_t const * const e)
{
    switch (e->topic) {
        case Event_Enter:                           // 状态state_on的进入事件
            printf("State On!\n");
            me->status = 1;
            return EOS_Ret_Handled;

        case Event_Time_500ms:                      // 收到Event_Time_500ms,跳转到state_off
            return EOS_TRAN(state_off);

        default:
            return EOS_SUPER(eos_state_top);
    }
}

static eos_ret_t state_off(eos_led_t * const me, eos_event_t const * const e)
{
    switch (e->topic) {
        case Event_Enter:                           // 状态state_on的进入事件
            printf("State Off!\n");
            me->status = 0;
            return EOS_Ret_Handled;

        case Event_Time_500ms:                      // 收到Event_Time_500ms,跳转到state_on
            return EOS_TRAN(state_on);

        default:
            return EOS_SUPER(eos_state_top);
    }
}

klite

开源许可证: MIT

项目作者: jiangxiaogang

项目地址: https://gitee.com/kerndev/klite

项目简介: KLite 的定位是一款入门级的嵌入式实时操作系统内核,以简洁易用为设计目标,旨在降低嵌入式 RTOS 的入门难度。

项目操作准备:

//只需要包含这一个头文件
#include "kernel.h"

//用于初始化应用程序的线程
void init(void *arg)
{
	//在这里完成外设和驱动初始化
	//并创建更多线程实现不同的功能
	//thread_create(...)
}

//空闲线程,只需调用kernel_idle即可
void idle(void *arg)
{
	kernel_idle();
}

//C语言程序入口
void main(void)
{
	static uint8_t heap[HEAP_SIZE]; /* 定义堆内存 */
	kernel_init(heap, sizeof(heap)); /* 系统初始化 */
	thread_create(idle, 0, 0); /* 创建idle线程 */
	thread_create(init, 0, 0); /* 创建init线程 */
	kernel_start(); /* 启动系统 */
}

GuiLite

开源许可证: Apache-2.0

项目作者: idea4good

项目地址: https://gitee.com/idea4good/GuiLite

推荐原因: GuiLite 是一款能运行在“ Docker ”上的轻量嵌入式UI框架,仅 4 千行 C++ 代码, 0 依赖,单一头文件库( GuiLite.h ),单片机上也能流畅运行。

项目图层管理:

入门简单、轻量好用的嵌入式开发开源项目-Gitee 官方博客
入门简单、轻量好用的嵌入式开发开源项目-Gitee 官方博客

python-simple-http-server

开源许可证: MIT

项目作者: keijack

项目地址: https://gitee.com/keijack/python-simple-http-server

推荐原因: python-simple-http-server 是一个超轻量级的 HTTP Server,支持嵌入到 WSGI 标准中。

如何启动服务器:


import simple_http_server.server as server
# 如果你的控制器代码(处理请求的函数)放在别的文件中,那么在你的 main.py 中,你必须将他都 import 进来。
import my_test_ctrl


def main(*args):
    # 除了 import 外,还可以通过 scan 方法批量加载 controller 文件。
    server.scan("my_ctr_pkg", r".*controller.*")
    server.start()

if __name__ == "__main__":
    main()

xboot

开源许可证: MIT

项目作者: xboot

项目地址: https://gitee.com/xboot/xboot

推荐原因: xboot 是一款功能强大、可移植性强、代码复用率高的嵌入式系统 bootloader ,只需编写一次,即可在任何地方运行。

项目演示:

入门简单、轻量好用的嵌入式开发开源项目-Gitee 官方博客

nutzboot

开源许可证: Apache-2.0

项目作者: Nutz

项目地址: https://gitee.com/nutz/nutzboot

推荐原因: nutzboot 是一款开放的企业级微服务框架,提供自动配置,嵌入式web服务。

项目演示:

入门简单、轻量好用的嵌入式开发开源项目-Gitee 官方博客

入门简单、轻量好用的嵌入式开发开源项目-Gitee 官方博客