手动移植Free-RTOS二三事

本文介绍了如何将FreeRTOS手动移植到STM32CubeMX生成的项目中,包括从FreeRTOS官网下载源码并选择特定文件添加到工程,创建并配置FreeRTOSConfig.h文件,以及修改中断回调函数以兼容FreeRTOS的时钟处理。同时,文章讨论了手动移植的原因,如避免使用CMSIS-RTOS,保持原生FreeRTOS的特性。
摘要由CSDN通过智能技术生成

一:利用STM32CubeMX生成+手动移植FreeRTOS

1. 从FreeRTOS官网下载源码,将部分文件拷出

将红框的文件拷贝到CubeMX生成的项目中
详见说明

         在新建的STM32CubeMX工程中可以创建一个名为"RTOS"的文件夹,然后将上方左图选中的文件拷入此文件夹中。

        此后进入FreeRTOS/Source/portable文件夹中,进入GCC文件夹,进入你的芯片对应的内核文件夹,将里面的文件拷贝到项目中。然后返回上一级打开MemMang文件夹,拷贝heap_4.c文件到项目中。

        最后自己新建一个名为"FreeRTOSConfig.h"的文件,此文件具体内容参见:点我

下面我给一些常见的"FreeRTOSConfig.h"文件里面的参数。

二:相关"FreeRTOSConfig.h"参数

         具体每个参数的意思,请学习相关系统知识。

configUSE_PREEMPTION //1使用抢占式内核,0使用协程
configUSE_TIME_SLICING//1使能时间片调度(默认式使能的)
configCPU_CLOCK_HZ

//CPU频率(可以设为SystemCoreClock)

configTICK_RATE_HZ//时钟节拍频率,👆设好后,这里设置为1000,周期为1ms
configMINIMAL_STACK_SIZE//空闲任务使用的堆栈大小
configMAX_TASK_NAME_LEN//任务名字字符串长度

        建议前往正点原子下载例程取得"FreeRTOSConfig.h"文件,然后参看官网说明,以及相关书籍来编写自己的"FreeRTOSConfig.h"文件。

三:其他函数的修改

        在中断回调函数的stm32****_it.c文件中,屏蔽PendSV_Handler,SVC_Handler函数,然后在SysTick_Handler函数中可以这样写:

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

void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */
#if (INCLUDE_xTaskGetSchedulerState == 1 )
  if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
  {
#endif /* INCLUDE_xTaskGetSchedulerState */
  xPortSysTickHandler();
#if (INCLUDE_xTaskGetSchedulerState == 1 )
  }
#endif /* INCLUDE_xTaskGetSchedulerState */
  /* USER CODE END SysTick_IRQn 1 */
}

这样当你使用HAL_Delay函数和FreeRTOS中的vTaskDelay函数都会起作用。但是那个if判断条件的宏定义必须在"FreeRTOSConfig.h"中增加,这个的意义是:如果没有检测到FreeRTOS的初始化,那么就不会执行xPortSysTickHandler函数。(如果你不加这个if判断并且也没初始化RTOS,那么执行此xPortSysTickHandler函数会直接跑进硬件错误)

后记

        为什么要手动移植Free-RTOS,首先应该不会只用STM32的芯片,其次STM32CubeMX生成的FreeRTOS是ARM公司封装的CMSIS-RTOS,感觉还是原汁原味好一些。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值