当前位置: 首页 > news >正文

【星汇极客】手把手教学STM32 HAL库+FreeRTOS之任务管理(2)

 前言

        本人是一名嵌入式学习者,在大学期间也参加了不少的竞赛并获奖,包括但不限于:江苏省电子设计竞赛省一、睿抗机器人国二、中国高校智能机器人国二、嵌入式设计竞赛国三、光电设计竞赛国三、节能减排竞赛国三

后面会经常写一下博客,分享一下资料、经验,如果想了解其他项目、技术,可以去B站搜:星汇极客,主页链接:星汇极客

此外,还开发了个人网站,里面有一些资料和源码供下载:星汇极客网站

二、任务管理

(1)几种FreeRTOS的任务函数:

1.任务挂起、暂停函数:vTaskSuspend()

例:vTaskSuspend(Task1Task_Handler); 或者 vTaskSuspend(NULL);

//参数是要暂停的对象(任务句柄),NULL为自己。

2.暂停所有的任务:vTaskSuspendAll()

例:vTaskSuspendAll();

3.恢复任务:vTaskResume()

例:vTaskResume(Task1Task_Handler);//参数是要暂停的对象(任务句柄)

4.删除函数: vTaskDelete()

例:vTaskDelete(Task1Task_Handler);或者 vTaskDelete(NULL);

//参数是要暂停的对象(任务句柄),NULL为自己。

5.相对延时函数:vTaskDelay()

例:vTaskDelay(1000);//单位是ms

6.绝对延时函数:vTaskDelayUntil()

(2)代码实现

在之前的代码基础上更改,

start_task函数里是创建task1、2...,创建完后自己删除。

task2函数先执行一次,将自己挂起,task1计时3秒后把task2恢复。

void task1(void *pvParameters)
{ int i=0;while(1){i++;HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);  printf("LED翻转\r\n");if(i == 6){i=0;printf("Task2恢复\r\n");vTaskResume(Task2Task_Handler);}	 vTaskDelay(700); }
}
void task2(void *pvParameters)
{ while(1){printf("Task2Running\r\n");printf("Task2挂起\r\n");vTaskSuspend(NULL); vTaskDelay(1000);    /* 延时1000ticks */}
}

烧录代码,串口输出“Task2Running”、“Task2挂起“后,挂起task2任务,然后每隔500ms输出“LED翻转”,等待3秒后输出“Task2恢复”,但是Task1优先级比Task2高所以先输出“LED翻转”、再输出“Task2Running”、“Task2挂起“。

至此,手把手教学STM32 HAL库+FreeRTOS之任务管理(2)结。


http://www.mrgr.cn/news/43709.html

相关文章:

  • 【C语言进阶】系统测试与调试
  • React获取DOM节点
  • 项目管理-信息系统治理
  • C语言代码练习(test_1_19)
  • Linux运维01:VMware创建虚拟机
  • 芒果虫害分类数据集,包括10个类别共9738张图像:茶黄蓟马荔枝叶瘿蚊白翅蜡蝉等
  • Java 枚举一口气讲完!(´▽`ʃ♡ƪ)
  • Linux线程(八)线程与信号之间的关系详解
  • 我有一张图,我怎么让midjourney按照这张图继续生成呢?
  • 大厂出来的人为什么不比你高效?
  • x-cmd pkg | difft - 更直观的代码比较工具,可作为 diff 的替代品
  • 降压芯片TPS54821
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-06
  • ChatGPT 更新 Canvas 深度测评:论文写作这样用它!
  • 停车场停车位检测数据集2166张 违停 带标注 voc yolo 2类
  • C++11之线程
  • 移动硬盘无法读取?详解原因与数据恢复方案
  • 秋招内推2025-招联金融
  • 国内目前顶级的哲学教授颜廷利:全球公认十个最厉害的思想家
  • 基础算法(5)——位运算