| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32中的FreeRTOS-#2(对任务的操作) -> 正文阅读 |
|
[嵌入式]STM32中的FreeRTOS-#2(对任务的操作) |
**内容回顾:**上一节,我们通过使用优先级不同的三个任务,同时在串口打印了信息。但是大家肯定会有疑问,为什么相同优先级的任务不能同时通过串口打印数据,不同优先级的任务反倒可以“同时”打印?本节将深入探讨任务调用的顺序问题。 这是FreeRTOS系列的第二篇教程,在本教程中,我们将看到一些与Tasks相关的操作。这包括创建任务,在任务之间切换,暂停和恢复任务,终止任务等等。 CubeMX设置让我们先从设置CubeMX开始。如下所示,我使用CMSIS V1,因为它被大多数STM32芯片型号支持。其他的一切都保持默认。
官方示例
创建任务按照教程1的方法,在CubeMX中新创建一个Task-2,优先级定义为“osPriorityNormal”,与默认的任务优先级相同。创建任务后,我们现在有两个可用的任务。一个是默认的Task,另一个是Task2。 在defaultTask和Task2的执行代码中添加内容
运行代码后,我们将得到如下所示的结果。Task1和Task2均是2秒执行一次
修改Task-2的优先级定义为“osPriorityAboveNormal”,比Task-1的优先级高。
任务的挂起和恢复当一个Task被挂起时,它将一直处于阻塞状态,直到再次恢复。为了挂起一个任务,我们将使用osThreadSuspend。其参数是要挂起的任务的线程ID(或者说是句柄)。 现在,为了恢复这个挂起的任务,我们将使用另一个名为osThreadResume的函数。同样,这个函数的参数也是挂起任务的线程ID。我将使用下面给出的另一个条件来继续这个任务 综上,在Task2的代码中添加
运行代码后,结果如下图所示
终止任务有过PC编程经验的同学可能知道,与任务挂起不同,一旦任务被终止,就无法重新恢复。要终止任务,我们将使用osThreadTerminate函数,其参数是要终止的线程的线程ID。
上面代码的结果如下所示 在一段时间内阻塞任务这就像在某一特定时间后自动恢复任务。我们将使用函数osDelayUntil来完成此操作。这个函数的参数如下
PreviousWakeTime是指向一个变量的指针,该变量保存了任务最后被解除阻塞的时间。millisec是延时的时间。
上面代码的结果如下所示 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:22:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |