[mw_shl_code=c,true]FreeRTOS在探索者开发板的移植
说明:本次移植在试验1 跑马灯试验下进行
一、 准备工作
在工程目录下建立OS文件夹,并在OS下建立include文件夹,如下图
[/mw_shl_code]
[mw_shl_code=c,true]二、 解压FreeRTOSV8.2.3,并拷贝相关文件
将FreeRTOSV8.2.3/FreeRTOS/Source文件夹下的croutine.c、event_groups.c、list.c、
queue.c、tasks.c、timers.c 6个.c文件拷贝至上述工程的OS文件夹下;将FreeRTOSV8.2.3/
FreeRTOS/Source/portable/RVDS/ARM_CM4F文件夹下的port.c拷贝至OS文件夹下;将
FreeRTOSV8.2.3/FreeRTOS/Source/portable/MemMang文件夹下的heap_2.c拷贝至OS文件夹下。
将FreeRTOSV8.2.3/FreeRTOS/Source/include下的所有.h文件拷贝至OS/include下;将
FreeRTOSV8.2.3/FreeRTOS/Source/portable/RVDS/ARM_CM4F下的portmacro.h拷贝至OS/include下;将FreeRTOSV8.2.3/FreeRTOS/Demo/CORTEX_M4F_M0_LPC43xx_Keil文件夹下的FreeRTOSConfig.h拷贝至OS/include下 。
以上相关文件,针对M4内核。其它内核,如果不知道在哪个文件夹下,可参考FreeRTOS文件下的相关Demo进行检索。
三、 修改工程
添加OS组,并将相关.c加入OS组下,添加.h路径,如下图
[/mw_shl_code]
[mw_shl_code=c,true]四、 修改相关文件及参数
1、 将FreeRTOSConfig.h的头文件#include "LPC43xx.h",替换为#include "stm32f4xx.h"
2、 将stm32f4xx_it.c文件内的三个函数注释掉,FreeRTOS本身已经定义过。
void SVC_Handler(void)
{
}
void PendSV_Handler(void)
{
}
void SysTick_Handler(void)
{
}
3、 修改FreeRTOSConfig.h里的相关功能开关
configUSE_IDLE_HOOK、configUSE_TICK_HOOK、configCHECK_FOR_STACK_OVERFLOW、configUSE_MALLOC_FAILED_HOOK 四个宏定义都设置为0,如有需要,自行定义函数并开启
4、 修改freertos的cpu时钟
#define configCPU_CLOCK_HZ (168000000UL )
五、 修改main函数
经过以上修改,编译后 0错误,0警告,此时进行主函数的修改
在main.c里添加头文件#include "FreeRTOS.h" 、 #include "task.h"
1、 首先定义任务函数
[/mw_shl_code]
[mw_shl_code=c,true]2、编写main函数[/mw_shl_code]
[mw_shl_code=c,true]vTaskDelay(2000/portTICK_PERIOD_MS); //FreeRTOS的延时函数
xTaskCreate(TASK1,"TASK",512,NULL,2,NULL); //FreeRTOS的创造函数
vTaskStartScheduler(); //开启FreeRTOS
以上函数如何使用自行百度
经过以上操作,再次编译并进行下载,将会看到DS0、DS1轮流闪烁[/mw_shl_code]
工程文件在6楼
FreeRTOSV8.2.3源码在7楼
移植过程在8楼
|