FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-1:任务)

news2024/10/5 20:23:25

 学习之路主要为FreeRTOS操作系统在STM32F103(STM32F103C8T6)上的运用,采用的是标准库编程的方式,使用的IDE为KEIL5。

注意!!!本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习,也可以通过Proteus仿真的方式进行学习。

后续文章会同时发表在个人博客(jason1016.club)、CSDN;

视频会发布在bilibili(UID:399951374)

一、任务的概念 

所谓FreeRTOS的任务概念,就是将要是执行的操作分为一个一个任务,然后通过任务调度器让任务按照优先级进行分配,实现多任务的调配管理。与裸机系统所有操作都堆积在main函数运行,会导致系统冗余,虽然可以通过进入中断的方法实现紧急操作的分流,但是频繁进中断可以会影响系统的正常运行。所以让FreeRTOS将任务进行分流执行。

二、任务状态

运行态:顾名思义(一次只能有一个运行态)

就绪态:已经达成运行条件,但是因为有一个同优先级或者更高优先级的任务正在运行,所以运行不了

阻塞态:任务在等某个外部触发条件,当条件满足才会转换状态(比如vTaskDelay()函数,就要等待延时完毕)【任务进入阻塞态会有一个超时时间,当超过这个超时时间任务就会退出阻塞态,即使所等待的事件还没有来临】

挂起态:任务进入挂起态以后也不能被调度器调用进入运行态,但是进入挂起态的任务没有超时时间

三、任务优先级

每个任务都可以分配一个从0~(configMAX_PRIORITIES-1)的优先级

优先级数字越低表示任务的优先级越低,0 的优先级最低,configMAX_PRIORITIES-1 的优先级最高。空闲任务的优先级最低,为 0。

FreeRTOS 调度器确保处于就绪态或运行态的高优先级的任务获取处理器使用权,换句话说就是处于就绪态的最高优先级的任务才会运行。

那要是任务优先级一样高怎么办?

处于就绪态的优先级相同的任务就会使用时间片轮转调度器获取运行时间。(轮转调度器后面会讲到)

四、任务的创建与删除

任务创建分为动态创建以及静态创建(区别在于动态创建是自动分配RAM任务栈的,而静态是手动分配的)【下面我们任务创建主要用动态的方法】 并且在动态方法中用于储存任务属性的任务控制块地址也会自动分配

一个任务主要是由几部分组成:

1、pxTaskCode: 任务函数

2、pcName: 任务名字,一般用于追踪和调试,任务名字长度不能超过:configMAX_TASK_NAME_LEN

3、usStackDepth: 任务堆栈大小,注意实际申请到的堆栈是 usStackDepth 的 4 倍。其中空闲任务的任务堆栈大小为 configMINIMAL_STACK_SIZE 任务堆栈作用当任务被中断时可以保护(恢复)现场

4、pvParameters: 传递给任务函数的参数

5、uxPriotiry: 任务优先级,范围 0~ configMAX_PRIORITIES-1

6、pxCreatedTask: 任务句柄,任务创建成功以后会返回此任务的任务句柄,这个句柄其实就是任务的任务堆栈。此参数就用来保存这个任务句柄。其他 API 函数可能会使用到这个句柄。

    //创建开始任务
    xTaskCreate((TaskFunction_t )start_task,            //任务函数
                (const char*    )"start_task",          //任务名称
                (uint16_t       )START_STK_SIZE,        //任务堆栈大小
                (void*          )NULL,                  //传递给任务函数的参数
                (UBaseType_t    )START_TASK_PRIO,       //任务优先级
                (TaskHandle_t*  )&StartTask_Handler);   //任务句柄              

任务删除函数:

vTaskDelete( TaskHandle_t xTaskToDelete ) //参数为需要删除的任务函数

五、任务的挂起与恢复

任务挂起:将某个任务设置为挂起态,进入挂起态的任务永远都不会进入运行态

void vTaskSuspend( TaskHandle_t xTaskToSuspend) //参数为需要挂起的任务函数

任务恢复:将一个任务从挂起态恢复到就绪态

void vTaskResume( TaskHandle_t xTaskToResume) //参数为需要恢复的任务函数

BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume) //此函数是 vTaskResume()的中断版本,用于在中断服务函数中恢复一个任务

本文为作者独立编写,本BLOG上所有的原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。

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

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

相关文章

1.2 网络安全法律法规

数据参考:CISP官方 目录 国家立法体系网络安全法解析网络安全相关法律 一、国家立法体系 1、我国的立法体系 我国的立法体系在网络空间治理中扮演着基础工作的角色。为了应对快速发展的网络技术和威胁,我国采取了多级立法机制来完善网络空间的法律…

在OK3588板卡上部署模型实现OCR应用

一、主机模型转换 我们依旧采用FastDeploy来部署应用深度学习模型到OK3588板卡上 进入主机Ubuntu的虚拟环境 conda activate ok3588 安装rknn-toolkit2(该工具不能在OK3588板卡上完成模型转换) git clone https://github.com/rockchip-linux/rknn-to…

学习中遇到的好博客

c日志工具之——log4cpp ECU唤醒的本质就是给ECU供电。 小文件:零拷贝技术 传输大文件:异步 IO 、直接 IO:如何高效实现文件传输:小文件采用零拷贝、大文件采用异步io直接io (123条消息) Linux网络编程 | 彻底搞懂…

ChatGPT 是如何工作的:从预训练到 RLHF

欢迎来到人工智能的未来:生成式人工智能!您是否想知道机器如何学习理解人类语言并做出相应的反应?让我们来看看ChatGPT ——OpenAI 开发的革命性语言模型。凭借其突破性的 GPT-3.5 架构,ChatGPT 席卷了世界,改变了我们…

lop和wlop

文章目录 lop概要lop定义不动点迭代lop算法lop应用lop算法实验结果 wlop 写在前面的话:论文的证明和一些公式具有一定的跳跃性,而且可能我没有L1稀疏平滑相关的理论基础知识,导致这篇文章我看了很久,也只是看懂个大概,…

校园基础设施资源管理

背景 自2017年起,为响应两会提出的“数实融合”“数字经济”“数字中国”的中国经济发展新动向,满足“中国教育现代化2030”战略部署,进一步推动“教育信息化十三五规划”的落实。这五年时间,各大高校致力于深化信息技术与教育教…

舌体分割的初步展示应用——依托Streamlit搭建demo

1 前言 去年在社区发布了有关中医舌象诊断的博文,其中舌象识别板块受到了极高的关注和关注。😊最近,我接触到了Python的Streamlit库,它可以帮助数据相关从业人员轻松搭建数据看板。本文将介绍如何使用Streamlit构建舌体分割的演示…

Mac上VScode无法提示Unity代码

这个问题困扰了我将近三天,网上大部分文章对我都无效。终于解决了,留个记录文章,希望能帮到其他人。 前言 Unity在Mac上只与VS绑定,但是VS在Mac上太难用了,没有插件,界面也丑。VScode虽然好用插件多&…

力扣 -- 978. 最长湍流子数组

一、题目 二、解题步骤 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码 class Solution { public:int maxTurbulenceSize(vector<int>& nums) {int nnums.size();vector<int> f(n);…

docker简单web管理docker.io/uifd/ui-for-docker

要先pull这个镜像docker.io/uifd/ui-for-docker 这个软件默认只能使用9000端口&#xff0c;别的不行&#xff0c;因为作者在镜像制作时已加入这一层 刚下下来镜像可以通过docker history docker.io/uifd/ui-for-docker 查看到这个端口已被 设置 如果在没有设置br0网关时&…

并查集基础

一、概念及其介绍 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题。 并查集的思想是用一个数组表示了整片森林&#xff08;parent&#xff09;&#xff0c;树的根节点唯一标识了一个集合&#xff0c;我们只要找到了某个元素的的树根&#xf…

DataWhalePaper:知识图谱处理时序序列小样本

Outline 背景 很多概念会随着时间漂移&#xff0c;时序图谱 动机 使用手头微小的数据推导未见的数据很多知识会随着时间发生变化&#xff0c;建模时间漂移 模型 问题定义&#xff1a; 时序知识图谱&#xff0c;四元组表示(e,r,e,t) 学习目标 框架&#xff0c;基于手头的数据…

小研究 - 一种复杂微服务系统异常行为分析与定位算法(一)

针对极端学生化偏差&#xff08;&#xff25;&#xff58;&#xff54;&#xff52;&#xff45;&#xff4d;&#xff45; &#xff33;&#xff54;&#xff55;&#xff44;&#xff45;&#xff4e;&#xff54;&#xff49;&#xff5a;&#xff45;&#xff44; &#…

【C++】多态的实现及其底层原理

个人主页&#xff1a;&#x1f35d;在肯德基吃麻辣烫 我的gitee&#xff1a;gitee仓库 分享一句喜欢的话&#xff1a;热烈的火焰&#xff0c;冰封在最沉默的火山深处。 文章目录 前言一、什么是多态&#xff1f;二、多态的构成条件2.1什么是虚函数&#xff1f;2.2虚函数的重写2…

【简化程序设计】C++STL“容器适配器“之栈和队列

【STL】容器适配器之栈和队列 stack的介绍和使用stack的介绍stack的使用stack的模拟实现 queue的介绍和使用queue的介绍queue的使用queue的模拟实现 priority_queue的介绍和使用priority_queue的介绍priority_queue的使用priority_queue的模拟实现 容器适配器什么是容器适配器&…

【数据分享】1999—2021年地级市文化/体育/卫生/社会保障等公共服务相关指标(Excel/Shp格式)

1999-2021年地级市的人口相关数据、各类用地面积数据、污染物排放和环境治理相关数据、房地产投资情况和商品房销售面积、社会消费品零售总额和年末金融机构存贷款余额、地方一般公共预算收支状况、工业企业数、固定资产投资和对外经济贸易数据、科技创新指标数据、劳动力就业及…

一起学算法(枚举篇)

概念 枚举&#xff1a;就是把满足题目条件的所有情况都列举出来&#xff0c;然后一一判断寻找最优解的过程 1.最值问题 1.两个数的最值问题 两个数的最小值&#xff0c;利用Java的运算符就可以实现 int Min(int a,int b){return a<b?a:b; } 2.n个数的最值问题 当有n…

禁用右键菜单AMD Software: Adrenalin Edition

本文参考链接&#xff1a; 删除win11右键一级菜单的AMD驱动栏 - 哔哩哔哩 windows11 求助删除右键菜单方法_windows11吧_百度贴吧 Windows安装最新的AMD显卡驱动后&#xff0c;右键菜单会多出AMD Software: Adrenalin Edition。使用一些右键菜单管理工具也没能屏蔽禁用掉该功…

机器学习---线性回归、多元线性回归、代价函数

1. 线性回归 回归属于有监督学习中的一种方法。该方法的核心思想是从连续型统计数据中得到数学模型&#xff0c;然后 将该数学模型用于预测或者分类。该方法处理的数据可以是多维的。 回归是由达尔文的表兄弟Francis Galton发明的。Galton于1877年完成了第一次回归预测&…

数据分析基础-Excel图表的美化操作(按照教程一步步操作)

一、原始数据 包含月份和对应的销量和产量。 时间销量产量1月60722月38673月28344月58685月67596月72357月61428月24319月556710月243511月122112月2645 二、原始的图表设计-采用Excel自带模板 三、优化思路 1、删除多余元素 2、弱化次要元素 对于可以弱化的元素&#xff0c…