MCU小型調度OS之一:由ODM項目引起跨平臺、跨系統的兼容、可移植

項目背景:        

       最近公司在做一個ODM項目,需要把公司內部的協議棧交互與加密方式封裝成一個SDK,提供給ODM廠家調用,達到其他公司只做適配BSP,而核心業務由我們自己掌控,達到ODM廠家更換任意平臺芯片,任意RTOS或者邏輯,我們都能適配,因爲公司協議棧內部有交互(設備與APP之間有命令交互和阻塞等待超時等場景),因此需要製作一個跨平臺的調度機制,又能保證性能和兼容性,如下圖:

 架構思想:

        

        如上圖,每個任務就是一個節點,每個節點裏麪包含了taskId、status、timer以及function等變量,你可以理解爲這是操作系統的每個任務的結構體,在節點裏包含着一個定時器的結構體(爲了計時每個任務的動作,實現型號量以及超時機制,這個下節詳細解釋),調度思想如下面兩點:

        1、在主程序裏,while(1)循環內,不斷對task鏈表進行查詢,查詢每個task節點當前的狀態,如果ready,就運行,如果休眠就next,如下圖1。

        2、設置個1ms一次定時中斷,作爲tickets,在中斷處理函數裏,依次對所有的timer定時器鏈表節點,查詢,修改狀態,如果是任務附帶的timer,如果出現超時,在定時器超時回調函數裏,順便把任務節點的狀態給修改了,從而實現了虛擬的時間片輪詢,如下圖2。

圖1

圖2

跨平臺兼容性:

        該調度OS可以跨任意平臺、芯片,如果從一個平臺移植到其他平臺,修改點很少,即可無縫融合進其他系統,又可自己作爲一套調度系統,如下三種情況:

        一、如果新平臺方案,是mcu(裸機),不帶任何架構,只需要把該架構移植過去即可,修改點如下:1、配置新平臺1ms定時的計時器;2、在程序開始,初始化任務鏈表以及定時器;3、在主程序while(1)裏面加上OSRun(),反覆循環調用即可,如下圖。

        二、自帶或者使用芯片自帶的調度機制,只需要在while(1)內加上OSRun即可,不影響默認的架構,如下圖

        三、如果該芯片自帶的freeRTOS或者其他調度系統,只需要單獨開啓一個任務線程,定時調用運行OSRun即可。

        有些同學不明白的沒關係,下面章節會重點分析該系統的實現,本章節只是大概普及一下該系統的使用場景以及使用方式。

        調度系統下載鏈接如下: https://download.csdn.net/download/moonlinux20704/12073629

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章