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

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

这是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 * argument)
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值