本帖最后由 八度空间 于 2017-3-12 11:32 编辑
移植硬件平台:项目板子
编译环境:IAR7.6
库版本:V1.2.2
FreeRTOS版本:V9.0.0
一、下载FreeRTOS源码
官网直接下载http://www.freertos.org/a00104.html或者原子哥光盘附带的,本贴也上传
1.jpg (44.2 KB, 下载次数: 9)
2017-3-12 10:18 上传
二、解压源码
2.1、新建工程,工程中建FreeRTOS文件夹存放源码
2.2、打开解压文件“..\FreeRTOSv9.0.0”
2.jpg (22.87 KB, 下载次数: 12)
2017-3-12 10:25 上传
2.3、打开“FreeRTOS”文件夹,看到“Source”文件夹,这就是源码了,至于“FreeRTOS-Plus”文件夹就大家自己研究了,像研究水果6plus一样研究
3.jpg (17.61 KB, 下载次数: 9)
2017-3-12 10:28 上传
将此文件夹所有东西拷贝到工程新建的“FreRTOS”文件夹中
4.jpg (22.96 KB, 下载次数: 7)
2017-3-12 10:30 上传
2.4、在源码demo文件夹里“..\FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK”(STM32F302是Cortex-M4内核的)拷贝“FreeRTOSConfig.h”文件到工程中(放位置随意)
5.jpg (40.24 KB, 下载次数: 11)
2017-3-12 10:35 上传
6.jpg (41.95 KB, 下载次数: 11)
2017-3-12 10:37 上传
二、打开IAR软件新建工程(可参考http://www.openedv.com/thread-74004-1-1.html这贴进行,至于MDK就大家自行新建了
),往文件夹丢文件就是了
7.jpg (24.39 KB, 下载次数: 7)
2017-3-12 10:40 上传
“port.c和portmacro.h”文件路径“..\FreeRTOS\portable\IAR\ARM_CM4F”
“portasm.s”文件路径(IAR工程必须添加,MDK工程没有的):“..\FreeRTOS\portable\IAR\ARM_CM4F”
”heap_x“文件路径:”..\FreeRTOS\portable\MemMang“
三、配置工程,添加头文件路径(可参考http://www.openedv.com/thread-74004-1-1.html这贴进行)
8.jpg (62.16 KB, 下载次数: 7)
2017-3-12 10:46 上传
四、配置IAR环境完成
4.1、编写main函数
9.jpg (15.63 KB, 下载次数: 4)
2017-3-12 10:48 上传
就弄了两个任务在跑,一个是闪灯(板子上只有一个LED),一个是串口每隔1s就输出一个浮点运算(前面说的STM32F302使用的是Cortex-M4内核),有带浮点计算单元的FPU
4.2、修改文件”FreeRTOSConfig.h“
打开文件,在开头位置,增加相关的环境预编译条件
12.jpg (38.46 KB, 下载次数: 5)
2017-3-12 10:57 上传
上一个框框就是文件自带的,我增加几个编译环境的宏定义判断,或者去掉也行,下面一个框框就是MDK编译环境的区别了,接下来就是FreeRTOS裁剪宏定义了
4.3、修改”SYSTEM“相关文件
4.3.1、修改”sys“文件
主要是增加宏定义相关说明,详见工程
4.3.2、修改”delay“文件
增加FreeRTOS支持
[mw_shl_code=applescript,true]/**
*****************************************************************************
* @name : 初始化延时函数
*
* @Brief : 主要Cortex-M3内核对系统时钟计数单元
* 详细见《Cortex-M3权威指南(中文)》第216页 a) 时钟周期(CYCCNT) 的内容
* 周立功《CM3计数参考手册》第28、29页、第110、125页
*
* @Input : none
*
* @Output : none
*
* @Return : none
*****************************************************************************
**/
void delay_init(void)
{
#if _DELAY_TYPE == 1 //使用其他资源做延时时基
DEM_CTRL |= 1<<24; //该位必须为1,使能跟踪和调试模块的使用。详细见:周立功《CM3计数参考手册》第115页介绍
//在没有使用跟踪时,该位使能对功率使用的控制。它能够由应用程序或调试器使能,供ITM使用
//在DWT能够使用之前,调试异常和监控控制寄存器的TRCENA(bit24)位必须置位
DWT_CTR