STM32中的FreeRTOS-#2(对任务的操作)

本教程详细介绍了如何在STM32中使用FreeRTOS进行任务操作,包括创建任务、挂起和恢复任务。通过CubeMX设置,创建了两个任务并分析了它们的执行顺序,揭示了FreeRTOS如何处理相同和不同优先级任务的调度。还讨论了任务的阻塞、挂起和恢复,并提供了具体的代码示例。
摘要由CSDN通过智能技术生成

**内容回顾:**上一节,我们通过使用优先级不同的三个任务,同时在串口打印了信息。但是大家肯定会有疑问,为什么相同优先级的任务不能同时通过串口打印数据,不同优先级的任务反倒可以“同时”打印?本节将深入探讨任务调用的顺序问题。

这是FreeRTOS系列的第二篇教程,在本教程中,我们将看到一些与Tasks相关的操作。这包括创建任务,在任务之间切换,暂停和恢复任务,终止任务等等。

CubeMX设置

让我们先从设置CubeMX开始。如下所示,我使用CMSIS V1,因为它被大多数STM32芯片型号支持。其他的一切都保持默认。
在这里插入图片描述
在包含参数选项卡中,使能vTaskDelayUntill选项。vTaskDelayUntill函数用于将任务延迟到指定的时间。周期性任务可以使用此函数,以确保固定的执行频率。关于函数vTaskDelayUntil的使用请阅读[官方文档](FreeRTOS - A FREE Open Source Simple RTOS Scheduler API documentation)。

  函数原型

  **void vTaskDelayUntil( TickType_t \*pxPreviousWakeTime, const TickType_t xTimeIncrement );**

官方示例

 // Perform an action every 10 ticks.
 void vTaskFunction( void * pvParameters )
 {
   
 	TickType_t xLastWakeTime;
 	const TickType_t xFrequency = 10;
     // Initialise the xLastWakeTime variable with the current time.
     xLastWakeTime = xTaskGetTickCount();
     for( ;; )
     {
   
         // Wait for the next cycle.
         vTaskDelayUntil( &xLastWakeTime, xFrequency );
         // Perform action here.
     }
 }

创建任务

按照教程1的方法,在CubeMX中新创建一个Task-2,优先级定义为“osPriorityNormal”,与默认的任务优先级相同。创建任务后,我们现在有两个可用的任务。一个是默认的Task,另一个是Task2。

在defaultTask和Task2的执行代码中添加内容

// 默认任务
void StartDefaultTask(void const *</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值