STM32學習筆記(1)如何移植FreeRTOS

STM32固體庫創建demo

下載相關文件

keil5下載地址:keil5

下載相關的pack包:Keil.STM32F1xx_DFP.2.1.0.pack

移植所需的freertos源碼:FreeRTOSv9.0.0.exe

移植所需的STM32固件庫:STM32F10x_StdPeriph_Lib_V3.5.0.rar

建立固體庫項目

建立如下圖所示的項目組:

BSP目錄放相關的driver.

FreeRTOS目錄將放置我們所需移植的東西

Libraries目錄將防止我們固體庫所需的代碼如下:

USER放置main函數,並放置一些用戶自己定製的一些文件

如何真的進行相關的操作可以參考STM32F1開發指南-庫函數版本_V3.1 .pdf的第三章

差不多準備工作完成了,下面重點就是如何移植FreeRTOSv9.0.0

移植FreeRTOSv9.0.0到STM32F103中

1.1打開解壓後點源碼

1.2雙擊打開“FreeRTOS”文件夾,看到如下文件

圖中圈圈的就是源碼了,整個文件夾拷貝到新建工程的“FreeRTOS”文件夾中

1.3在源碼文件夾中**\FreeRTOS\Demo\CORTEX_STM32F103_Keil這個路徑下,找到文件FreeRTOSConfig.h**,拷貝到工程文件夾FreeRTOS中

1.4打開keil,添加文件

添加文件如上如所示

“port.c”文件路徑…\FreeRTOS\Source\portable\RVDS\ARM_CM3

“heap_2.c”文件路徑…\FreeRTOS\Source\portable\MemMang

“list.c”、“queue.c”、“tasks.c”文件路徑…\FreeRTOS\Source

1.5添加頭文件

注意填入:STM32F10X_HD,USE_STDPERIPH_DRIVER

1.6修改main函數


#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "misc.h"

#include "led.h"


void LED0_Task(void * pvParameters);
void LED1_Task(void * pvParameters);

int main(void)
{
	LED_Init();
	
	xTaskCreate(LED0_Task, (const char *)"LED0", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 3, NULL);
	xTaskCreate(LED1_Task, (const char *)"LED1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 4, NULL);
	
	vTaskStartScheduler();
}

void LED0_Task(void * pvParameters)
{
	while (1)
	{
		LED0 = !LED0;
		vTaskDelay(800 / portTICK_RATE_MS);
	}
}

void LED1_Task(void * pvParameters)
{
	while (1)
	{
		LED1 = !LED1;
		vTaskDelay(500 / portTICK_RATE_MS);
	}
}

1.7修改啓動文件

遇到問題

在移植過程中難免有錯誤。需要我們去解決

問題一 編譯

…\OBJ\FreeRTOS.axf: Error: L6218E: Undefined symbol vApplicationTickHook (referred from tasks.o).

可以選擇在BSP目錄下添加相關的程序代碼。

void vApplicationTickHook(void)
{
  
}

關於項目

本項目在github上已經有了,可以從我的github上進行下載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章