前 言引 言**部分 從0到1教你寫FreeRTOS內核第1章 初識FreeRTOS 21.1 FreeRTOS版權 21.2 FreeRTOS收費問題 21.2.1 FreeRTOS 21.2.2 OpenRTOS 21.2.3 SaveRTOS 31.3 FreeRTOS資料獲取 31.3.1 獲取源碼 31.3.2 獲取書籍 41.3.3 快速入門 41.4 FreeRTOS的編程風格 51.4.1 數據類型 51.4.2 變量名 61.4.3 函數名 61.4.4 宏 71.4.5 格式 7第2章 新建FreeRTOS工程—軟件仿真 82.1 新建本地工程文件夾 82.2 使用KEIL新建工程 82.2.1 New Project 92.2.2 Select Device for Target 92.2.3 Manage Run-Time Environment 102.3 在KEIL工程中新建文件組 112.4 在KEIL工程中添加文件 112.5 調試配置 132.5.1 設置軟件仿真 132.5.2 修改時鐘大小 132.5.3 添加頭文件路徑 13第3章 裸機系統與多任務系統 153.1 裸機系統 153.1.1 輪詢系統 153.1.2 前后臺系統 163.2 多任務系統 17第4章 數據結構—列表與列表項 204.1 C語言鏈表 204.1.1 單向鏈表 204.1.2 雙向鏈表 224.1.3 鏈表與數組的對比 224.2 FreeRTOS中鏈表的實現 234.2.1 實現鏈表節點 234.2.2 實現鏈表根節點 254.3 鏈表節點插入實驗 314.4 實驗現象 34第5章 任務的定義與任務切換 355.1 本章目標 355.2 什么是任務 365.3 創建任務 375.3.1 定義任務棧 375.3.2 定義任務函數 385.3.3 定義任務控制塊 395.3.4 實現任務創建函數 405.4 實現就緒列表 455.4.1 定義就緒列表 455.4.2 就緒列表初始化 455.4.3 將任務插入就緒列表 465.5 實現調度器 495.5.1 啟動調度器 495.5.2 任務切換 545.6 main()函數 585.7 實驗現象 615.8 本章涉及的匯編指令 64第6章 臨界段的保護 656.1 什么是臨界段 656.2 Cortex-M內核快速關中斷指令 656.3 關中斷 666.3.1 不帶返回值的關中斷函數 666.3.2 帶返回值的關中斷函數 676.4 開中斷 676.5 進入/退出臨界段的宏 686.5.1 進入臨界段 686.5.2 退出臨界段 696.6 臨界段代碼的應用 706.7 實驗現象 71第7章 空閑任務與阻塞延時 727.1 實現空閑任務 727.1.1 定義空閑任務的棧 727.1.2 定義空閑任務的任務控制塊 737.1.3 創建空閑任務 737.2 實現阻塞延時 747.2.1 vTaskDelay()函數 747.2.2 修改vTaskSwitchContext()函數 757.3 SysTick中斷服務函數 777.4 SysTick初始化函數 787.5 main()函數 807.6 實驗現象 83第8章 多優先級 848.1 支持多優先級的方法 848.2 查找*高優先級的就緒任務相關代碼 858.2.1 通用方法 878.2.2 優化方法 878.3 修改代碼以支持多優先級 898.3.1 修改任務控制塊 898.3.2 修改xTaskCreateStatic()函數 898.3.3 修改vTaskStartScheduler()函數 938.3.4 修改vTaskDelay()函數 948.3.5 修改vTaskSwitchContext()函數 958.3.6 修改xTaskIncrementTick()函數 968.4 main()函數 978.5 實驗現象 100第9章 任務延時列表 1029.1 任務延時列表的工作原理 1029.2 實現任務延時列表 1039.2.1 定義任務延時列表 1039.2.2 任務延時列表初始化 1039.2.3 定義xNextTaskUnblock-Time 1039.2.4 初始化xNextTaskUnblock-Time 1049.3 修改代碼以支持任務延時列表 1049.3.1 修改vTaskDelay()函數 1059.3.2 修改xTaskIncrementTick()函數 1079.3.3 修改taskRESET_READY_PRIORITY()函數 1099.4 main()函數 1109.5 實驗現象 110第10章 時間片 11110.1 時間片測試實驗 11110.2 main.c文件 11210.3 實驗現象 11510.4 原理分析 11610.4.1 taskSELECT_HIGHEST_PRIORITY_TASK()函數 11610.4.2 taskRESET_READY_PRIORITY()函數 11710.5 修改代碼以支持優先級 11810.5.1 修改xPortSysTick-Handler()函數 11810.5.2 修改xTaskIncrement-Tick()函數 119第二部分 FreeRTOS內核應用開發第11章 移植FreeRTOS到STM32 12411.1 獲取STM32的裸機工程模板 12411.2 下載FreeRTOS V9.0.0源碼 12411.3 FreeRTOS文件夾內容 12611.3.1 FreeRTOS文件夾 12611.3.2 FreeRTOS-Plus文件夾 12811.3.3 HTML文件 12911.4 向裸機工程中添加FreeRTOS源碼 12911.4.1 提取FreeRTOS*簡源碼 12911.4.2 復制FreeRTOS到裸機工程根目錄 13011.4.3 復制FreeRTOSConf?ig.h文件到User文件夾 13111.4.4 添加FreeRTOS源碼到工程組文件夾 13111.5 修改FreeRTOSConf?ig.h文件 13311.5.1 FreeRTOSConf?ig.h文件內容 13311.5.2 修改FreeRTOSConfig.h文件 14311.6 修改stm32f10x_it.c文件 14711.7 修改main.c文件 15111.8 下載驗證 152第12章 任務 15312.1 硬件初始化