博客專欄

        EEPW首頁 > 博客 > 詳解FreeRTOS:嵌入式軟件系統架構(理論篇—1)

        詳解FreeRTOS:嵌入式軟件系統架構(理論篇—1)

        發布人:美男子玩編程 時間:2023-05-16 來源:工程師 發布文章

        目前常見的嵌入式軟件系統架構有三種可以分為:輪詢系統架構、前后臺系統架構和多任務系統架構。

        1

        輪詢系統架構

        輪詢系統架構是最簡單的一種軟件結構,主程序是一段無限循環的代碼,在循環中順序查詢各個條件,如果滿足就執行相應的操作。

        這種方案的好處是實現簡單,邏輯清晰,便于開發人員掌握。但是每個事件的查詢和處理時間是不能確定的,假如前面的操作時間較長,那么后面的操作必然會被延遲。

        如下圖所示,假如步驟1操作需要很久,那么步驟2必然得不到及時處理,如果步驟2的工作很重要或者很緊急,那么系統的性能和響應能力就很差了。

        圖片


        示例偽代碼如下所示:














        int main(void){    HwInit();                //初始化外設  while(1)  {    statement_1;         //語句1    statement_2;         //語句2     statement_3;         //語句3    ......  }  return 0;}

        2


        前后臺系統架構

        相對輪詢系統架構,前后臺系統架構對外部事件的處理做了優化,前后臺系統架構是由中斷驅動的。


        主程序依然是一段無限循環的代碼,稱為后臺程序,而事件的響應則由中斷來完成,稱為前臺程序。


        在后臺程序執行時,如果有外部事件發生,則前臺的中斷程序會打斷后臺程序。在完成必要的事件響應之后,前臺中斷程序退出并通知后臺程序來繼續操作,由后臺程序完成事件的后繼處理。


        從代碼功能上講,事件的響應和處理分為了兩個部分。因為中斷自身有優先級和嵌套的功能,所以優先級高的事件能夠得到及時響應。但后臺程序仍然需要按順序處理各個事件的后繼事務。


        圖片


        在中斷源之間有優先級的概念,ISR會首先響應事件,簡單的事件可以在ISR中直接處理,復雜的情況下則記錄下必要數據和狀態標記,等所有中斷處理結束后,將由后臺主函數按順序處理各個事件。也可以理解,事件的響應是支持優先級的,但事件的最終處理卻是順序的。


        使用中斷來代替輪詢方案中事件的查詢操作,對事件的響應能力有較大改善。


        示例偽代碼如下所示:




















        int main(void){    HwInit();                //初始化外設  while(1)  {    statement_1;         //語句1    statement_2;         //語句2     statement_3;         //語句3    ......  }  return 0;}
        void interrupt_event(void){    statement_4;         //語句4    return 0;}

        3


        多任務系統架構

        相對于前后臺系統架構,多任務系統架構在響應事件的時候,同樣是由多個中斷處理程序完成的。但是對于事件的后繼操作則是由多個任務來處理的,也就是說每個任務處理它所負責的事件。


        在基于優先級的多任務系統架構中,因為任務間存在優先級高、低的關系,優先級高的任務可打斷低優先級任務的運行而取得CPU的優先使用權,這樣優先級高的事件就能及時得到處理;在基于分時機制的多任務系統中,任務間則按比例輪流占用處理器。


        圖片


        因為多任務系統架構允許將具體的應用系統分成若干個相對獨立的任務來管理,所以多任務操作系統的使用可以簡化應用程序的設計,系統也變得簡潔且便于維護和擴展。對實時性要求嚴格的事件都能得到及時可靠的處理。不過多任務操作系統自身將消耗更多的處理器、存儲器等硬件資源,這是引入多任務機制的必要代價。

        示例偽代碼如下所示:








































        int main(void){    HwInit();                //初始化外設    OS_Init();               //初始化系統    OS_Start();              //運行內核調度  while(1)  {          ......  }  return 0;}
        //任務1void task_1(void){  task_statement_1;  task_statement_2;  task_statement_3;  OS_delay();}
        //任務2void task_2(void){  task_statement_1;  task_statement_2;  task_statement_3;  OS_delay();}
        //任務3void task_3(void){  task_statement_1;  task_statement_2;  task_statement_3;  OS_delay();}



        4


        區別

        最后,對比一下三種嵌入式軟件系統架構的特點和區別,如下表所示:


        圖片


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: FreeRTOS 嵌入式

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 铁岭县| 蓝山县| 白朗县| 新巴尔虎左旗| 双峰县| 浙江省| 桦川县| 措美县| 苏尼特左旗| 北安市| 西华县| 安阳市| 子洲县| 奇台县| 承德市| 吉木萨尔县| 高安市| 海伦市| 奉化市| 孝感市| 龙岩市| 普兰店市| 崇礼县| 湟中县| 重庆市| 博白县| 克什克腾旗| 中牟县| 光泽县| 泰兴市| 城固县| 建宁县| 东乡族自治县| 仁布县| 哈尔滨市| 眉山市| 嘉义县| 泰顺县| 卫辉市| 会同县| 民勤县|