天天看點

記錄關于FreeRTOS系統的移植(基于STM32) 【一】

注:此條部落格僅用于回憶之前所學的移植作業系統的過程,以及消除好久不學習的罪惡感

一. 什麼是FreeRTOS

首先了解作業系統的概念,就像鴻蒙作業系統應用于華為,IOS系統用于蘋果一樣,作業系統是一種基于CPU的可操作的軟體系統。

而FreeRTOS就是一種在X86,Xilinx,Altera等硬體平台的系統,而我們在stm32上面玩,就像是在安卓手機上面玩安卓一樣。

作為一個輕量級的系統,FreeRTOS提供的功能包括任務管理、時間管理、信号量、消息隊列、記憶體管理、功能記錄等。

二. 為什麼要學習FreeRTOS

  1. 我學FreeRTOS隻是想給最後的32一個終結,32的作業系統學完差不多就可以結束了,後面就做做東西熟練一下就可以了,接下來可能會更新FPGA(雖然學了很久沒明白但我要死磕到底)和一些linux(學硬體必備)的部落格了
  2. 再來說為什麼學這個,因為它開源且簡單,一個又簡單又開源的東西,隻要你找到資源,那肯定是要學習一下的,而且你學單片機隻會裸機開發,那你學個P呀,而且學完這個RTOS的作業系統,其他也一通百通了
重點來了

基于stm32的FreeRTOS移植全過程

連結: https://pan.baidu.com/s/1To7ii6Zvgdio7acQSC69kw

提取碼: zmvg

以上是FreeRTOS以及移植好的标本資源源碼包

當然,你也可以從官網上找http://www.freertos.org/

裡面包含Demo例程和核心源碼

記錄關于FreeRTOS系統的移植(基于STM32) 【一】

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.

記錄關于FreeRTOS系統的移植(基于STM32) 【一】

打開FreeRTOSv202107檔案裡面的FreeRTOS

Demo檔案夾是例程代碼

記錄關于FreeRTOS系統的移植(基于STM32) 【一】

這個我們之後會用到

記錄關于FreeRTOS系統的移植(基于STM32) 【一】

license 是一個檔案說明

sourece檔案夾裡面的檔案很重要,我們之後會用到,後面細說

test 文本

打開固件庫版本

連結: https://pan.baidu.com/s/1KDyEV6D27z8JX2ecLUghkw 提取碼: x1b7

直接操作

添加FreeRTOS檔案夾

記錄關于FreeRTOS系統的移植(基于STM32) 【一】

将source裡面的源碼放在RTOS檔案夾裡面

然後在portable檔案夾裡面保留keil、MemMang、和RVDS,其他删除

記錄關于FreeRTOS系統的移植(基于STM32) 【一】

(也可以直接看pdf檔案)

連結: https://pan.baidu.com/s/1ZelDElRl9-CbRbQxPlafRQ 提取碼: 3x9p

記得把SYSTEM檔案夾裡面的delay,sys,usart移植到檔案夾裡面,沒有就建立

在基礎工程中建立分組 FreeRTOS_CODE 和FreeRTOS_PORTABLE,并且添加 .c檔案,添加頭檔案.h的路徑

打開固件庫檔案

記錄關于FreeRTOS系統的移植(基于STM32) 【一】

點選添加檔案

記錄關于FreeRTOS系統的移植(基于STM32) 【一】

從demo中複制 FreeRTOSConfig.h 檔案

移植SYSTEM檔案,裡面包括sys.c usar.c delay.c

記錄關于FreeRTOS系統的移植(基于STM32) 【一】

port.c檔案在RVDS裡面找(根據自己的核心選,我用的是M3的核心)

如這般添加檔案

記錄關于FreeRTOS系統的移植(基于STM32) 【一】

記得修改後添加頭檔案(有.c必有.h)

把這個檔案放在FreeRTOS的include 檔案夾裡面

記錄關于FreeRTOS系統的移植(基于STM32) 【一】
然後運作一下keil檔案,看有沒有問題,有問題一定是配置檔案有問題,自己百度

下面開始點燈(點燈基操)

把上面網盤的FreeRTOS裡面的檔案夾打開,然後把mian函數裡面的内容複制到固件庫模闆裡面

然後運作

我是在stm32c8t6上面燒錄的,如果其他闆子可能晶振不一樣要修改時鐘頻率

繼續閱讀