基于FreeRTOS的ESP-IDF开发——3.使用任务(中)

本文介绍了在FreeRTOS操作系统中如何设置任务优先级、挂起和恢复任务,以及如何查看任务列表和获取任务堆栈大小。此外,还详细讲解了中断看门狗和任务看门狗的概念,提供了一个官方示例来演示看门狗超时和喂狗的过程,强调了这些功能在调试和优化系统中的重要性。

前言

开发环境:ESP-IDF 4.3
操作系统:Windows10 专业版
开发板:自制的ESP32-WROOM-32E

上节内容我们学习了创建任务、删除任务、传递参数,现在我们接着往下深入

四、任务优先级

下面这份代码使用了 vTaskPrioritySet(p,N); 函数设置任务优先级,其中p是任务句柄,N是任务优先级,N可以取0-31,N为0时是空闲状态,N为31时为最高优先级

#include <stdio.h>
#include <stdint.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "../build/config/sdkconfig.h"
#include "esp_log.h"

static const char *TAG = "Priority";

void Task1(void* param)
{
   
   
    while(1)
    {
   
   
        ESP_LOGI(TAG,"Task1");
        vTaskDelay(1000/portTICK_PERIOD_MS);
    }
}
 
void Task2(void* param)
{
   
   
    while(1)
    {
   
   
        ESP_LOGI(TAG,"Task2");
        vTaskDelay(1000/portTICK_PERIOD_MS);
    }
}
 
 
//void app_main(void)
//{
   
   
//    xTaskCreate(Task1,"Task1",2048,NULL,1,NULL);
//    xTaskCreate(Task2,"Task2",2048,NULL,1,NULL);
//}


void app_main(void)
{
   
   
    TaskHandle_t pxtask=NULL;//定义一个任务句柄
	
    xTaskCreate(Task1,"Task1",2048,NULL,1,NULL);
    xTaskCreate(Task2,"Task2",2048,NULL,1,&pxtask);
	
    vTaskPrioritySet(pxtask,3);//更改或设置 任务优先级
}

运行效果如图所示,我们可以看到1313ms时刻发生了CPU资源争夺的情况,这种情况下先执行的是Task2。

由于我们使用了**vTaskPrioritySet(pxtask,3);**函数将任务2的任务优先级调到了3级,所以在发生多个任务争夺CPU资源时,谁的优先级高那么就会先执行谁,如果任务优先级相同,则会按照创建的顺序依次执行。

如果想测试一下不更改优先级,会是怎样的输出结果,可以把我main函数的代码注释,将我注释的代码取消注释执行试试看。

五、任务挂起

如果我们希望某个任务在短时间内不在执行,但是又不至于将其删除的时候,我们可以选择将这个任务挂起,使用到的函数是vTaskSuspend()
下面来看示例代码:

#include <stdio.h>
#include <stdint.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "../build/config/sdkconfig.h"
#include "esp_log.h"

static const char *TAG = "Suspend";

void Task1(void* param)
{
   
   
    while(1)
    {
   
   
        ESP_LOGI(TAG,"Task1");
        vTaskDelay(1000/portTICK_PERIOD_MS);
    }
}
 
void Task2(void* param)
{
   
   
    while(1)
    {
   
   
        ESP_LOGI(TAG,"Task2");
        vTaskDelay
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IoT_H2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值