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

STM32 FreeRTOS 任务挂起和恢复---实验

实验目标

学会vTaskSuspend( )、vTaskResume( ) 任务挂起与恢复相关API函数使用:

start_task:用来创建其他的三个任务。

task1:实现LED1每500ms闪烁一次。

task2:实现LED2每500ms闪烁一次。

task3:判断按键按下逻辑,KEY1按下,挂起task1,按下KEY2在任务中恢复task1。

CubeMX环境准备

添加 KEY2

STM32 FreeRTOS 任务创建和删除实验(动态方法)-CSDN博客

基于上述代码进行修改和添加

FreeRTOSConfig.h代码清单

#define INCLUDE_vTaskSuspend                            1
#define INCLUDE_xTaskResumeFromISR                      1
// 文件中已有该宏定义,原值为0,修改为1即可,请勿重复定义
#define configUSE_TRACE_FACILITY 1
#define configUSE_STATS_FORMATTING_FUNCTIONS 1

注意查看上下代码是否有重复,方式:双击单词查看

参考:STM32 FreeRTOS 的任务挂起与恢复以及查看任务状态-CSDN博客

 通过编译没有错误,证明迁移完成

FreeRTOS_demo.h代码清单

#ifndef __FREERTOS_DEMO_H
#define __FREERTOS_DEMO_H#include "FreeRTOS.h"
#include "task.h"#include "led.h"
#include "key.h"
#include <stdio.h>
#include "stm32f1xx_hal.h"// 主入口:启动(创建启动任务,开启调度器)
void FreeRTOS_Start(void);#endif

FreeRTOS_demo.c代码清单

添加task4
// 5. Task4 任务函数和相关参数
#define TASK4_NAME "Task4"
#define TASK4_STACK_DEPTH 128
#define TASK4_PRIORITY 5
TaskHandle_t task4_handler;
void Task4(void *pvParameters);
启动函数体中添加xtaskcreate---task4
xTaskCreate((TaskFunction_t)Task4,(char *)TASK4_NAME,(configSTACK_DEPTH_TYPE)TASK4_STACK_DEPTH,(void *)NULL,(UBaseType_t)TASK4_PRIORITY,&task4_handler);
改写task3和书写task4的函数体
void Task3(void *pvParameters)
{while (1){// printf("Task3 正在运行...\n");// 检测按键,如果key1按下就挂起Task1,如果key2按下就恢复Task1uint8_t key = Key_Detect();if (key == KEY1_PRESS){printf("挂起 Task1 任务...\n");vTaskSuspend(task1_handler);}else if (key == KEY2_PRESS){printf("恢复 Task1 任务...\n");vTaskResume(task1_handler);}vTaskDelay(10);}
}// 定义用于接收任务列表信息的缓冲区
char buff[1024];// Task4函数体:查看任务状态列表
void Task4(void *pvParameters)
{while (1){printf("Task4 运行,查询任务列表...\n");vTaskList(buff);printf("%s", buff);vTaskDelay(1000);}
}

http://www.lryc.cn/news/524065.html

相关文章:

  • Ubuntu 24.04 LTS 通过 docker desktop 安装 seafile 搭建个人网盘
  • Open3D 最小二乘拟合平面(直接求解法)【2025最新版】
  • 【CC2640R2F】香瓜CC2640R2F之SPI读写W25Q80
  • 探秘Shortest与Stagehand:开启高效测试与自动化新篇
  • llama 3 笔记
  • 写作利器:如何用 PicGo + GitHub 图床提高创作效率
  • 【文件篇】11.磁盘文件系统
  • 嵌入式产品级-超小尺寸热成像相机(从0到1 硬件-软件-外壳)
  • 三维扫描赋能文化:蔡司3D扫描仪让木质文化遗产焕发新生-沪敖3D
  • 《自动驾驶与机器人中的SLAM技术》ch8:基于预积分和图优化的紧耦合 LIO 系统
  • Linux下PostgreSQL-12.0安装部署详细步骤
  • STL—stack与queue
  • docker 使用远程镜像启动一个容器
  • 简述mysql 主从复制原理及其工作过程,配置一主两从并验证
  • oracle之行转列
  • Windows电脑安装USB Redirector并实现内外网跨网USB共享通信访问
  • kafka学习笔记4-TLS加密 —— 筑梦之路
  • grafana + Prometheus + node_exporter搭建监控大屏
  • 深度学习在语音识别中的应用
  • RabbitMQ 高级特性
  • 第01章 07 MySQL+VTK C++示例代码,实现医学影像数据的IO数据库存储
  • Mysql创建定时任务
  • 【MySQL篇】使用mysqldump导入报错Unknown collation: ‘utf8mb4_0900_ai_ci‘的问题解决
  • 专业学习|最优化理论(目标函数、约束条件以及解题三板斧)
  • 【Linux】gawk编辑器二
  • Hadoop美食推荐系统 爬虫1.8w+数据 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离
  • 吴恩达深度学习——神经网络编程的基础知识
  • 第14个项目:E-Learning在线学习平台Python源码
  • Qt之文件系统操作和读写
  • 【物联网】keil仿真环境设置 keilV5可以适用ARM7