入門簡單、輕量好用,原來嵌入式開發(fā)大神們都這樣玩(嵌入式開發(fā)入門教程)

入門簡單、輕量好用,原來嵌入式開發(fā)大神們都這樣玩(嵌入式開發(fā)入門教程)
入門簡單、輕量好用,原來嵌入式開發(fā)大神們都這樣玩(嵌入式開發(fā)入門教程)入門簡單、輕量好用,原來嵌入式開發(fā)大神們都這樣玩(嵌入式開發(fā)入門教程)

從現(xiàn)實(shí)生活來看,使用嵌入式的產(chǎn)品比比皆是。譬如常使用的手機(jī)、平板電腦、智能家居、智能汽車、物聯(lián)網(wǎng)以及航天航空設(shè)備等。可以說,嵌入式系統(tǒng)的市場前景是相當(dāng)巨大的。 尤其是當(dāng)前隨著物聯(lián)網(wǎng)上升為國家戰(zhàn)略后,造芯片成為各類科技企業(yè)發(fā)展必修課之后,作為芯片的底層技術(shù)————嵌入式系統(tǒng)也漸漸從后臺(tái)走到前臺(tái)

實(shí)際上,目前存在多種嵌入式系統(tǒng)的定義,但是從比較廣泛且官方的說法來看:

“嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成 本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)?!?/span>

縱觀嵌入式系統(tǒng)的發(fā)展,至今已有30余年的歷史,但是這項(xiàng)系統(tǒng)并不只是包括為了解決特定問題而設(shè)計(jì)的硬件系統(tǒng),同時(shí)也有控制系統(tǒng)的軟件。從而,這對(duì)于嵌入式系統(tǒng)的開發(fā)人員而言,增添了新的挑戰(zhàn)。

首先對(duì)于嵌入式軟件的開發(fā)而言,主要的挑戰(zhàn)源自于嵌入式開發(fā)需要掌握底層「硬件」領(lǐng)域的知識(shí),一旦硬件的更改將會(huì)對(duì)軟件開發(fā)帶來重大影響。

此外,對(duì)于嵌入式的開發(fā)者而言,搞嵌入式系統(tǒng)的入門門檻較高,畢竟擁有軟硬結(jié)合的能力,遠(yuǎn)遠(yuǎn)比單純掌握某種程序開發(fā)語言更為艱難。

雖然入門困難,但是目前越來越多的開發(fā)者主動(dòng)將自己的嵌入式軟件開發(fā)開源出來了,分享給更多需要學(xué)習(xí)嵌入式的開發(fā)者們,從自己玩到大家一塊玩,既能讓更多的人使用開發(fā)者的開源軟件,了解學(xué)習(xí)并交流嵌入式開發(fā),從自己玩到大家一塊玩,同時(shí)還將軟件的價(jià)值最大化。

今天,我們就給大家介紹幾款入門簡單、輕量好用的嵌入式開源軟件開發(fā),讓大家共同學(xué)習(xí)、交流,一起豐富嵌入式開發(fā)的生態(tài)環(huán)境。


01 eventos-nano

開源許可證: MIT

項(xiàng)目作者: EventOS( EventOS 是一個(gè) RTOS 項(xiàng)目)

項(xiàng)目地址: eventos-nano

項(xiàng)目地址: https://gitee.com/event-os/eventos-nano

推薦原因: eventos-nano 是一個(gè)企業(yè)級(jí)的嵌入式開發(fā)框架。之所以叫 Nano ,是因?yàn)樗娴姆浅]p量。最低占用 ROM 1.5KB,RAM 172 字節(jié)。核心技術(shù)是事件總線,支持 Reactor 和狀態(tài)機(jī)兩種模式,協(xié)作式內(nèi)核,極度可靠。可深度裁剪,移植方便。

項(xiàng)目啟動(dòng)代碼: 除源碼外,只需要實(shí)現(xiàn)三個(gè)代碼,就可以使用EventOS Nano來編寫程序。

1. main.c main 函數(shù),初始化和啟動(dòng) EventOS Nano 。

/* include ------------------------------------------------------------------ */#include "eventos.h" // EventOS Nano頭文件#include "event_def.h" // 事件主題的枚舉#include "eos_led.h" // LED燈閃爍狀態(tài)機(jī)/* define ------------------------------------------------------------------- */static eos_u32_t eos_sub_table[Event_Max]; // 訂閱表數(shù)據(jù)空間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); // 事件池初始化 // 狀態(tài)機(jī)模塊的初始化 eos_led_init(); // LED狀態(tài)機(jī)初始化 // 啟動(dòng)EventOS Nano。 eos_run(); // EventOS啟動(dòng)并運(yùn)行 return 0;}

2. eos_port.c 如 EventOS 在特定平臺(tái)上的接口實(shí)現(xiàn),也就是 EventOS Nano 移植的相關(guān)代碼。

可前往在《 UM-02-002 EventOS Nano 移植文檔》查看詳細(xì)說明。

3. .ceos_led.c LED 的閃爍狀態(tài)機(jī)。LED燈閃爍,就是單片機(jī)界的 Hello World 。

/* include ------------------------------------------------------------------ */#include "eos_led.h" // 模塊頭文件#include "eventos.h" // EventOS頭文件#include "event_def.h" // 事件定義頭文件#include <stdio.h> // 標(biāo)準(zhǔn)輸入輸出庫/* 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對(duì)象,單例模式/* static state function ---------------------------------------------------- */// 初始狀態(tài)static eos_ret_t state_init(eos_led_t * const me, eos_event_t const * const e);// Led的ON狀態(tài)static eos_ret_t state_on(eos_led_t * const me, eos_event_t const * const e);// Led的Off狀態(tài)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]; // 事件隊(duì)列 eos_sm_init(&led.super, 1, queue, 32); // 狀態(tài)機(jī)初始化 // 狀態(tài)機(jī)啟動(dòng),以state_init作為初始狀態(tài)。 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就被發(fā)送一次。 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: // 狀態(tài)state_on的進(jìn)入事件 printf("State On!n"); me->status = 1; return EOS_Ret_Handled; case Event_Time_500ms: // 收到Event_Time_500ms,跳轉(zhuǎn)到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: // 狀態(tài)state_on的進(jìn)入事件 printf("State Off!n"); me->status = 0; return EOS_Ret_Handled; case Event_Time_500ms: // 收到Event_Time_500ms,跳轉(zhuǎn)到state_on return EOS_TRAN(state_on); default: return EOS_SUPER(eos_state_top); }}

02 Klite

開源許可證: MIT

項(xiàng)目作者: jiangxiaogang

項(xiàng)目地址: https://gitee.com/kerndev/klite

項(xiàng)目簡介: KLite 的定位是一款入門級(jí)的嵌入式實(shí)時(shí)操作系統(tǒng)內(nèi)核,以簡潔易用為設(shè)計(jì)目標(biāo),旨在降低嵌入式 RTOS 的入門難度。

項(xiàng)目操作準(zhǔn)備:

//只需要包含這一個(gè)頭文件#include "kernel.h"//用于初始化應(yīng)用程序的線程void init(void *arg){ //在這里完成外設(shè)和驅(qū)動(dòng)初始化 //并創(chuàng)建更多線程實(shí)現(xiàn)不同的功能 //thread_create(...)}//空閑線程,只需調(diào)用kernel_idle即可void idle(void *arg){ kernel_idle();}//C語言程序入口void main(void){ static uint8_t heap[HEAP_SIZE]; /* 定義堆內(nèi)存 */ kernel_init(heap, sizeof(heap)); /* 系統(tǒng)初始化 */ thread_create(idle, 0, 0); /* 創(chuàng)建idle線程 */ thread_create(init, 0, 0); /* 創(chuàng)建init線程 */ kernel_start(); /* 啟動(dòng)系統(tǒng) */}

03 GuiLite

開源許可證: Apache-2.0

項(xiàng)目作者: idea4good

項(xiàng)目地址: https://gitee.com/idea4good/GuiLite

推薦原因: GuiLite 是一款能運(yùn)行在“ Docker ”上的輕量嵌入式UI框架,僅 4 千行 C 代碼, 0 依賴,單一頭文件庫( GuiLite.h ),單片機(jī)上也能流暢運(yùn)行。

項(xiàng)目圖層管理:

入門簡單、輕量好用,原來嵌入式開發(fā)大神們都這樣玩(嵌入式開發(fā)入門教程)入門簡單、輕量好用,原來嵌入式開發(fā)大神們都這樣玩(嵌入式開發(fā)入門教程)

04 python-simple-http-server

開源許可證: MIT

項(xiàng)目作者: keijack

項(xiàng)目地址: https://gitee.com/keijack/python-simple-http-server

推薦原因: python-simple-http-server 是一個(gè)超輕量級(jí)的 HTTP Server,支持嵌入到 WSGI 標(biāo)準(zhǔn)中。

如何啟動(dòng)服務(wù)器:

import simple_http_server.server as server# 如果你的控制器代碼(處理請(qǐng)求的函數(shù))放在別的文件中,那么在你的 main.py 中,你必須將他都 import 進(jìn)來。import my_test_ctrldef main(*args): # 除了 import 外,還可以通過 scan 方法批量加載 controller 文件。 server.scan("my_ctr_pkg", r".*controller.*") server.start()if __name__ == "__main__": main()

05 xboot

開源許可證: MIT

項(xiàng)目作者: xboot

項(xiàng)目地址: https://gitee.com/xboot/xboot

推薦原因: xboot 是一款功能強(qiáng)大、可移植性強(qiáng)、代碼復(fù)用率高的嵌入式系統(tǒng) bootloader ,只需編寫一次,即可在任何地方運(yùn)行。

項(xiàng)目演示:

入門簡單、輕量好用,原來嵌入式開發(fā)大神們都這樣玩(嵌入式開發(fā)入門教程)

06 nutzboot

開源許可證: Apache-2.0

項(xiàng)目作者: Nutz

項(xiàng)目地址: https://gitee.com/nutz/nutzboot

推薦原因: nutzboot 是一款開放的企業(yè)級(jí)微服務(wù)框架,提供自動(dòng)配置,嵌入式web服務(wù)。

項(xiàng)目演示:

入門簡單、輕量好用,原來嵌入式開發(fā)大神們都這樣玩(嵌入式開發(fā)入門教程)

入門簡單、輕量好用,原來嵌入式開發(fā)大神們都這樣玩(嵌入式開發(fā)入門教程)

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁
返回頂部