首先介紹選擇FreeRTOS的原因和入門,然后介紹如何配置FreeRTOS、內存、任務、隊列、信號量、中斷、調度、SysTick、調試等等。
1. FreeRTOS目錄組成
《FreeRTOS系列第1篇---為什么選擇FreeRTOS?》
《FreeRTOS系列第2篇---FreeRTOS入門指南》
2. FreeRTOS組件分析
2.1 通用配置
《FreeRTOS系列第3篇---FreeRTOS移植指南》
《FreeRTOS系列第4篇---FreeRTOS編碼標准及風格指南》
《FreeRTOS系列第5篇---FreeRTOS在Cortex-M3上的移植》
《FreeRTOS系列第6篇---FreeRTOS內核配置說明》
《FreeRTOS系列第7篇---Cortex-M內核使用FreeRTOS特別注意事項》
《FreeRTOS高級篇1---FreeRTOS列表和列表項》
2.2 內存管理
FreeRTOS提供了5中內存管理方案:
- 都有哪5中內存方案,他們之間的優劣分別是?
- 這5種內存方案的使用場景分別是?
- 內存管理接口?效率?
參考文檔:
《FreeRTOS系列第8篇---FreeRTOS內存管理》
《FreeRTOS高級篇7---FreeRTOS內存管理分析》
2.3 任務創建、刪除、控制、通知
參考文檔:
《FreeRTOS系列第9篇---FreeRTOS任務概述》
《FreeRTOS系列第10篇---FreeRTOS任務創建和刪除》
《FreeRTOS系列第11篇---FreeRTOS任務控制》
《FreeRTOS系列第12篇---FreeRTOS任務應用函數》
《FreeRTOS系列第14篇---FreeRTOS任務通知》
《FreeRTOS系列第15篇---使用任務通知實現命令行解釋器》
《FreeRTOS高級篇2---FreeRTOS任務創建分析》
《FreeRTOS高級篇3---FreeRTOS調度器啟動過程分析》
《FreeRTOS高級篇4---FreeRTOS任務切換分析》
《FreeRTOS高級篇8---FreeRTOS任務通知分析》
《FreeRTOS高級篇9---FreeRTOS系統延時分析》
2.4 隊列
參考文檔:
《FreeRTOS系列第17篇---FreeRTOS隊列》
《FreeRTOS系列第18篇---FreeRTOS隊列API函數》
2.5 信號量
參考文檔:
《FreeRTOS系列第19篇---FreeRTOS信號量》
《FreeRTOS系列第20篇---FreeRTOS信號量API函數》
《FreeRTOS高級篇6---FreeRTOS信號量分析》
2.6 內核控制:中斷、調度器、上下文切換、系統Tick
參考文檔:
《FreeRTOS系列第13篇---FreeRTOS內核控制》
2.7 可視化跟蹤調試
3. 鏡像優化
3.1 優化axf文件大小
功能開關FreeRTOSConfig.h
關閉FPU、TrustZone、
尺寸減小
gcc優化
3.2 檢查axf文件大小
分析大小:riscv64-unknown-elf-size FreeRTOSDemo_ns.axf 。
text data bss dec hex filename 37312 17032 11252 65596 1003c FreeRTOSDemo_ns.axf
詳細查看函數和數據大小:arm-none-eabi-readelf -s FreeRTOSDemo_ns.axf | grep FUNC | sort -n -r -k 3。
riscv64-unknown-elf-readelf -s FreeRTOSDemo_ns.axf | grep OBJECT | sort -n -r -k 3 665: 20008000 16384 OBJECT LOCAL DEFAULT 2 ucHeap 97: 2000c2a0 512 OBJECT LOCAL DEFAULT 3 uxIdleTaskStack.10409 261: 2000cb00 512 OBJECT LOCAL DEFAULT 3 xSecureCallingTaskStack.5 249: 2000c8e0 512 OBJECT LOCAL DEFAULT 3 xRWAccessTaskStack.5463 248: 2000c6e0 512 OBJECT LOCAL DEFAULT 3 xROAccessTaskStack.5462 101: 2000c4a0 512 OBJECT LOCAL DEFAULT 3 uxTimerTaskStack.10416 735: 00010000 304 OBJECT GLOBAL DEFAULT 1 __Vectors 1166: 00010000 304 OBJECT GLOBAL DEFAULT 1 g_pfnVectors ... riscv64-unknown-elf-readelf -s FreeRTOSDemo_ns.axf | grep FUNC | sort -n -r -k 3 1223: 00010e85 608 FUNC GLOBAL DEFAULT 1 _vfprintf_r 1163: 00010e85 608 FUNC GLOBAL DEFAULT 1 _vfiprintf_r 1203: 000110e5 588 FUNC GLOBAL DEFAULT 1 _printf_i 1231: 00012c91 532 FUNC GLOBAL DEFAULT 4 vPortStoreTaskMPUSettings 832: 00010c85 512 FUNC GLOBAL DEFAULT 1 _svfprintf_r 1121: 00010c85 512 FUNC GLOBAL DEFAULT 1 _svfiprintf_r ...
4. 參考文檔
《Cortex M33處理器下移植FreeRTOS V10.2.0的操作記錄》
《FreeRTOS學習及移植筆記之一:開始FreeRTOS之旅》
《FreeRTOS學習及移植筆記之二:在IAR和STM32F103VET上移植FreeRTOS》
《RTOS Demo for RISC-V QEMU sifive_e Model》
