
JxOS面向MCU的小型前后臺系統,提供消息、事件等服務,以及軟件定時器,低功耗管理,按鍵,led等常用功能模塊。
gitee倉庫地址為(復制到瀏覽器打開):
https://gitee.com/jeremyceng/JxOS/tree/master在此基礎上實現了基于433的簡單無線網絡功能。
此項目的設計思想是:功能模塊與硬件高度解耦,提高代碼模塊的可復用性;不使用復雜的數據結構和語法以提高不同硬件平臺和編譯器之間的兼容性,實現工程在不同MCU之間的快速移植;提供實用穩定常用的功能模塊,實現項目的快速開發;定義標準應用開發框架,減輕應用開發的工作量和難度。
已使用此系統用于開發項目的硬件平臺有:N76E003、STM8S103K、PC、KF8TS2716


JxOS
├───demo_code 參考代碼,未整理代碼
│
├───jxos jxos
│ ├───bsp 過時分類,將逐步歸類到 driver 和 lib 中
│ ├───kernel 內核,提供系統內核功能:任務、事件、消息、公告板、郵箱、管道、注冊、內存分配……
│ ├───driver 使用 靜態 初始化的功能代碼模塊,使用config.h文件進行配置;此目錄下的代碼大部分與硬件相關,如:傳感器、按鍵掃描、屏幕…… (driver 與 lib 有時并沒有清晰的界限,如driver:led_blink 就有可能抽象成 lib:sw_pwm)
│ ├───lib 使用 動態 初始化的功能代碼模塊,使用初始化函數進行配置;此目錄下的模代碼大部分與硬件無關,如:環形緩沖區、crc16、棧、軟件定時器……
│ ├───sys_service 基于任務實現的系統服務,如:低功耗管理、軟件定時器、打印輸出……(只有對外接口,不發出對外消息)
│ └───std_app 基于任務實現的常用標準應用,如獨立按鍵掃描、按鍵多次點擊、指示燈閃爍……(此類模塊和user app屬于同一級別,只不過已經標準化;此類模塊發出對外消息,也有對外接口,用于兼容不能支持消息功能的硬件平臺)
│
├───platform
│ ├───N76E003 ┐
│ ├───N76E003 ├─── 基于 jxos 實現的,使用不同平臺硬件的具體項目
│ └───STM8S103K3 ┘
│
├───JSnet ┐
├───.... ├─── 基于 jxos 實現的功能模塊
└───SRTnet ┘
kernel 提供系統內核功能:任務、事件、消息、公告板、郵箱、管道、注冊、內存分配……
driver 使用 靜態 初始化的功能代碼模塊,使用config.h文件進行配置;此目錄下的代碼大部分與硬件相關,如:傳感器、按鍵掃描、屏幕…… (driver 與 lib 有時并沒有清晰的界限,如driver:led_blink 就有可能抽象成 lib:sw_pwm)
lib 使用 動態 初始化的功能代碼模塊,使用初始化函數進行配置;此目錄下的模代碼大部分與硬件無關,如:環形緩沖區、crc16、棧、軟件定時器……
sys_service 基于任務實現的系統服務,如:低功耗管理、軟件定時器、打印輸出……(只有對外接口,不發出對外消息)
std_app 基于任務實現的常用標準應用,如獨立按鍵掃描、按鍵多次點擊、指示燈閃爍…… (此類模塊和user app屬于同一級別,只不過已經標準化;此類模塊發出對外消息,也有對外接口,用于兼容不能支持消息功能的硬件平臺)
platform 基于 jxos 實現的,使用不同平臺硬件的具體項目
在某些編譯器環境下可能出現以某些限制(不支持函數指針,不支持中斷處理函數中調用其他函數,不支持函數指針帶參數,不支持結構體),因此 std_app 提供的消息可能無法使用,作為補充std_app 也會同時提供全局變量來傳出信息和函數接口來傳入信息
為提高代碼的兼容性;盡量不要使用函數指針
為提高代碼的可復用性,std_app 中的功能盡量在 driver 和 lib 中實現,std_app 中的代碼僅作為提供系統tick和統一對外接口的功能
模塊和 std_app 可以提供多個不同實現方法的文件,但保持對外接口的統一
對外提供兩套接口方案 jxos_public.h 提供高級接口(消息 事件等),jxos_public_lite.h 提供低級接口(全局變量, 函數)
導入 jxos_public.h 即可調用系統所有的對外接口
每個項目通過 jxos_init_config.c 和 jxos_config.h 對系統進行配置,即每個項目有獨立配置文件
在 jxos_init_config.c 實現需要硬件支持的系統模塊硬件初始化,以及用戶任務的初始化順序
在 jxos_config.h 配置系統模塊的參數和使能
event 用于任務內部的信號同步,主要是將中斷信號傳遞到任務
msg 用于任務之間的消息傳遞,使用 jxos_msg_get_handle 可通過消息名(字符串)獲取消息句柄
如何建立新項目:
獲取 Jxos 所有文件和目錄結構
在 \platform 目錄下建立當前工程的目錄(platform\芯片型號\工程命名\)
在 \工程名稱 目錄下新建工程文件(keil、iar 等IDE的newproject)
在 \工程名稱 目錄下新建 \config 目錄,增加 jxos_config.h type.h 系統配置文件
在 \config 目錄下增加工程用到的功能模塊的配置文件 (如 button_config.h sim_timer_config.h ...)
在 \工程名稱 目錄下新建 \framework 目錄
在 \framework 目錄下增加 main.c ,實現main函數,在main函數中調用jxos_run() ( void main(void) {jxos_run();} )
在 \framework 目錄下增加 isr.c ,實現工程需要的中斷處理函數
在 \framework 目錄下增加 callback_handler.c ,實現工程用到的功能模塊的callback函數
建議在 \工程名稱 目錄下新建 \app 目錄,實現用戶功能任務
建議在 \芯片型號 目錄下增加芯片需要用到的庫文件目錄
在IDE的新工程中導入 jxos.c
在IDE的新工程中導入需要的Jxos模塊的文件(kernel、sys_service ...)
在IDE的新工程中導入 main.c, isr.c, callback_handler.c
在IDE的新工程中導入用戶任務文件 (\工程名稱\app\)
在IDE的新工程中增加include目錄,包括:\joxs,\platform\芯片型號\工程命名\config
在IDE的新工程中增加其他的include目錄,如芯片庫文件的頭文件
按照框架實現用戶任務
如何配置與使用 kernel
如何配置與使用 sys_service
如何配置與使用 std_app
如何使用標準框架的 driver 模塊
如何使用標準框架的 lib 模塊
(1)自己從 gitee 倉庫拉取。
(2)公眾號后臺回復【JxOS】,獲取打包好的項目文件。

覺得文章不錯,點擊“分享”、“贊”、“推薦” 唄!