|
關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過精彩內(nèi)容
s30f4qnxiyl64031646652.gif (429.76 KB, 下載次數(shù): 10)
下載附件
保存到相冊(cè)
s30f4qnxiyl64031646652.gif
2024-9-21 07:31 上傳
來源 | 網(wǎng)絡(luò)
MCU如果裸機(jī)奔跑的話,可能在后期升級(jí)、維護(hù)就變得有點(diǎn)難。所以,一般建議要上要一個(gè)RTOS或者一套框架之類的。
今天給大家分享一個(gè)面向MCU的小型前后臺(tái)系統(tǒng):JxOS
簡介 JxOS面向MCU的小型前后臺(tái)系統(tǒng),提供消息、事件等服務(wù),以及軟件定時(shí)器,低功耗管理,按鍵,led等常用功能模塊。
在此基礎(chǔ)上實(shí)現(xiàn)了基于433的簡單無線網(wǎng)絡(luò)功能。此項(xiàng)目的設(shè)計(jì)思想是:功能模塊與硬件高度解耦,提高代碼模塊的可復(fù)用性;不使用復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和語法以提高不同硬件平臺(tái)和編譯器之間的兼容性,實(shí)現(xiàn)工程在不同MCU之間的快速移植;提供實(shí)用穩(wěn)定常用的功能模塊,實(shí)現(xiàn)項(xiàng)目的快速開發(fā);定義標(biāo)準(zhǔn)應(yīng)用開發(fā)框架,減輕應(yīng)用開發(fā)的工作量和難度。
已使用此系統(tǒng)用于開發(fā)項(xiàng)目的硬件平臺(tái)有:N76E003、STM8S103K、PC、KF8TS2716
Software Architecture
vhlrg41x0bd64031646752.jpg (147.01 KB, 下載次數(shù): 8)
下載附件
保存到相冊(cè)
vhlrg41x0bd64031646752.jpg
2024-9-21 07:31 上傳
lhezf1gdlsr64031646852.jpg (135.67 KB, 下載次數(shù): 11)
下載附件
保存到相冊(cè)
lhezf1gdlsr64031646852.jpg
2024-9-21 07:31 上傳
JxOS
├───demo_code 參考代碼,未整理代碼
│
├───jxos jxos
│ ├───bsp 過時(shí)分類,將逐步歸類到 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í)并沒有清晰的界限,如driver:led_blink 就有可能抽象成 lib:sw_pwm)
│ ├───lib 使用 動(dòng)態(tài) 初始化的功能代碼模塊,使用初始化函數(shù)進(jìn)行配置;此目錄下的模代碼大部分與硬件無關(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)擊、指示燈閃爍……(此類模塊和user app屬于同一級(jí)別,只不過已經(jīng)標(biāo)準(zhǔn)化;此類模塊發(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í)并沒有清晰的界限,如driver:led_blink 就有可能抽象成 lib:sw_pwm)lib 使用 動(dòng)態(tài) 初始化的功能代碼模塊,使用初始化函數(shù)進(jìn)行配置;此目錄下的模代碼大部分與硬件無關(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)擊、指示燈閃爍…… (此類模塊和user app屬于同一級(jí)別,只不過已經(jīng)標(biāo)準(zhǔn)化;此類模塊發(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 提供的消息可能無法使用,作為補(bǔ)充std_app 也會(huì)同時(shí)提供全局變量來傳出信息和函數(shù)接口來傳入信息為提高代碼的兼容性;盡量不要使用函數(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)目通過 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 可通過消息名(字符串)獲取消息句柄[/ol]如何建立新項(xiàng)目:
獲取 Jxos 所有文件和目錄結(jié)構(gòu)
在 \platform 目錄下建立當(dāng)前工程的目錄(platform\芯片型號(hào)\工程命名\)
在 \工程名稱 目錄下新建工程文件(keil、iar 等IDE的newproject)
在 \工程名稱 目錄下新建 \config 目錄,增加 jxos_config.h type.h 系統(tǒng)配置文件
在 \config 目錄下增加工程用到的功能模塊的配置文件 (如 button_config.h sim_timer_config.h ...)
在 \工程名稱 目錄下新建 \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ù)
建議在 \工程名稱 目錄下新建 \app 目錄,實(shí)現(xiàn)用戶功能任務(wù)
建議在 \芯片型號(hào) 目錄下增加芯片需要用到的庫文件目錄
在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ù)文件 (\工程名稱\app\)
在IDE的新工程中增加include目錄,包括:\joxs,\platform\芯片型號(hào)\工程命名\config
在IDE的新工程中增加其他的include目錄,如芯片庫文件的頭文件
按照框架實(shí)現(xiàn)用戶任務(wù)
如何配置與使用 kernel
如何配置與使用 sys_service
如何配置與使用 std_app
如何使用標(biāo)準(zhǔn)框架的 driver 模塊
如何使用標(biāo)準(zhǔn)框架的 lib 模塊
最后,附上開源地址:
https://gitee.com/jeremyceng/JxOS/
聲明:本文素材來源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請(qǐng)與我聯(lián)系刪除。----------- END ------------
r4lpzxhnp4164031646952.gif (71.87 KB, 下載次數(shù): 8)
下載附件
保存到相冊(cè)
r4lpzxhnp4164031646952.gif
2024-9-21 07:31 上傳
●專欄《嵌入式工具》●專欄《嵌入式開發(fā)》●專欄《Keil教程》●嵌入式專欄精選教程
關(guān)注公眾號(hào)回復(fù)“加群”按規(guī)則加入技術(shù)交流群,回復(fù)“1024”查看更多內(nèi)容。點(diǎn)擊“閱讀原文”查看更多分享。 |
|