FreeRTOS多任务程序

本文介绍了如何将FreeRTOS实时操作系统移植到STM32F102微控制器上,并创建了多个任务,包括定时闪烁LED、周期性发送串口数据和模拟温湿度采集。通过详细步骤展示了从前期准备、移植源码到烧录运行的全过程。

FreeRTOS简介

FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。来自百度百科

FreeRTOS移植到STM32F102

前期准备

1、从官网上下载最新版的FreeRTOS源码
下载地址FreeRTOS源码解压目录下的路径为
FreeRTOS_V9.0.0rc2\FreeRTOS\Source

移植

1、点击Source,查看源码
在这里插入图片描述2、点击portable,找到RVDS文件目录
在这里插入图片描述3、打开,拷贝ARM_CM3,移植到portable/keil中
在这里插入图片描述
在这里插入图片描述
4、打开正电原子提供的USART工程(正点原子官网下载,将其提供的压缩包解压)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述5、在main函数中编译运行一遍
在这里插入图片描述6、创建一个新的文件夹,
在这里插入图片描述

### FreeRTOS 中的任务调度与管理 #### 任务创建与初始化 在 FreeRTOS 中,每一个任务都是独立的实体,具有自己的堆栈空间和上下文环境。通过 `xTaskCreate` 函数可以创建一个新的任务[^1]。 ```c BaseType_t xTaskCreate( TaskFunction_t pvTaskCode, const char *const pcName, configSTACK_DEPTH_TYPE usStackDepth, void *pvParameters, UBaseType_t uxPriority, TaskHandle_t *pxCreatedTask ); ``` 此函数用于定义新任务的行为、名称、堆栈大小、参数传递方式以及优先级设置。 #### 调度机制概述 FreeRTOS 的核心之一是其高效的调度算法。当多个任务处于就绪状态时,调度器会依据各任务设定的不同优先级别来进行选择并执行最高优先级的那个任务[^2]。如果存在相同级别的任务,则按照时间片轮转的方式依次给予它们 CPU 使用权。 #### 延迟队列中的任务处理 对于那些被挂起等待特定事件发生才能继续运行的任务来说,会被放置到名为 DelayedTaskList 的延迟列表之中。每当定时器 tick 发生中断之后,系统便会检查这些列表内的条目,并唤醒满足条件的任务使其进入可被执行的状态[^3]。 #### 实际案例分析 考虑这样一个场景:有两个周期性的 LED 控制程序分别作为两个不同优先级的任务 A 和 B 来实现交替闪烁效果。A 设置较高优先级,在每次完成点亮操作后主动调用 vTaskDelay() 进入阻塞态;而较低优先级的 B 则会在前者休眠期间获得处理器资源从而得以工作。 ```c void led_task_a(void *arg){ while(1){ // Turn on LED_A GPIO_SetBits(GPIOB,GPIO_Pin_0); vTaskDelay(pdMS_TO_TICKS(50)); // Wait for 50ms // Turn off LED_A GPIO_ResetBits(GPIOB,GPIO_Pin_0); vTaskDelay(pdMS_TO_TICKS(950));// Wait for another 950 ms before next loop iteration. } } // Similar implementation applies to task_b with different pin and timing values... ``` 上述代码片段展示了如何利用 FreeRTOS 提供的功能接口来构建一个多任务应用程序框架下的简单应用实例。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值