FreeRtos任务的挂起和恢复实验示例

首先我们在main函数完成硬件的初始化,其次在硬件初始化完成之后创建任务start_task()然后开启FreeRtos的任务调度

(1)、start_task 任务,用于创建其他 3 个任务。
(2)、在 key_tssk 任务里面,KEY_UP 被按下,调用函数 vTaskSuspend()挂起任务 1。
(3)、KEY1 被按下,调用函数 vTaskResume()恢复任务 1 的运行。
(4)、KEY2 被按下,调用函数 vTaskSuspend()挂起任务 2。

#define START_TASK_PRIO 1 //任务优先级
#define START_STK_SIZE 120 //任务堆栈大小
TaskHandle_t StartTask_Handler; //任务句柄
void start_task(void *pvParameters); //任务函数#define KEY_TASK_PRIO 2 
#define KEY_STK_SIZE 120 //任务堆栈大小
TaskHandle_t KeyTask_Handler;
void key_task(void *pvParameters);#define TASK1_TASK_PRIO 3 //任务优先级
#define TASK1_STK_SIZE 120 //任务堆栈大小
TaskHandle_t Task1Task_Handler
void task1_task(void *pvParameters);#define TASK2_TASK_PRIO 4 //任务优先级
#define TASK2_STK_SIZE 120 //任务堆栈大小
TaskHandle_t Task2Task_Handler;
void task2_task(void *pvParameters);int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组 4delay_init(); //延时函数初始化uart_init(115200); //初始化串口LED_Init(); //初始化 LEDKEY_Init(); //初始化按键EXTIX_Init(); //初始化外部中断LCD_Init(); //初始化 LCDxTaskCreate((TaskFunction_t )     start_task, //任务函数(const char* )                    "start_task", //任务名称(uint16_t )                       START_STK_SIZE, //任务堆栈大小(void* )                          NULL, //传递给任务函数的参数(UBaseType_t )                    START_TASK_PRIO, //任务优先级(TaskHandle_t* )                  &StartTask_Handler); //任务句柄vTaskStartScheduler(); //开启任务调度}void start_task(void *pvParameters)
{xTaskCreate((TaskFunction_t )    key_task,(const char* )                   "key_task",(uint16_t )                      KEY_STK_SIZE,(void* )                         NULL,(UBaseType_t )                   KEY_TASK_PRIO,(TaskHandle_t* )                 &KeyTask_Handler);xTaskCreate((TaskFunction_t )    task1_task,(const char* )                   "task1_task",(uint16_t )                      TASK1_STK_SIZE,(void* )                         NULL,(UBaseType_t )                   TASK1_TASK_PRIO,(TaskHandle_t* )                 &Task1Task_Handler);xTaskCreate((TaskFunction_t )    task2_task,(const char* )                   "task2_task",(uint16_t )                      TASK2_STK_SIZE,(void* )                         NULL,(UBaseType_t )                   TASK2_TASK_PRIO,(TaskHandle_t* )                 &Task2Task_Handler);vTaskDelete(StartTask_Handler); //删除开始任务taskEXIT_CRITICAL(); //退出临界区
}void key_task(void *pvParameters)
{u8 key;while(1){key = KEY_scan(0);switch(key){case WKUP_PRES:vTaskSuspend(Task1Task_Handler); //挂起任务 1 (2)printf("挂起任务 1 的运行!\r\n");break;case KEY1_PRES:vTaskResume(Task1Task_Handler); //恢复任务 1 (3)printf("恢复任务 1 的运行!\r\n");break;case KEY2_PRES:vTaskSuspend(Task2Task_Handler);//挂起任务 2 (4)printf("挂起任务 2 的运行!\r\n");break;}vTaskDelay(10); //延时 10ms}}void task1_task(void *pvParameters){while(1){}
}
void task2_task(void *pvParameters){while(1){}}

后续明天发!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/671510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取 Github XX项目软件最新版本方法(通过命令行)

场景: 如果我们项目中需要实现某个Github公共软件的最新版本更新 那么获取软件的最新的发布版本就是一个比较重要的工作了 对此,Github提供对外api不需要自己手动填写脚本了 解决方案: 替换黄色字体的项目地址,然后在cmd中执行…

CentOS 7安装Nodejs

说明:本文介绍如何在云服务器上CentOS 7操作系统上安装Nodejs。以及安装过程中遇到的问题。 下载压缩包&解压 首先,先去官网下载Linux版本的Node。 将下载下来的压缩包,上传到云服务器上,解压。配置环境变量。 &#xff08…

人工智能之参数估计

参数估计 参数估计:假设总体X~N(μ, σ 2 \sigma^2 σ2),μ和 σ 2 \sigma^2 σ2是未知参数, X 1 , X 2 , ⋅ ⋅ ⋅ , X n X_1,X_2,\cdot\cdot\cdot,X_n X1​,X2​,⋅⋅⋅,Xn​是来自X的样本,样本值是 x 1 , x 2 , ⋅ ⋅ ⋅ , x n x_1,x_2,\cdot\cdot\cdot,x_n x1​,x…

【错误文档】This与Here的区别、主系表结构、如何合并两个句子、祈使句结构

目录 This与Here的区别 主系表结构 如何合并两个句子 祈使句结构 原句中文1: “就是这件。” 我的翻译: This is it. 正确翻译: 书上原句: Here it is! 正确解释: 两个翻译都对,只是强调点不同&…

Spark scala如何本地运行

Spark scala如何本地运行 Spark任务调试太费时间啦Spark Scala本地运行 Spark任务调试太费时间啦 Apache Spark是一个开源的大数据处理框架,它提供了一个接口用于编程大规模分布式计算,且提供了很多高级工具,包括支持SQL查询、流数据处理、机…

Leetcode 45. 跳跃游戏 II

本题与55. 跳跃游戏十分类似,区别在于本题是要求出最小的跳跃次数。 在55. 跳跃游戏的框架上,我们需要增加一些东西: 既然要计算最小跳跃次数,就需要用一个变量计数跳跃的次数;需要一次前瞻,来计算之后那次…

使用PaddleNLP识别垃圾邮件:用RoBERTa做中文邮件标题分类,模型在测试集上准确率达到98.3%以上(附公开数据集)

使用PaddleNLP识别垃圾邮件:用RoBERTa做中文邮件标题分类,模型在测试集上准确率达到98.3%以上(附公开数据集)。 要使用PaddleNLP和RoBERTa来识别垃圾邮件并做中文邮件标题分类,可以按照以下步骤进行操作: 安装PaddlePaddle和PaddleNLP:首先,确保在你的环境中已经安装了…

【Lazy ORM】查询部分字段减少IO

Gitee 版本信息 1.2.2-JDK17-SNAPSHOT Testpublic void selectNameIdAge(){LazyUserTest userNameIdAge lazyLambdaStream.selectOne(LazyWrappers.<LazyUserTest>lambdaWrapper().eq(LazyUserTest::getId, 1).eq(LazyUserTest::getIsDeleted, false).onlyUseAs().as(…

uniapp从入门到进阶

一、了解uniapp 跨平台开发&#xff1a;Uniapp可以同时开发多个平台的应用&#xff0c;只需编写一套代码即可。开发者可以通过编写Vue组件来构建界面&#xff0c;通过编写JavaScript代码来实现业务逻辑。 页面和组件&#xff1a;Uniapp的页面和组件都是基于Vue组件的&#xff…

力扣经典题:相交链表

题目分析&#xff1a;两个链表如果相交且不存在环&#xff0c;那么这两个链表从相交节点往后的节点都相同&#xff0c;所以&#xff0c;遍历一个链表&#xff0c;在遍历时不断遍历另一个链表&#xff0c;只要相等就可以返回了 struct ListNode *getIntersectionNode(struct Li…

使用 git 上传文件时,运行 命令 git pull origin 时未成功,出现报错信息

项目场景&#xff1a; 背景&#xff1a; 使用 git 上传文件时&#xff0c;运行 命令 git pull origin 时未成功&#xff0c;出现报错信息 问题描述 问题&#xff1a; $ git pull origin print --allow-unrelated-histories error: Pulling is not possible because you hav…

ef core原始sql查询

ef core用原始sql查询&#xff0c;不能自动映射到类型中。 处理主要是将sql查询结果转换为json&#xff0c;然后再将json转换为类型对象 public async Task<List<Warning_log>> GetStatData(){string sql "SELECT CONVERT(date, [trigger_time]) as tr…

《C程序设计》上机实验报告(七)之指针的应用

实验内容&#xff1a; 1.运行程序 #include <stdio.h> void main() { int a10,*p; p&a; printf("%d",*p); scanf("%d",p); printf("%x",p); printf("%x",&p); *p5; printf("%d"…

React+Echarts实现数据排名+自动滚动+Y轴自定义toolTip文字提示

1、效果 2、环境准备 1、react18 2、antd 4 3、代码实现 原理&#xff1a;自动滚动通过创建定时器动态更新echar的dataZoom属性startValue、endValue&#xff0c;自定义tooltip通过监听echar的鼠标移入移出事件&#xff0c;判断tooltTip元素的显隐以及位置。 1、导入所需组…

《五彩斑斓》-------如何用C语言easyx图形库做出一个彩色矩阵

用于初始化随机数生成器种子,以确保每次运行程序时生成的随机数序列不同。 然后,程序进入main()函数,首先调用creatNum()函数生成一个随机数,并使用printf()函数将其输出到控制台。接着,程序调用initgraph()函数初始化图形窗口,并设置背景颜色为白色。 接下来,程序使用两…

Linux安全技术与iptables防火墙

一.安全技术&#xff1a; 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全决策依据,…

IDEA上传Gitee出错

问题 今天想通过 IDEA 更下新 gitee 上的代码是发生了这个错误。 解决 在 IDEA 终端输入 git config --system --unset credential.helper原因 在一个大佬那里找到了原因 大概意思是-远端仓库的账号和密码错误&#xff0c;你本地有过账号密码登录记录&#xff0c;但不知道…

Java SE入门及基础(26)

方法重载&#xff08;Overloading&#xff09; 1. 概念 在同一个类中&#xff0c;方法名相同&#xff0c;参数列表不同的多个方法构成方法重载 2.示例 public class Calculator { public int sum ( int a , int b ){ return a b ; } public int sum ( int…

【LeetCode】78. 子集(中等)——代码随想录算法训练营Day28

题目链接&#xff1a;78. 子集 题目描述 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2…

Docker面试题2024

目录 什么是Docker&#xff1f; Docker的应用场景有哪些&#xff1f; Docker的优点有哪些&#xff1f; Docker与虚拟机的区别是什么&#xff1f; Docker的三大核心是什么&#xff1f; 如何快速安装Docker&#xff1f; 如何修改Docker的存储位置&#xff1f; Docker镜像常用管理…