| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 嵌入式工程师实现一个简单的操作系统(一) -> 正文阅读 |
|
[嵌入式]嵌入式工程师实现一个简单的操作系统(一) |
操作系统中的任务与任务切换1. 为什么要有任务?
所以我们需要一个操作系统,来提高我们处理器的效率,把处理器的每一刻都去做有意义的事情。 相当于是间接的提高了处理器的性能。 综上所述,有操作系统与无操作系统,最大的区别就是操作系统下可以宏观上并行的执行多个任务,并可以在任务之间切换,选择合适的任务在处理器执行。 所以我们来实现的一个操作系统,首先就是实现以下功能
有了上面的功能,就可以说是实现了从无操作系统到操作系统的转变 操作系统就是一个上帝视角,每一个任务都是一个无线循环的函数功能
2. 任务切换怎么实现2.1 任务切换过程
假设上面有2个无限循环执行的任务,可能的执行过程是这样的 aaa -> xxx -> bbb -> ccc -> yyy -> zzz -> xxx -> ddd -> aaa -> yyy 如上的执行过程,处理器在2个循环中来回执行,一定是发生了任务切换的过程 处理器执行一个函数的时候,有几个重要的要素:
每一个函数有输入自己的堆栈内容,咋进入函数时候,开辟出堆栈空间,堆栈存放以下内容:
因为每一个函数的参数和局部变量都是该函数私有的,并且不能被随意修改,所以在进行任务切换时候,要考虑一下堆栈 接着就是 PC 程序指针,处理器执行那一段代码程序,就是有PC指针决定,处理器总是从PC指针存放的地址去取指令执行。 所以让处理器从一个任务切换到另一个任务去执行,可能会与PC指针有关系了 2.2 任务切换需要作什么 我们想想一下如何从一个任务切换到另一个任务?
2.3 准备切换任务的材料 上面介绍了任务切换需要什么,既然知道需要什么,那我们就开始着手准备
创建任务,就需要填充任务的结构体,定义一个任务初始化函数,提供以下参数
上述函数完成了一个任务的初始化 现在,我们准备好了任务需要的材料,就可以开始进行切换了 2.4 进行切换任务实现 具体的任务切换又可以分成几个种类:
关于上面2个任务切换函数的实现,已经上传到github的项目代码中,可以浏览查看
如果对上面的步骤不是很清楚,可以使用vscode配合gdb进行调试,单步执行代码跟踪处理器执行的过程,尝试一下是否可以正确完成任务切换
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
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 4:43:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |