您的位置:首页 > 其它

FreeRTOS操作系统移植

2017-02-26 22:44 211 查看
参考安富莱的FreeRTOS教程学习的

移植好的工程地址http://download.csdn.net/detail/chen244798611/9764741

1、移植前准备

一、开发环境MDK、STM32F103R8T6(我身边的板子是这个型号、学习用)

二、简单工程里面不能有 SysTick,PendSV 和 SVC 三个系统中断的使用,因为 FreeRTOS 系统要使用这三个中断

2、正式移植

一、从官网下载FerrRTOS FreeRTOS下载地址 https://sourceforge.net/projects/freertos/files/FreeRTOS/V8.2.3/


下载红色箭头的版本。

二、在简单的工程里新建一个FreeRTOS文件夹



三、添加文件到第二步新建的FreeRTOS文件夹里面

解压刚才下载的软件包,打开可以看到如下文件,把FreeRTOS里面的source复制到第二步新建的文件夹里面



在User文件夹中添加FreeRTOSConfig.h 文件中

FreeRTOSConfig.h 文件所在的路径 FreeRTOS\FreeRTOSV8.2.3\FreeRTOS\Demo\CORTEX_STM32F103_Keil 因为使用的是stm32而且是keil

四、添加文件至工程

把FreeRTOS相关的文件添加到简单的工程里面,如下图



其中heap_4.c文件的路径是 FreeRTOS\FreeRTOSV8.2.3\FreeRTOS\Source\portable\MemMang

port.c和portmacro.h文件的路径是 FreeRTOS\FreeRTOSV8.2.3\FreeRTOS\Source\portable\RVDS\ARM_CM3

五、新建一个includes.h的头文件 将所有的头文件添加到这里



六、添加头文件的路径



七、添加宏定义 在FreeRTOSConfig.h末尾



在FreeRTOSConfig.h文件的末尾加上 Systick,PendSV 和 SVC 中断函数的宏定义,目的是将 FreeRTOS 移

植文件 port.c 文件里面的中断服务程序映射到 CMSIS 定义的标准名称,这样就不需要用户去修改工

程启动代码中这几个中断的名字了,很方便就实现了两个函数的统一。

八、删除stm32f10x_it.c文件中的 PendSV 和 SVC 中断函数的的定义

九、修改任务堆栈的大小、根据自己板子修改 如果RAM大可以不修改



到这里移植工作基本OK

三、编写程序测试

#include "includes.h"

TaskHandle_t xHandleTaskLEDON = NULL;

TaskHandle_t xHandleTaskLEDOFF = NULL;

void vTaskLEDON(void *pvParameter)

{

while(1)

{

GPIO_SetBits(GPIOB,GPIO_Pin_9);//led灭

vTaskDelay(400);

}

}

void vTaskLEDOFF(void *pvParameter)

{

while(1)

{

GPIO_ResetBits(GPIOB,GPIO_Pin_9);//led亮

vTaskDelay(200);

}

}

void TaskCreate(void)

{

xTaskCreate(vTaskLEDON, //任务函数

"vTaskLEDON", //任务名

512, //任务栈大小

NULL, //任务参数

1, //任务优先级

xHandleTaskLEDON //任务句柄

);

xTaskCreate(vTaskLEDOFF, //任务函数

"vTaskLEDFF", //任务名

512, //任务栈大小

NULL, //任务参数

2, //任务优先级

xHandleTaskLEDOFF//任务句柄

);

}

/*

*********************************************************************************************************

* 函 数 名: main

* 功能说明: c程序入口

* 形 参:无

* 返 回 值: 错误代码(无需处理)

*********************************************************************************************************

*/

int main()

{

__set_PRIMASK(1);

bsp_InitLED();//初始化LED

TaskCreate();//创建任务

vTaskStartScheduler();//启动调度,开始执行任务

while(1)

{

}

}

测试结果LED不停的闪烁 ,这样可以证明移植成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  FreeRTOS