赞
踩
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。FreeRTOS-百度百科
FreeRTOS是一款 “开源免费”的实时操作系统,遵循的是GPLv2+的许可协议。
FreeRTOS的源码和相应的官方书籍均可从官网FreeRTOS获得。
本实践源码版本是v9.0.0。
百度网盘:FreeRTOSv9.0.0提取码:yv8r
MemMang:里面存放的是FreeRTOS自带的内存管理方案的源文件
FreeRTOS的源码核心部分是tasks.c
和list.c
具体步骤请参考FreeRTOS移植到STM32F103步骤与注意事项
PS:其中有IAR和MDK版,请在导入工程时仔细看清要求。
下面我将按照上面博客进行再次配置文件。
FreeRTOS\tasks.c
FreeRTOS\list.c
FreeRTOS\portable\Keil\ARM_CM3\port.c
FreeRTOS\portable\MemMang\heap_4.c
具体导入就是以上文件。
用英文
;
进行相关注释。
由于FreeRTOS对这几个中断的名称做了自己的定义,因此必须要重定义这几个函数才能正常进入中断,但这么做又会跟ST提供的stm32f10x_it.c文件当中定义的中断相冲突,因此必须将stm32f10x_it.c下对应的几个中断服务函数屏蔽掉,否则编译会提示函数重定义。
任务要求:
在STM32下完成一个基于FreeRTOS的多任务程序,执行3个周期性task,具体任务不限,但建议如下:
task1,每间隔500ms闪烁(变化)一次LED;
task2,每间隔2000ms,向串口发送一次指令数据“helloworld!";
task3,每间隔5000ms,从AHT20采集一次温湿度数据(不考虑硬件情况,仅写出整个多任务框架模拟代码)。
main.c
void LedTask1(void* pvParameters) //任务一:每间隔500ms闪烁(变化)一次LED { while(1) { LED0=0; printf("灯亮!\r\n"); vTaskDelay(500); LED0=1; printf("灯灭!\r\n"); vTaskDelay(500); } } void USART_printfTask2(void* pvParameters) //任务二:每间隔2000ms,向串口发送一次指令数据“helloworld!" { while(1) { vTaskDelay(1000); printf("Hello Windows!\r\n"); } } void AHT20Task3(void* pvParameters) //任务三:每间隔5000ms,从AHT20采集一次温湿度数据 { /* 由于没有硬件,以后更新 */ } int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); LED_Init(); //LED初始化 uart_init(115200); //UART初始化并设置波特率115200 //任务一:每间隔500ms闪烁(变化)一次LED xTaskCreate(LedTask1, //任务函数指针 "LedTask1", //任务名称 40, //堆栈深度(字) NULL, //任务参数为空 1, //任务优先级 NULL); //任务句柄为空 //任务二:每间隔2000ms,向串口发送一次指令数据“helloworld!" xTaskCreate(USART_printfTask2, "LedTask1", 40, NULL, 2, NULL); //任务三:每间隔5000ms,从AHT20采集一次温湿度数据 /* xTaskCreate(AHT20Task3, "AHT20Task3", 40, NULL, 3, NULL);*/ vTaskStartScheduler(); //启动任务调度器(操作系统开始运行〕 while(1) { } }
编译成功之后就可以进行烧录至STM32中并进行串口调试了。
以上就是LED闪烁和串口输出“Hello Windows!”实现效果。
通过此次实践学习,我初识了FreeRTOS多任务系统,并基本掌握了FreeRTOS的多任务的创建和实践。此次试验中我遇到了不少问题,特别感谢我的老师和同学对我的帮助,以及网上大佬们的资料。
[1]野火官方书籍《FreeRTOS内核实现与应用开发实战》
[2]FreeRTOS移植到STM32F103步骤与注意事项
[3]freertos移植stm32 步骤分析
[4]FreeRTOS移植到STM32上的移植过程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。