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提供移植参考

猜你喜欢

转载自blog.csdn.net/Hxj_CSDN/article/details/84677189