STM32F4移植FreeRTOS

本文详细介绍了如何将FreeRTOS操作系统移植到基于STM32F407芯片的平台,使用KeilIDE。步骤包括从例程开始,逐步添加FreeRTOS代码,调整portable目录,选择合适的FreeRTOSConfig.h,处理编译错误,以及解决函数重复定义问题。最终成功运行了两个示例任务,证明移植完成。
摘要由CSDN通过智能技术生成

在之前的文章:FreeRTOS全解析-2.源码结构与移植 中我们已经讲解过FreeRTOS移植的方法,并且给出了一个在ARM9上移植的例子,今天再来看一个例子:板子的芯片为STM32F407,架构为ARM_CM4F,IDE为keil。

1.随便找一个STM32F4例程

拿了正点原子LCD实验例程,先编译下载程序看看能不能正常运行

非常正常。

2.将FreeRTOS相关代码放到keil工程目录

如图整个复制过去

然后删减一下,portable文件夹里只保留,MemMang和RVDS两个文件夹,其他全删了。

再删减一下RVDS中的文件,因为我们的芯片是STM32F407,架构是ARM_CM4F,所以其他全删除。

在官方demo里找一个和我们架构相似的FreeRTOSConfig.h,复制进我们keil工程的USER文件夹

3.在keil中添加FreeRTOS代码

把必要的文件添加进去

别忘了设置头文件路径。

4.编译

写两个简单的任务,任务1:led循环亮灭,任务2:屏幕循环黑白切换

#include "sys.h"#include "delay.h"#include "usart.h"#include "led.h"#include "lcd.h"#include "FreeRTOS.h"#include "task.h"void vTask1( void *pvParameters ){  for( ;; ) {        LED0=0;    delay_ms(5000);    LED0=1;    delay_ms(5000);  }}void vTask2( void *pvParameters ){  for( ;; ) {    LCD_Clear(BLACK);      delay_ms(5000);    LCD_Clear(WHITE);    delay_ms(5000);  }}
static void prvSetupHardware( void ){  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);  delay_init(168);       uart_init(115200);      LED_Init();   LCD_Init();   }
int main(void)  prvSetupHardware();    xTaskCreate(vTask1, "Task 1", 1000, NULL, 1, NULL);  xTaskCreate(vTask2, "Task 2", 1000, NULL, 1, NULL);    vTaskStartScheduler();}

然后编译,有一个未定义错误。

将FreeRTOSConfig.h中的条件编译

#ifdef __ICCARM__

修改为

#if defined(__ICCARM__)||defined(__CC_ARM)||defined(__GNU__)

再编译

又提示port.o与stm32f4xx_it.o有重复定义

注释掉stm32f4xx_it.c中的SVC_Handler()、PendSV_Handler() SysTick_Handler()

再编译,又提示几个函数未定义,这是因为FreeRTOSConfig.h中配置了相关的功能,我们把相关配置关掉,就是置0。

#define configUSE_IDLE_HOOK        0#define configUSE_TICK_HOOK        0#define configCHECK_FOR_STACK_OVERFLOW  0#define configUSE_MALLOC_FAILED_HOOK  0

编译成功,效果:

两个任务都在运行,说明我们的移植已经成功了。

参考文章:

STM32F4移植FreeRTOS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪耀大叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值