FreeRTOS移植到stm32

一、下载FreeRTOS源码

        官网:FreeRTOS官网

        下载第一个带有示例的

 二、在自己stm32工程代码中建立FreeRTOS文件夹,在此文件夹下建立port、src两个子文件夹,(include文件夹到时候在源码直接拷贝过来)

include:存放FreeRTOS源码头文件

src:存放相关源码

port:存放内存管理,平台,内核相关代码

 三、移植FreeRTOS代码到自己工程目录

  1. 打开 FreeRTOS V9.0.0 源码,在“FreeRTOSv9.0.0\FreeRTOS\Source”目录下找到 所有的‘.c 文件’,将它们拷贝到我们新建的 src 文件夹中
  2. 打开 FreeRTOS V9.0.0 源码,在“FreeRTOSv9.0.0\FreeRTOS\Source\portable”目录下找到“MemMang”文件夹与“RVDS”文件夹,将它们拷贝到我们新建的 port 文件夹中
  3. 打开 FreeRTOS V9.0.0 源码,在“FreeRTOSv9.0.0\ FreeRTOS\Source”目录下找到 “include”文件夹,它是我们需要用到 FreeRTOS 的一些头文件,将它直接拷贝 到我们新建的 FreeRTOS 文件夹中
  4. 打开 FreeRTOSv9.0.0 源码,在“FreeRTOSv9.0.0\FreeRTOS\Demo”文件夹下面找到 “ CORTEX_STM32F103_Keil ” 这 个 文 件 夹 , 双 击 打 开 , 在 其 根 目 录 下 找 到 这 个 “FreeRTOSConfig.h”文件,然后拷贝到我们工程的 user 文件夹下即可

 四、在keil中配置

1.新建FreeRTOS/src和FreeRTOS/port分组,将源代码添加到工程,如下图

 

2.配置头文件路径

3.修改 FreeRTOSConfig.h

(1).修改与对应开发板的头文件 , 如果是使用 STM32F1 的开发板,则包含 F1 的头文件#include "stm32f10x.h",同理是 使用了其它系列的开发板,则包含与开发板对应的头文件即可

(2).定义两个宏

  • #define xPortPendSVHandler   PendSV_Handler
  • #define vPortSVCHandler        SVC_Handler

注意:需要根据自己开发板的实际情况修改系统总的堆大小,修改下面这个宏

#define configTOTAL_HEAP_SIZE           ((size_t)(15*1024))
4.修改 stm32f10x_it.c  

(1).包含#include "FreeRTOS.h"头文件

(2).注释PendSV_Handler()SVC_Handler()这两个函数

(3).修改中断服务函数

 //systick 中断服务函数 
 void SysTick_Handler(void) 
{ 
#if (INCLUDE_xTaskGetSchedulerState == 1 ) 
    if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) 
    { 
#endif /* INCLUDE_xTaskGetSchedulerState */ 
         xPortSysTickHandler(); 
#if (INCLUDE_xTaskGetSchedulerState == 1 ) 
     } 
#endif /* INCLUDE_xTaskGetSchedulerState */ 
 }

注意:如果发生下面报错,则将#include "FreeRTOSConfig.h"头文件中的

#define INCLUDE_xTaskGetSchedulerState       1       注释即可

 

至此移植完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
FreeRTOS是一个开源的实时操作系统,可以用于嵌入式系统的开发。要将FreeRTOS移植STM32F407上,需要进行以下几个步骤。 首先,需要包含FreeRTOS的头文件和移植文件。头文件包含了FreeRTOS的函数声明和宏定义,移植文件是连接FreeRTOS和具体硬件的桥梁。在移植文件中,可以根据使用的开发环境选择需要的文件,其他文件可以删除。\[1\] 其次,需要修改delay_us()函数。这个函数用于实现微秒级的延时。在函数中,需要根据系统的时钟频率和延时时间计算出需要的时钟周期数,并使用SysTick定时器进行延时。\[2\] 然后,需要屏蔽FreeRTOSSTM32F407提供的相同的中断服务函数。在stm32f4xx_it.c文件中,可以直接屏蔽对应的函数。另外,也可以在FreeRTOSConfig.h文件中注释掉对应的宏定义。这样可以避免中断冲突。\[3\] 最后,进行程序测试,确保FreeRTOSSTM32F407上正常运行。 总结起来,将FreeRTOS移植STM32F407上需要包含头文件和移植文件,修改延时函数,屏蔽相同的中断服务函数,并进行程序测试。 #### 引用[.reference_title] - *1* *2* [STM32F407移植FreeRTOS操作系统](https://blog.csdn.net/weixin_42960194/article/details/128965478)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [FreeRTOS移植STM32F407](https://blog.csdn.net/pwzpwz1/article/details/128544576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值