電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 279|回復(fù): 0
收起左側(cè)

分享一套面向MCU的前后臺(tái)系統(tǒng)

[復(fù)制鏈接]

305

主題

305

帖子

2325

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

積分
2325
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-9-20 11:46:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容

來(lái)源 | 網(wǎng)絡(luò)

MCU如果裸機(jī)奔跑的話,可能在后期升級(jí)、維護(hù)就變得有點(diǎn)難。所以,一般建議要上要一個(gè)RTOS或者一套框架之類(lèi)的。

今天給大家分享一個(gè)面向MCU的小型前后臺(tái)系統(tǒng):JxOS
簡(jiǎn)介 JxOS面向MCU的小型前后臺(tái)系統(tǒng),提供消息、事件等服務(wù),以及軟件定時(shí)器,低功耗管理,按鍵,led等常用功能模塊。
在此基礎(chǔ)上實(shí)現(xiàn)了基于433的簡(jiǎn)單無(wú)線網(wǎng)絡(luò)功能。此項(xiàng)目的設(shè)計(jì)思想是:功能模塊與硬件高度解耦,提高代碼模塊的可復(fù)用性;不使用復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和語(yǔ)法以提高不同硬件平臺(tái)和編譯器之間的兼容性,實(shí)現(xiàn)工程在不同MCU之間的快速移植;提供實(shí)用穩(wěn)定常用的功能模塊,實(shí)現(xiàn)項(xiàng)目的快速開(kāi)發(fā);定義標(biāo)準(zhǔn)應(yīng)用開(kāi)發(fā)框架,減輕應(yīng)用開(kāi)發(fā)的工作量和難度。
已使用此系統(tǒng)用于開(kāi)發(fā)項(xiàng)目的硬件平臺(tái)有:N76E003、STM8S103K、PC、KF8TS2716
Software Architecture


JxOS
├───demo_code    參考代碼,未整理代碼

├───jxos     jxos
│   ├───bsp     過(guò)時(shí)分類(lèi),將逐步歸類(lèi)到 driver 和 lib 中
│   ├───kernel    內(nèi)核,提供系統(tǒng)內(nèi)核功能:任務(wù)、事件、消息、公告板、郵箱、管道、注冊(cè)、內(nèi)存分配……
│   ├───driver    使用 靜態(tài) 初始化的功能代碼模塊,使用config.h文件進(jìn)行配置;此目錄下的代碼大部分與硬件相關(guān),如:傳感器、按鍵掃描、屏幕…… (driver 與 lib 有時(shí)并沒(méi)有清晰的界限,如driver:led_blink 就有可能抽象成 lib:sw_pwm)
│   ├───lib     使用 動(dòng)態(tài) 初始化的功能代碼模塊,使用初始化函數(shù)進(jìn)行配置;此目錄下的模代碼大部分與硬件無(wú)關(guān),如:環(huán)形緩沖區(qū)、crc16、棧、軟件定時(shí)器……
│   ├───sys_service   基于任務(wù)實(shí)現(xiàn)的系統(tǒng)服務(wù),如:低功耗管理、軟件定時(shí)器、打印輸出……(只有對(duì)外接口,不發(fā)出對(duì)外消息)
│   └───std_app    基于任務(wù)實(shí)現(xiàn)的常用標(biāo)準(zhǔn)應(yīng)用,如獨(dú)立按鍵掃描、按鍵多次點(diǎn)擊、指示燈閃爍……(此類(lèi)模塊和user app屬于同一級(jí)別,只不過(guò)已經(jīng)標(biāo)準(zhǔn)化;此類(lèi)模塊發(fā)出對(duì)外消息,也有對(duì)外接口,用于兼容不能支持消息功能的硬件平臺(tái))

├───platform
│   ├───N76E003    ┐
│   ├───N76E003    ├───  基于 jxos 實(shí)現(xiàn)的,使用不同平臺(tái)硬件的具體項(xiàng)目
│   └───STM8S103K3 ┘

├───JSnet   ┐
├───....    ├───   基于 jxos 實(shí)現(xiàn)的功能模塊
└───SRTnet  ┘
kernel        提供系統(tǒng)內(nèi)核功能:任務(wù)、事件、消息、公告板、郵箱、管道、注冊(cè)、內(nèi)存分配……driver        使用 靜態(tài) 初始化的功能代碼模塊,使用config.h文件進(jìn)行配置;此目錄下的代碼大部分與硬件相關(guān),如:傳感器、按鍵掃描、屏幕…… (driver 與 lib 有時(shí)并沒(méi)有清晰的界限,如driver:led_blink 就有可能抽象成 lib:sw_pwm)lib           使用 動(dòng)態(tài) 初始化的功能代碼模塊,使用初始化函數(shù)進(jìn)行配置;此目錄下的模代碼大部分與硬件無(wú)關(guān),如:環(huán)形緩沖區(qū)、crc16、棧、軟件定時(shí)器……sys_service   基于任務(wù)實(shí)現(xiàn)的系統(tǒng)服務(wù),如:低功耗管理、軟件定時(shí)器、打印輸出……(只有對(duì)外接口,不發(fā)出對(duì)外消息)std_app       基于任務(wù)實(shí)現(xiàn)的常用標(biāo)準(zhǔn)應(yīng)用,如獨(dú)立按鍵掃描、按鍵多次點(diǎn)擊、指示燈閃爍…… (此類(lèi)模塊和user app屬于同一級(jí)別,只不過(guò)已經(jīng)標(biāo)準(zhǔn)化;此類(lèi)模塊發(fā)出對(duì)外消息,也有對(duì)外接口,用于兼容不能支持消息功能的硬件平臺(tái))platform           基于 jxos 實(shí)現(xiàn)的,使用不同平臺(tái)硬件的具體項(xiàng)目在某些編譯器環(huán)境下可能出現(xiàn)以某些限制(不支持函數(shù)指針,不支持中斷處理函數(shù)中調(diào)用其他函數(shù),不支持函數(shù)指針帶參數(shù),不支持結(jié)構(gòu)體),因此 std_app 提供的消息可能無(wú)法使用,作為補(bǔ)充std_app 也會(huì)同時(shí)提供全局變量來(lái)傳出信息和函數(shù)接口來(lái)傳入信息為提高代碼的兼容性;盡量不要使用函數(shù)指針為提高代碼的可復(fù)用性,std_app 中的功能盡量在 driver 和 lib 中實(shí)現(xiàn),std_app 中的代碼僅作為提供系統(tǒng)tick和統(tǒng)一對(duì)外接口的功能模塊和 std_app 可以提供多個(gè)不同實(shí)現(xiàn)方法的文件,但保持對(duì)外接口的統(tǒng)一對(duì)外提供兩套接口方案 jxos_public.h 提供高級(jí)接口(消息 事件等),jxos_public_lite.h 提供低級(jí)接口(全局變量, 函數(shù))[/ol]Instructions 導(dǎo)入 jxos_public.h 即可調(diào)用系統(tǒng)所有的對(duì)外接口每個(gè)項(xiàng)目通過(guò) jxos_init_config.c 和 jxos_config.h 對(duì)系統(tǒng)進(jìn)行配置,即每個(gè)項(xiàng)目有獨(dú)立配置文件在 jxos_init_config.c 實(shí)現(xiàn)需要硬件支持的系統(tǒng)模塊硬件初始化,以及用戶任務(wù)的初始化順序在 jxos_config.h 配置系統(tǒng)模塊的參數(shù)和使能event 用于任務(wù)內(nèi)部的信號(hào)同步,主要是將中斷信號(hào)傳遞到任務(wù)msg 用于任務(wù)之間的消息傳遞,使用 jxos_msg_get_handle 可通過(guò)消息名(字符串)獲取消息句柄[/ol]如何建立新項(xiàng)目:
獲取 Jxos 所有文件和目錄結(jié)構(gòu)
在 \platform 目錄下建立當(dāng)前工程的目錄(platform\芯片型號(hào)\工程命名\)
在 \工程名稱(chēng) 目錄下新建工程文件(keil、iar 等IDE的newproject)
在 \工程名稱(chēng) 目錄下新建 \config 目錄,增加 jxos_config.h type.h 系統(tǒng)配置文件
在 \config 目錄下增加工程用到的功能模塊的配置文件 (如 button_config.h sim_timer_config.h ...)
在 \工程名稱(chēng) 目錄下新建 \framework 目錄
在 \framework 目錄下增加 main.c ,實(shí)現(xiàn)main函數(shù),在main函數(shù)中調(diào)用jxos_run() ( void main(void) {jxos_run();} )
在 \framework 目錄下增加 isr.c ,實(shí)現(xiàn)工程需要的中斷處理函數(shù)
在 \framework 目錄下增加 callback_handler.c ,實(shí)現(xiàn)工程用到的功能模塊的callback函數(shù)
建議在 \工程名稱(chēng) 目錄下新建 \app 目錄,實(shí)現(xiàn)用戶功能任務(wù)
建議在 \芯片型號(hào) 目錄下增加芯片需要用到的庫(kù)文件目錄
在IDE的新工程中導(dǎo)入 jxos.c
在IDE的新工程中導(dǎo)入需要的Jxos模塊的文件(kernel、sys_service ...)
在IDE的新工程中導(dǎo)入 main.c, isr.c, callback_handler.c
在IDE的新工程中導(dǎo)入用戶任務(wù)文件 (\工程名稱(chēng)\app\)
在IDE的新工程中增加include目錄,包括:\joxs,\platform\芯片型號(hào)\工程命名\config
在IDE的新工程中增加其他的include目錄,如芯片庫(kù)文件的頭文件
按照框架實(shí)現(xiàn)用戶任務(wù)
如何配置與使用 kernel
如何配置與使用 sys_service
如何配置與使用 std_app
如何使用標(biāo)準(zhǔn)框架的 driver 模塊
如何使用標(biāo)準(zhǔn)框架的 lib 模塊
最后,附上開(kāi)源地址:
  • https://gitee.com/jeremyceng/JxOS/
    聲明:本文素材來(lái)源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問(wèn)題,請(qǐng)與我聯(lián)系刪除。----------- END ------------

    ●專(zhuān)欄《嵌入式工具●專(zhuān)欄《嵌入式開(kāi)發(fā)》●專(zhuān)欄《Keil教程》●嵌入式專(zhuān)欄精選教程
    關(guān)注公眾號(hào)回復(fù)“加群”按規(guī)則加入技術(shù)交流群,回復(fù)“1024”查看更多內(nèi)容。點(diǎn)擊“閱讀原文”查看更多分享。
  • 發(fā)表回復(fù)

    本版積分規(guī)則

    關(guān)閉

    站長(zhǎng)推薦上一條 /1 下一條


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表