MDK移植freeRTOS及多任务创建
- 一、移植前准备
- 二、freeRTOS移植
- 三、创建任务
本文所使用的硬件为野火的指南者开发板,购买后,商家会提供已经移植好freeRTOS的工程可以直接使用进行开发。
但如果没有现成的框架,就需要自己移植,ST公司开发了集成了freeROTS可视化操作的stm32cubeIDE,可方便快捷的进行开发,但使用的是HAL库,在之后的文章中会进行介绍。
本文主要讲在keil中完成stm32标准库里freeRTOS操作系统的手动移植,并简单的创建两个不同频率的led闪烁和串口数据发送这3个任务
一、移植前准备
- 在freeROTS官网下载freeROTS源码,下载后解压
- 新建一个文件夹freeRTOS,将刚才解压文件夹中的 FreeROTS\Source\ 目录下的所有文件复制到新建文件夹中
- 将
portable/RVDS
中的CM3
复制到keil
文件夹中
- 将解压的源码文件夹中的
FreeRTOS\Demo\CORTEX_stm32f103_keil
中的FreeRTOSConfig.h复制到自己新建的文件夹中
二、freeRTOS移植
- 打开商家提供的一个例程,在例程目录中,将刚才自己新建的文件夹
freeRTOS
复制进去
- 打开工程,在工程中新建组
FreeRTOS
- 向组
FreeRTOS
添加文件
需要添加的文件都在刚才复制到工程目录的文件夹中,路径如下:
freeRTOS\tasks.c
freeRTOS\list.c
freeRTOS\portable\Keil\ARM_CM3\port.c
freeRTOS\portable\MemMang\heap_4.c - 添加头文件路径,右键工程,按照以下步骤,添加freeRTOS的头文件所在路径
添加完成后进行编译,编译成功即说明移植已经基本完成了
- 想要进行实时操作系统下的编程,还需要对FreeRTOSConfig.h和stm32f10x_it.c两个文件进行修改,在左边工程栏中找到文件,打开进行修改,下面分别是两个文件中需要进行修改的部分,如果没有则自己添加
FreeRTOS.h
stm32f10x_it.c
修改完成后,编译成功即可进行主程序的编写。
三、创建任务
#include "FreeRTOS.h"
#include "task.h"
#include "bsp_led.h"
#include "bsp_usart.h"
#include "stm32f10x.h"
void Task1_led1()
{
while(1)
{
LED1_ON;
vTaskDelay(500);
LED1_OFF;
vTaskDelay(500);
}
}
void Task2_uart()
while(1)
{
Usart_SendString( DEBUG_USARTx,"贾哥你好帅\n");
vTaskDelay(2000);
}
}
void Task3_led2()
{
while(1)
{
LED2_ON;
vTaskDelay(1000);
LED2_OFF;
vTaskDelay(1000);
}
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
LED_GPIO_Config();
USART_Config();
xTaskCreate(Task1_led1,
"TASK1_led1",
40,
NULL,
1,
NULL);
xTaskCreate(Task2_uart,"TASK2_uart",40,NULL,2,NULL);
xTaskCreate(Task3_led2,"TASK3_led2",40,NULL,3,NULL);
vTaskStartScheduler();
while(1)
{
}
}
注意中断优先级的设置,需设置为 组4 ,在串口初始化函数中也要将其设置为 4
所有用到的头文件以及对应的C文件都要放到工程目录中,并添加到工程中
运行后,可以看到3个任务是几乎同步运行的。
- 效果图,Y因为指南者板子的灯是复合灯,程序控制红灯间隔500ms,绿灯间隔1000ms,所以中间会出现红绿混合色。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)