1. 程式人生 > >FreeRTOS筆記(二)移植STM32F407

FreeRTOS筆記(二)移植STM32F407

文章目錄


上一文連結:FreeRTOS筆記(一)概念

01 - 下載FreeRTOS

  進入官網中下載,小白選擇的是V9.0.0,作為學習而言其實版本差別不大,選擇這個版本的原因是小白看的書是這個版本的。

  執行exe檔案,得到解壓包,原始碼就在FreeRTOS\Source目錄下。FreeRTOS-Plus是一些擴充套件功能,暫時不需要理會。

02 - 移植STM32F407

  在keil5下新建一個標準庫工程,工程檔案中新建FreeRTOS資料夾,把FreeRTOS\Source目錄下的所有檔案都複製到工程中的FreeRTOS。

  FreeRTOS的執行之前需要一些系統配置,配置檔案可以自己建立,但是官方給出了例程,直接在例程中複製,因為是移植到STMF4,所以在Demo中找對應的架構,把FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK\FreeRTOSConfig.h檔案,複製新建工程的FreeRTOS/include中,這個標頭檔案暫時不需要修改。

  keil5工程中新建兩個組FreeRTOS_CORE(存放核心原始碼 )和FreeRTOS_PRETABLE(存放記憶體管理檔案和硬體相關配置檔案)

Group

FreeRTOS_CORE:FreeRTOS\Source下的c和h檔案,include和 portable資料夾除外

FreeRTOS_PRETABLE:FreeRTOS\Source\portable\MemMang\heap_4.c和FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c

  然後編譯,0 error,0 warning,工程準備成功。

03 - LED燈閃爍實驗

  驗證移植是否成功,做一個最簡單的LED燈閃爍實驗,只有一個任務start,任務開始後就閃爍LED燈。
  新建test.h和test.c檔案,把LED燈實驗原始碼複製到工程中,根據FreeRTOS\Demo\CORTEX_STM32F103_Keil的範例,能夠知道任務是如何建立、執行的。於是test.h程式碼如下:

#ifndef _TASK_TEST_H_
#define _TASK_TEST_H_

#include "FreeRTOS.h"
#include "task.h"

/* Start 任務 */
#define START_TASK_PRIO					1		//優先順序
#define STATR_STACK_SIZE					128		//堆疊大小
extern TaskHandle_t StartTask_Handler;			//任務控制代碼
void start_task(void *pParam);					//任務函式

#endif

  而test.c中定義控制代碼並定義函式

#include "led.h"
#include "FreeRTOS.h"
#include "task.h"
#include "task_test.h"

TaskHandle_t StartTask_Handler;		//任務控制代碼

/* Start 任務 */
void start_task(void *pParam)
{
	for(;;)
	{
		GPIO_SetBits(GPIOF,GPIO_Pin_10);
		vTaskDelay(200);
		GPIO_ResetBits(GPIOF,GPIO_Pin_10);
		vTaskDelay(200);
	}
}		

  main函式則建立任務,開啟排程器。

#include "stm32f4xx.h"
#include "FreeRTOS.h"
#include "task.h"
#include "task_test.h"

int main(void)
{
	NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
	LED_Init();
	
	xTaskCreate( (TaskFunction_t)start_task,
				 (const char*)"start_task",
				 (uint16_t)STATR_STACK_SIZE,
				 (void*)NULL,
				 (UBaseType_t)START_TASK_PRIO,
				 (TaskHandle_t*)&StartTask_Handler
	);
	
	vTaskStartScheduler();
				 
	while(1);
}

  編譯下載,LED燈閃爍,移植成功。

04 - 總結

  • FreeRTOS是一個開源又免費的嵌入式實時作業系統
  • FreeRTOS已經被移植到各個重要平臺比如ARM、Linux、Window等等
  • FreeRTOS官方有非常多的Demo提供移植參考