参考安富莱的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不停的闪烁 ,这样可以证明移植成功