MDK移植freeRTOS及多任務創建
- 一、移植前準備
- 二、freeRTOS移植
- 三、創建任務
本文所使用的硬體為野火的指南者開發板,購買后,商家會提供已經移植好freeRTOS的工程可以直接使用進行開發,
但如果沒有現成的框架,就需要自己移植,ST公司開發了集成了freeROTS可視化操作的stm32cubeIDE,可方便快捷的進行開發,但使用的是HAL庫,在之后的文章中會進行介紹,
本文主要講在keil中完成stm32標準庫里freeRTOS作業系統的手動移植,并簡單的創建兩個不同頻率的led閃爍和串口資料發送這3個任務
一、移植前準備
- 在freeROTS官網下載freeROTS原始碼,下載后解壓

- 新建一個檔案夾freeRTOS,將剛才解壓檔案夾中的 FreeROTS\Source\ 目錄下的所有檔案復制到新建檔案夾中

- 將
portable/RVDS中的CM3復制到keil檔案夾中


- 將解壓的原始碼檔案夾中的
FreeRTOS\Demo\CORTEX_stm32f103_keil中的FreeRTOSConfig.h復制到自己新建的檔案夾中


二、freeRTOS移植
- 打開商家提供的一個例程,在例程目錄中,將剛才自己新建的檔案夾
freeRTOS復制進去

- 打開工程,在工程中新建組
FreeRTOS


- 向組
FreeRTOS添加檔案

需要添加的檔案都在剛才復制到工程目錄的檔案夾中,路徑如下:
freeRTOS\tasks.c
freeRTOS\list.c
freeRTOS\portable\Keil\ARM_CM3\port.c
freeRTOS\portable\MemMang\heap_4.c - 添加頭檔案路徑,右鍵工程,按照以下步驟,添加freeRTOS的頭檔案所在路徑


添加完成后進行編譯,編譯成功即說明移植已經基本完成了

- 想要進行實時作業系統下的編程,還需要對FreeRTOSConfig.h和stm32f10x_it.c兩個檔案進行修改,在左邊工程欄中找到檔案,打開進行修改,下面分別是兩個檔案中需要進行修改的部分,如果沒有則自己添加
FreeRTOS.h



stm32f10x_it.c


修改完成后,編譯成功即可進行主程式的撰寫,
三、創建任務
- 在
main.c輸入以下代碼
/* FreeRTOS頭檔案*/
#include "FreeRTOS.h"
#include "task.h"
/*stm32頭檔案*/
#include "bsp_led.h"
#include "bsp_usart.h"
#include "stm32f10x.h"
void Task1_led1() //任務一
{
while(1)
{
LED1_ON;
vTaskDelay(500); //延時500ms
LED1_OFF;
vTaskDelay(500); //延時500ms
}
}
void Task2_uart() //任務二
while(1)
{
Usart_SendString( DEBUG_USARTx,"賈哥你好帥\n");
vTaskDelay(2000); //延時2000ms
}
}
void Task3_led2() //任務二
{
while(1)
{
LED2_ON;
vTaskDelay(1000); //延時1000ms
LED2_OFF;
vTaskDelay(1000); //延時1000ms
}
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); //中斷優先級設定為組4
LED_GPIO_Config(); //LED初始化
USART_Config(); //串口初始化
xTaskCreate(Task1_led1, //任務一函式指標
"TASK1_led1", //任務一名稱
40, //堆疊深度(位元組)
NULL, //任務引數為空
1, //任務優先級設定,數字越大優先級越高
NULL); //任務句柄為空
xTaskCreate(Task2_uart,"TASK2_uart",40,NULL,2,NULL); //同上
xTaskCreate(Task3_led2,"TASK3_led2",40,NULL,3,NULL); //同上
vTaskStartScheduler(); //啟動任務調度器,系統運行
while(1)
{
}
}
注意中斷優先級的設定,需設定為 組4 ,在串口初始化函式中也要將其設定為 4
所有用到的頭檔案以及對應的C檔案都要放到工程目錄中,并添加到工程中
運行后,可以看到3個任務是幾乎同步運行的,
- 效果圖,Y因為指南者板子的燈是復合燈,程式控制紅燈間隔500ms,綠燈間隔1000ms,所以中間會出現紅綠混合色,


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/229292.html
標籤:其他
