| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> RTOS内功修炼记(九)—— 任务入口函数执行完毕之后去哪里? -> 正文阅读 |
|
[嵌入式]RTOS内功修炼记(九)—— 任务入口函数执行完毕之后去哪里? |
1. 专栏说明本专栏是作者深入研究RTOS内核时记录的笔记,目前包含的8篇文章覆盖了RTOS内核基础原理:
在工作过程中,我发现在实际使用RTOS完成项目时,理解这些知识仅能达到会用RTOS的水平,要想用好RTOS,还需要了解一些比较细节的机制,否则容易掉坑进去,花大量时间定位问题。 所以,我决定继续更新这个专栏,分享更多使用RTOS过程中的经验。 2. 任务的通常写法遵循“不使用就让出”的原则,任务通常有两种写法。 ① 阻塞等待某个事件处理,等待到之后处理:
这种写法中,在没有事件发生的时候,任务会因为等待某个内核对象而被挂起,让出CPU不参与调度。 ② 定时执行
这种写法中,任务在干完活之后,会主动进入睡眠状态,让出CPU不参与调度。 3. 一次性任务上面两种写法的共性是都有主循环,不需要考虑任务入口函数退出的情况,但在一些场景中任务只需要执行一次即可:
这个时候就要思考一个问题:任务入口函数执行完毕之后去了哪里? 4. 寻找答案首先,任务入口函数本质上是一个函数,跳转函数的指令是 任务切换分为两步:保存上文、切换下文。切换下文就是指将保存在任务栈中的CPU寄存器组的值、加载到CPU中。 所以,当任务栈中初始保存的CPU寄存器组的值中、PC寄存器值为该任务的任务入口函数地址时,切换下文加载之后,由于PC指向任务入口函数,所以CPU接着运行就到了任务入口函数中,也就是该任务在运行。 同样的道理,任务栈中初始保存的CPU寄存器组的值中、LR寄存器的值决定了、任务入口函数退出时候返回到哪里。 由于不同CPU架构的CPU寄存器组不同,所以初始化任务栈的代码与架构强相关,在arch目录下都有不同架构对应的实现。 这里我们以ARM Cortex-M4为例(Arm-v7m)看看代码如何实现:
5. 任务退出函数在创建任务的API
task_exit 函数主要完成销毁自身的工作,具体实现如下:
该销毁函数传入的参数为NULL表示销毁自身,如果是静态任务则按以下步骤销毁(动态任务销毁值得用一篇文章去讲述):
6. 总结本文讲述了任务的两种常规写法,以及任务函数执行完毕之后去了哪里? 当任务函数执行完毕退出时,会执行到哪里由任务栈初始化时LR寄存器的值决定,RTOS内核都会提供一个默认退出函数,TencentOS-Tiny提供的任务退出函数中,会自动销毁任务自身。 所以在编写一次性任务时,就不需要主动调用销毁API销毁自身啦~ 接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
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 1:40:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |