STM32F103移植FreeRTOS完整过程

13 篇文章 0 订阅
2 篇文章 0 订阅

前言

演示STM32F103移植FreeRTOS完整过程,文末提供移植好的完整工程和源码

1.下载源码

下载FreeRTOSv9.0.0.zip解压如下图,如果下载太慢,文末提供移植好的完整工程和源码
在这里插入图片描述
只用关注第一个文件夹FreeRTOS中的内容
在这里插入图片描述
Demo是官方提供的常见芯片的移植示例,包括STM32F103,我们需要用到其中的FreeRTOSConfig.h配置文件。
Source是源文件。


2.拷贝源码

在工程目录下创建FreeRTOS文件夹并创建子文件夹src和port
在这里插入图片描述
将Source/include文件夹拷贝到FreeRTOS下

将Source中的C文件拷贝到FreeRTOS/src下
在这里插入图片描述

将Source/portable下的MemMang和RVDS文件夹拷贝到FreeRTOS/port下,

其中MemMang下的源文件是用于堆栈管理的,RVDS下的源文件是不同内核相关的接口文件。
在这里插入图片描述

3.添加到工程

在这里插入图片描述
新建FreeRTOS/src和FreeRTOS/port组

FreeRTOS/src组中把FreeRTOS/src文件夹中的源文件全部添加

FreeRTOS/port组添加FreeRTOS\port\MemMang中的heap4.c和

FreeRTOS\port\RVDS\ARM_CM3中的port.c


添加头文件路径
在这里插入图片描述
拷贝FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_Keil下的FreeRTOSConfig.h文件到工程


4.修改配置

在FreeRTOSConfig.h中添加

#define xPortPendSVHandler 	PendSV_Handler
#define vPortSVCHandler 	SVC_Handler

在stm32f10x_it.c中屏蔽PendSV_Handler和SVC_Handler中断

最关键的一部,修改stm32f10x_it.c中的systick中断服务函数。

/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval None
*/
extern void xPortSysTickHandler(void);
void SysTick_Handler(void)
{
    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
      if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
      {
    #endif  /* INCLUDE_xTaskGetSchedulerState */  
        xPortSysTickHandler();
    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
      }
    #endif  /* INCLUDE_xTaskGetSchedulerState */
}


5.验证demo

#include "stm32f10x.h"
#include "FreeRTOS.h"
#include "task.h"
#include "portmacro.h"
#include "bsp_led.h"  
#include "log.h"

static TaskHandle_t led_task_handle = NULL;

void led_task(void *arg)
{
	while(1)                            
	{
		led_status_set(LED_STATUS_ON);
		LOG_DEBUG("LED_STATUS_ON\r\n");
		vTaskDelay(500/portTICK_PERIOD_MS);
		led_status_set(LED_STATUS_OFF);
		LOG_DEBUG("LED_STATUS_OFF\r\n");
		vTaskDelay(500/portTICK_PERIOD_MS);
	}
}

int main(void)
{
	led_init();

	xTaskCreate(led_task, "led_task", 1024, NULL, 20, &led_task_handle);

	// 开启调度
	vTaskStartScheduler();
	while(1);
}


6.完整工程

亲测可用,完整工程地址。
在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值