FreeRTOS?|?原理介紹和資源get(第十四天)

點擊上方”藍字”關注我們

01、什么是FreeRTOS?

FreeRTOS?|?原理介紹和資源get(第十四天)

02、獲取資源

FreeRTOS?|?原理介紹和資源get(第十四天)

03、FreeRTOS的特點

FreeRTOS?|?原理介紹和資源get(第十四天)

04、為何選擇FreeRTOS

FreeRTOS?|?原理介紹和資源get(第十四天)

FreeRTOS的文檔非常全面,官方網站上提供了所有需要的資料。FreeRTOS是免費且開源的,可以免費用于商業產品。開源特性使學習操作系統原理、掌握FreeRTOS運行機制以及對操作系統進行深度裁剪以適應硬件變得更加容易。2017年底,FreeRTOS的作者加入亞馬遜,擔任首席工程師,FreeRTOS也由亞馬遜管理。用戶許可證進行了修改,使FreeRTOS更加開放和自由。依靠亞馬遜的支持,FreeRTOS的未來發展將更加穩定可靠。此外,以前價格昂貴的《實時內核指南》和《參考手冊》現在也免費開放下載,這使得學習更加便捷。

05、FreeRTOS代碼規范

FreeRTOS?|?原理介紹和資源get(第十四天)

06、FreeRTOS代碼結構

FreeRTOS?|?原理介紹和資源get(第十四天)

FreeRTOS的內核代碼文件非常簡潔,主要包括以下幾個:

croutine.c/croutine.h 協程,適用于8位/16位平臺,在32位平臺上建議使用任務。

event_groups.c / event_groups.h

事件組的實現

heap_x.c

內核實現,FreeRTOS提供了heap_1.c ~ heap_5.c 5種堆管理器,各有優缺點,需要根據應用進行選擇。

list.c/list.h

鏈表實現,為調度器提供數據結構算法支持服務,如任務鏈表。

port.c/portmacro.h

硬件相關層級可移植抽象,包括SysTick中斷、上下文切換、中斷管理,具體實現依賴于平臺(單片機體系硬件內核和編譯器工具集),通常使用匯編語言實現。

queue.c/queue.h/semphr.h

信號量、互斥體的實現

tasks.c/task.h

任務管理器的實現

timers.c/timers.h

軟件定時器的實現

FreeRTOS.h

選編譯配置文件,用于匯總所有源文件的編譯選擇控制

FreeRTOSConfig.h

FreeRTOS內核配置,包括Tick時鐘和irq中斷配置

07、FreeRTOS代碼規范

代碼語言:JavaScript

代碼運行次數:0

運行 復制

// x表示portBASE_TYPE, u表示無符號型 PRIVILEGED_DATA static volatile TickType_t xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT; <p>PRIVILEGED_DATA static volatile UBaseType_t uxTopReadyPriority = tskIDLE_PRIORITY; </p><p>// 例如在list.h中 struct xLIST_ITEM{ configLIST_VOLATILE TickType_t xItemValue;  struct xLIST_ITEM <em> configLIST_VOLATILE pxNext;  struct xLIST_ITEM </em> configLIST_VOLATILE pxPrevious;  void <em> pvOwner;  // 指針以p打頭  struct xLIST </em> configLIST_VOLATILE pxContainer;  };</p><p>// 對于c語言的基本數據類型,進行了可移植的定義:</p><h1>define portCHAR          char</h1><h1>define portFLOAT         float</h1><h1>define portDOUBLE        double</h1><h1>define portLONG          long</h1><h1>define portSHORT         short</h1><h1>define portSTACK_TYPE    uint32_t</h1><h1>define portBASE_TYPE     long

代碼語言:javascript

代碼運行次數:0

運行復制

// ux表示無符號portBASE_TYPE返回值 // List表示該函數所屬文件 // Remove函數名 UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION; <p>// 例如prv表示模塊內函數 static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty ) PRIVILEGED_FUNCTION;

總結

FreeRTOS?|?原理介紹和資源get(第十四天)

本節內容獲取鏈接:https://www.php.cn/link/df03af942339bf722676fd2f752f2a1f 提取碼:a2v3 — 來自百度網盤超級會員V1的分享

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享