Gitee 官方博客
  • 产品动态
  • 企业案例
  • 项目推荐
  • 关于开源
  • 发现更多
  • 回到 Gitee
  • 产品动态
  • 企业案例
  • 项目推荐
  • 关于开源
  • 发现更多
  • 回到 Gitee

入门简单、轻量好用的嵌入式开发开源项目

Gitee
1年前发布在 项目推荐
入门简单、轻量好用的嵌入式开发开源项目-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 官方博客
Gitee开源项目

本文系作者 @Gitee 原创发布在 Gitee 官方博客。未经许可,禁止转载。

关于纸质专用发票暂停邮寄的通知
上一篇
热门开源Web开发框架推荐
下一篇
近期文章
  • 金融人怎么写出安全可靠的代码?知名证券企业这样做
  • 16家单位、2万名研发,金融科技领头羊如何集中统一代码管理?
  • 《Gitee 专业版白皮书》重磅发布,助力企业实现高效、快捷交付
  • Gitee x 未来物联:高效能产研团队是怎样炼成的?
  • 《2022 中国开源开发者报告》正式发布!
  • 开工福利:领取新人专属多重福利
  • 点击查看2022年你与Gitee的记忆
  • 我们让 ChatGPT 写了一篇开源项目推荐
  • Gitee 自动化全新上线,让提效融入每处细节
  • Gitee Scan 四大升级,助力企业完美实现质量左移
相关文章
16家单位、2万名研发,金融科技领头羊如何集中统一代码管理?
《Gitee 专业版白皮书》重磅发布,助力企业实现高效、快捷交付
我们让 ChatGPT 写了一篇开源项目推荐
Gitee Go武器库再添猛将,开源漏洞扫描也能自动化
关于我们

Gitee(gitee.com)是 OSCHINA.NET 推出的代码托管·协作开发平台,支持 Git 和 SVN,提供免费的私有仓库托管。目前已有超过 800 万的开发者选择 Gitee。

品牌内容
开源软件 GVP计划 Gitee 封面人物 CopyCat 代码克隆检测
友情链接
开源中国 Gitee Gitee 高校版 Gitee 企业版
Copyright © 2023 Gitee 官方博客. Designed by nicetheme.
  • 产品动态
  • 企业案例
  • 项目推荐
  • 关于开源
  • 发现更多
  • 回到 Gitee
热门搜索
  • Gitee
  • gitee 企业版
  • 码云
  • 开源项目
  • 码云Gitee
  • GVP
  • Git
  • 开源
  • 码云企业版
  • 码云周刊
  • 码云 gitee
  • gitee企业版
  • 内源
  • 内部开源
  • innersource
  • DevOps
  • 小程序
  • 企业版
Gitee
Top