任务和内存的栈

任务是什么?

任务是可以运行着的函数,本身并不是函数,因为任务是可以创建、删除、切换等操作的。

void add_val(int *pa, int *pb)
{volatile int tmp;tmp = *pa;*pa = tmp + *pb;
}void TaskFunction(void *param)
{int a = 1;int b = 2;add_val(&a, &b);
}

看一个函数中执行A+B 的全过程:
在这里插入图片描述
运行过程:
① CPU从内存把变量a的值读入CPU的R0寄存器;

② CPU从内存把变量b的值读入CPU的R1寄存器;

③ CPU计算a和b这两个变量的值的和,然后放入CPU的R0寄存器;

④ CPU将R0寄存器的值写到内存上变量a的位置;

在这个过程中,CPU是怎么知道要做① ② ③ ④这几件事情的?那肯定是程序员编写的程序来控制的。程序员将编写好的程序保存到Flash中,CPU从Flash中的取出指令,根据指令忠诚的执行它。

指令是什么?

load  ; 加载
store ; 存储
add   ; 相加

指令的三要素:源;目的;长度。
长度:变量的长度,比如int a;这个变量的长度是4bytes(32bits的处理器);

在这里插入图片描述

如果上诉程序在执行的过程之中被打断,那么就需要保存现场与恢复现场。
保存的是什么?是CPU将打断前的程序运行到的地址(下一条志汇编指令的地址)、寄存器的值保存到栈中,当执行完打断后,又从栈中读取出来恢复现场继续执行。

另外,如果有外界又打断了运行的函数,那么栈的内容需要保存吗?
解答:不需要,栈的内容无法按保存,只需要栈的位置。下一次回来的时候,CPU继续找到的之前保存的寄存器和局部变量。
在这里插入图片描述
主要LR保存的函数执行完的下一个指令的地址。
为了反之寄存器地址的覆盖,在调用函数的内部已经尽心了寄存器返回地址的保存,以防覆盖。

函数调用与内存中栈的实现

在这里插入图片描述
一个函数执行完,会去栈中取出LR的值,去执行返回地址处的程序。
在这里插入图片描述

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

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

相关文章

gitlab请求合并分支

直接去看原文: 原文链接:Gitlab合并请求相关流程_source branch target branch-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 入口: 仓库控制台的这两个地方都…

Android集成OpenSSL实现加解密-编译

下载 OpenSSL 源码: 前往 OpenSSL 官方网站(https://www.openssl.org/source/)下载最新的源码压缩包并解压,示例在WSL环境编译 下载NDK 前往https://developer.android.google.cn/ndk/downloads?hlzh-cn下载NDK版本并解压 配置…

OCP NVME SSD规范解读-3.NVMe管理命令-part1

4.4 NVMe Admin Command Set章节详细介绍了设备应支持的NVMe管理命令集,包括必需的和可选的命令。以下是一些关键要求和描述: NVMe-AD-2:识别命令除了支持所有必需的CNS值和相关的必需字段外,还应支持以下可选字段: 格…

电子设计从零开始(2)-----走进电子技术之电阻器

同学们大家好,今天我们继续学习杨欣的《电子设计从零开始》,这本书从基本原理出发,知识点遍及无线电通讯、仪器设计、三极管电路、集成电路、传感器、数字电路基础、单片机及应用实例,可以说是全面系统地介绍了电子设计所需的知识…

软件测试/测试开发丨接口测试学习笔记分享

一、Mock 测试 1、Mock 测试的场景 前后端数据交互第三方系统数据交互硬件设备解耦 2、Mock 测试的价值与意义 不依赖第三方数据节省工作量节省联调 3、Mock 核心要素 匹配规则:mock的接口,改哪些接口,接口哪里的数据模拟响应 4、mock实…

OpenAI 2024年展望:Sam Altman愿望清单的深度解析

引言 Sam Altman 2023年11月22日 重回OpenAI 任CEO。 Sam Altman 2023年12月24日 发布新年需求统计。 OpenAI是一个美国人工智能研究实验室,由非营利组织OpenAI Inc,和其营利组织子公司OpenAI LP所组成。OpenAI 进行 AI 研究的目的是促进和发展友好的人…

听GPT 讲Rust源代码--src/tools(30)

File: rust/src/tools/clippy/clippy_lints/src/casts/cast_slice_from_raw_parts.rs 在Rust源代码中,cast_slice_from_raw_parts.rs文件位于rust/src/tools/clippy/clippy_lints/src/casts/目录下,它是Clippy工具中的一个lint,用于检查通过f…

centos7安装nginx并安装部署前端

目录: 一、安装nginx第一种方式(外网)第二种方式(内网) 二、配置前端项目三、Nginx相关命令 好久不用再次使用生疏,这次记录一下 一、安装nginx 第一种方式(外网) 1、下载nginx ng…

《深入理解Java虚拟机(第三版)》读书笔记:Java内存区域与内存溢出异常、垃圾收集器与内存分配策略

下文是阅读《深入理解Java虚拟机(第3版)》这本书的读书笔记,如有侵权,请联系删除。 文章目录 第2章 Java内存区域与内存溢出异常2.2 运行时数据区域2.3 HotSpot虚拟机对象探秘 第3章 垃圾收集器与内存分配策略3.2 对象已死&…

1.2.3 TCP/IP参考模型

一、OSI参考模型与TCP/IP参考模型 1、应用层:将表示层和会话层都纳入其中,形成一个比较大的层次,包含所有的高层协议 2、传输层:实现端到端的,进程与进程之间的通信。 3、网际层:TCP/IOP模型中最关键的部…

【Unity动画系统】Unity动画系统Animation详解,参数细节你是否弄清?

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

STM32 学习(一)新建工程

本课程使用的stm32型号 引脚定义,有FT能接5v,没有FT能接3.3v 启动配置 第二种启动模式中,系统存储器中存放了一部分Bootloader程序,该程序可以接收串口的数据,然后刷新到主闪存中,这样就可以使用串口下载程…

c语言-位操作符练习题

文章目录 前言一、n&(n-1)的运用场景(n为整数)二、&1 和 >>的应用场景总结 前言 本篇文章介绍利用c语言的位操作符解决一些练习题,目的是掌握各个位操作符的使用和应用场景。 表1.1为c语言中的位操作符 操作符含义&按位与|按位或^按位异或~按位…

k8s的二进制部署和网络类型

k8s的二进制部署 master01:192.168.233.10 kube-apiserver kube-controller-manager kube-scheduler etcd master02:192.168.233.20 kube-apiserver kube-controller-manager kube-scheduler node01:192.168.233.30 kubelet kube-proxy etc…

在idea中使用git(Gitee)

目录 前言 一、常用远程仓库托管服务 二、gitee使用 1 创建远程仓库 2 配置SSH公钥 ​编辑 ​编辑 3 把本地代码推送到远端 4 其他操作远程仓库 1)克隆 2)抓取和拉取 3)解决合并冲突 三、在idea中使用git 四、场景分析 总结 前言 昨天详细学…

【惠友小课堂】“拇外翻”:大脚趾凸出也是病!得治!

大脚趾凸出的痛谁懂? 有一种尴尬叫不敢脱鞋, 鞋一脱,外翻的脚趾就“原形毕露”…… 这都是“拇外翻”惹的祸。 拇外翻,俗称大脚骨,多发于女性,是大脚趾向外明显倾斜,超过正常生理范围的一种足…

keil软件使用和数据区传送

一、实验目的: 1、掌握keil软件下编写、编译、调试C51程序的方法; 2、掌握片内RAM和片外RAM的数据传送操作 二、实验内容 在keil中编写C51程序,在外部数据存储器从地址100H单元开始存入10条字节型随机数据,再传输到内部数据存…

Illustrator脚本 #015 自动角线

这是一个在画板上自动生成辅助线和角线的脚本,只要单击最右边按钮运行脚本即可。 绿色的为参考线及出血线。 #target "Illustrator" var settings {addTrim : true,addBleedGuide : true,addCenterGuide : true,addCover : false,overlapAlert : false,…

Xshell连接ubuntu,从github克隆项目,用Xshell克隆项目

访问不了github:https://blog.csdn.net/liu834189447/article/details/135246914 短暂解决访问问题。 ping不通虚拟机/无法连接虚拟机:https://blog.csdn.net/liu834189447/article/details/135240276 ps: Xshell、ubuntu的粘贴快捷键为 Shift Insert …

51单片机(STC8)-- GPIO输入输出

文章目录 I/O口相关寄存器端口数据寄存器端口模式配置寄存器(PxM0,PxM1)端口上拉电阻控制寄存器(PxPU)关于I/O的注意事项 配置I/O口I/O设置demoI/O端口模式LED控制(I/O输出)按键检测(I/O输入) S…