注:此條部落格僅用于回憶之前所學的移植作業系統的過程,以及消除好久不學習的罪惡感
一. 什麼是FreeRTOS
首先了解作業系統的概念,就像鴻蒙作業系統應用于華為,IOS系統用于蘋果一樣,作業系統是一種基于CPU的可操作的軟體系統。
而FreeRTOS就是一種在X86,Xilinx,Altera等硬體平台的系統,而我們在stm32上面玩,就像是在安卓手機上面玩安卓一樣。
作為一個輕量級的系統,FreeRTOS提供的功能包括任務管理、時間管理、信号量、消息隊列、記憶體管理、功能記錄等。
二. 為什麼要學習FreeRTOS
- 我學FreeRTOS隻是想給最後的32一個終結,32的作業系統學完差不多就可以結束了,後面就做做東西熟練一下就可以了,接下來可能會更新FPGA(雖然學了很久沒明白但我要死磕到底)和一些linux(學硬體必備)的部落格了
- 再來說為什麼學這個,因為它開源且簡單,一個又簡單又開源的東西,隻要你找到資源,那肯定是要學習一下的,而且你學單片機隻會裸機開發,那你學個P呀,而且學完這個RTOS的作業系統,其他也一通百通了
重點來了
基于stm32的FreeRTOS移植全過程
連結: https://pan.baidu.com/s/1To7ii6Zvgdio7acQSC69kw
提取碼: zmvg
以上是FreeRTOS以及移植好的标本資源源碼包
當然,你也可以從官網上找http://www.freertos.org/
裡面包含Demo例程和核心源碼
source檔案夾裡面就是我們需要移植的freertos核心源碼
// 修改stm32f10x_it.c
SysTick中斷服務函數,FreeRTOS所有跟時間相關的事情都在裡面處理
建立任務
/* FreeRTOS頭檔案 */
#include "FreeRTOS.h"
#include "task.h"
/* 開發闆硬體bsp頭檔案 */
#include "bsp_led.h"
static void AppTaskCreate(void);/* AppTask任務 */
/* 建立任務句柄 */
static TaskHandle_t AppTask_Handle = NULL;
int main(void)
{
BaseType_t xReturn = pdPASS;/* 定義一個建立資訊傳回值,預設為pdPASS */
/* 開發闆硬體初始化 */
BSP_Init();
/* 建立AppTaskCreate任務 */
xReturn = xTaskCreate((TaskFunction_t )AppTask, /* 任務入口函數 */
(const char* )"AppTask",/* 任務名字 */
(uint16_t )512, /* 任務棧大小 */
(void* )NULL,/* 任務入口函數參數 */
(UBaseType_t )1, /* 任務的優先級 */
(TaskHandle_t* )&AppTask_Handle);/* 任務控制塊指針 */
/* 啟動任務排程 */
if(pdPASS == xReturn)
vTaskStartScheduler(); /* 啟動任務,開啟排程 */
else
return -1;
while(1); /* 正常不會執行到這裡 */
}
static void AppTask(void* parameter)
{
while (1)
{
LED1_ON;
vTaskDelay(500); /* 延時500個tick */
LED1_OFF;
vTaskDelay(500); /* 延時500個tick */
}
}}
三. 具體操作
1.
打開FreeRTOSv202107檔案裡面的FreeRTOS
Demo檔案夾是例程代碼
這個我們之後會用到
license 是一個檔案說明
sourece檔案夾裡面的檔案很重要,我們之後會用到,後面細說
test 文本
打開固件庫版本
連結: https://pan.baidu.com/s/1KDyEV6D27z8JX2ecLUghkw 提取碼: x1b7
直接操作
添加FreeRTOS檔案夾
将source裡面的源碼放在RTOS檔案夾裡面
然後在portable檔案夾裡面保留keil、MemMang、和RVDS,其他删除
(也可以直接看pdf檔案)
連結: https://pan.baidu.com/s/1ZelDElRl9-CbRbQxPlafRQ 提取碼: 3x9p
記得把SYSTEM檔案夾裡面的delay,sys,usart移植到檔案夾裡面,沒有就建立
在基礎工程中建立分組 FreeRTOS_CODE 和FreeRTOS_PORTABLE,并且添加 .c檔案,添加頭檔案.h的路徑
打開固件庫檔案
點選添加檔案
從demo中複制 FreeRTOSConfig.h 檔案
移植SYSTEM檔案,裡面包括sys.c usar.c delay.c
port.c檔案在RVDS裡面找(根據自己的核心選,我用的是M3的核心)
如這般添加檔案
記得修改後添加頭檔案(有.c必有.h)
把這個檔案放在FreeRTOS的include 檔案夾裡面
然後運作一下keil檔案,看有沒有問題,有問題一定是配置檔案有問題,自己百度
下面開始點燈(點燈基操)
把上面網盤的FreeRTOS裡面的檔案夾打開,然後把mian函數裡面的内容複制到固件庫模闆裡面
然後運作
我是在stm32c8t6上面燒錄的,如果其他闆子可能晶振不一樣要修改時鐘頻率