點擊上方”藍字”關注我們
01、什么是FreeRTOS?
02、獲取資源
03、FreeRTOS的特點
04、為何選擇FreeRTOS
FreeRTOS的文檔非常全面,官方網站上提供了所有需要的資料。FreeRTOS是免費且開源的,可以免費用于商業產品。開源特性使學習操作系統原理、掌握FreeRTOS運行機制以及對操作系統進行深度裁剪以適應硬件變得更加容易。2017年底,FreeRTOS的作者加入亞馬遜,擔任首席工程師,FreeRTOS也由亞馬遜管理。用戶許可證進行了修改,使FreeRTOS更加開放和自由。依靠亞馬遜的支持,FreeRTOS的未來發展將更加穩定可靠。此外,以前價格昂貴的《實時內核指南》和《參考手冊》現在也免費開放下載,這使得學習更加便捷。
05、FreeRTOS代碼規范
06、FreeRTOS代碼結構
FreeRTOS的內核代碼文件非常簡潔,主要包括以下幾個:
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;
總結
本節內容獲取鏈接:https://www.php.cn/link/df03af942339bf722676fd2f752f2a1f 提取碼:a2v3 — 來自百度網盤超級會員V1的分享