[FreeRTOS 基础知识] 栈

文章目录

    • 栈的概念
    • 使用C语言实现 栈
    • 通过代码反汇编解析 栈


栈的概念

所谓的栈就是一块空间的内存,CPU的SP寄存器指向它,它可以用于函数调用,局部变量,多任务系统里保存现场。


使用C语言实现 栈

volatile int num=0;int fun_b(volatile int a)
{a = a+2;return a;
}    int fun_c(volatile int a)
{a = a+2;return a;
}    void fun_a(volatile int a)
{num = fun_b(a);num = fun_c(num);
}int main(void)
{fun_a(99);return 0;
}

代码中函数调用关系:
main -> fun_a
fun_a -> fun_b
-> fun_c


通过代码反汇编解析 栈

编译代码时,制作反汇编步骤: 在配置中添加命令

fromelf --text  -a -c --output=xxx.dis xxx.axf

在这里插入图片描述

其中的xxx.axf文件在linker中获取

在这里插入图片描述

运行后反汇编文件在工程目录下。查看反汇编代码:
在这里插入图片描述
main函数中使用BL命令跳转到fun_a函数(pc=0x80002d0,lr=0x08000308)
在这里插入图片描述
fun_a函数中使用BL命令跳转到fun_b函数(pc=0x80002ec,lr=0x080002d8),运行完fun_b函数后,使用BL命令跳转到fun_c函数(pc=0x80002f6,lr=0x080002e2)
在这里插入图片描述
在上面的过程中发现lr的值会被覆盖,若被覆盖就会导致找不到之前函数返回的地方。因此在每个函数的第一条反汇编会把lr值保存到栈中(使用push命令),当函数结束的时候使用pop命令回到之前的位置。

整个栈过程如下图所示:
在这里插入图片描述

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

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

相关文章

i.MX8MP平台开发分享(RDC资源分配控制器篇)

1.spec RDC 配置信息被发送到结构端口、内存垫片、信号控制器和外设,以根据域分配控制访问。 结构使用与每个端口相关的域标识符,将此信息与总线事务一起包含在内。当从属加密垫圈遇到总线事务时,它会将事务域 ID 与 RDC 提供的允许域列表进…

springboot 启动原理、启动过程、启动机制的介绍

Spring Boot 是一种基于 Java 的框架,用于创建独立的、生产级别的 Spring 应用程序。它的主要目标是简化 Spring 应用的初始搭建和开发过程,同时提供一系列大型项目常见的非功能性特征(如嵌入式服务器、安全性、度量、健康检查和外部化配置)。以下是 Spring Boot 的一些核心…

串口通讯、RS485、232、SPI、I2C

串行通信与并行通信的比较 1.同步和异步 同步串口通信(Synchronous Serial Communication) 异步串口通信(Asynchronous Serial Communication) 比较 2.全双工,半双工,单工 全双工(Full Du…

Midjourney绘画参数设置详解

在数字艺术和设计领域,Midjourney是一款强大的绘画工具,它允许艺术家和设计师以数字方式创作出精美的图像。为了充分发挥Midjourney的潜力,正确设置其绘画参数至关重要。本文将深入探讨Midjourney的绘画参数设置,帮助用户更好地掌…

第十五届蓝桥杯物联网试题(国赛)

好,很好,国赛直接来个阅读理解,我猛做4个小时40分钟,cpu都干冒烟了,也算是勉强做完吧,做的很仓促,没多检查就交了,方波不会,A板有个指示灯没做,其他应该都还凑…

使用EMQX搭建MQTT服务

简介:EMQX 是一款开源的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条,单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息,同时保证毫秒…

php质量工具系列之phploc

phploc是一个快速测量PHP项目大小的工具 结果支持raw csv xml json格式,可输出文件或者打印到控制台 安装 PHAR方式 wget https://phar.phpunit.de/phploc.pharphp phploc.phar -vComposer方式(推荐) composer global require --dev phploc/phplocphploc -v使用 …

内存动态管理

内存动态管理 1 .为什么要有动态内存分配 我们已经掌握的内存开辟⽅式有: int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的⽅式有两个特点: • 空间开辟⼤⼩是固定的。 • 数组在…

SQL Developer 小贴士:备份和恢复连接信息

问题与概念 有时候SQL Developer需要重装,能备份和恢复连接信息就比较重要。 SQL Developer提供连接的导出和导入功能。 导出连接 第一步:选择连接。 第2步:指定输出文件,例如sqldconns.json 第3步:因为连接中可…

netty LengthFieldBasedFrameDecoder 根据动态长度分包粘包

如下数据格式 在方法: // Integer.MAX_VALUE, // maxFrameLength: 最大允许的帧长度// 4, // lengthFieldOffset: 长度字段在帧中的偏移量,这里是在帧头之后// 4, // lengthFieldLength: 长度字段的长度,4字节表示32位整数// 0, // …

10道C++ STL高频面试题[31-40](附带完整参考答案)

C STL高频面试题[21-30] 31. STL容器是线程安全的吗?32. 如何在多线程环境下安全地使用STL?33. 什么是泛型编程,它在STL中如何应用?34. 函数对象和lambda表达式在STL中有什么作用?35. 你如何选择合适的STL容器&#xf…

CentOS7配置国内清华源并安装docker-ce以及配置docker加速

说明 由于国内访问国外的网站包括docker网站,由于种种的原因经常打不开,或无法访问,所以替换成国内的软件源和国内镜像就是非常必要的了,这里整理了我安装配置的基本的步骤。 国内的软件源有很多,这里选择清华源作为…

2024下半年Meme币趋势分析

随着加密货币市场的不断演变,Meme币在过去几年中引起了广泛关注。虽然这些数字资产最初因其搞笑和讽刺的性质而受到欢迎,但它们在市场上的表现和投资潜力也逐渐被重视。2024年下半年,Meme币市场将迎来新的趋势和挑战。本篇文章将探讨Meme币的…

Leecode---技巧---颜色分类、下一个排列、寻找重复数

思路&#xff1a; 遍历一遍记录0,1,2的个数&#xff0c;然后再遍历一次&#xff0c;按照0,1,2的个数修改nums即可。 class Solution { public:void sortColors(vector<int>& nums){int n0 0, n1 0, n2 0;for(int x: nums){if(x0) n0;else if(x1) n1;else n2;}for…

python正则表达式使用样例(二)

一、从文本中提取信息 从复杂文本中提取特定信息&#xff0c;例如提取电话号码、日期等&#xff1a; import retext "Contact us at supportexample.com or call us at (555) 123-4567"email_pattern r[a-zA-Z0-9_.-][a-zA-Z0-9-]\.[a-zA-Z0-9-.] phone_pattern …

Android多媒体之通知的使用

Android通知的使用 一、创建通知渠道&#xff08;Notification Channel&#xff09; 从Android 8.0&#xff08;API级别26&#xff09;开始&#xff0c;所有通知都必须分配到一个渠道。这允许用户为不同的通知类型设置不同的优先级和可见性。 获取NotificationManager实例&am…

程序员应该有的素养

对于程序员而言&#xff0c;职业素养的重要性不言而喻。在我的职业生涯中&#xff0c;我深刻体会到了专业精神、沟通能力和持续学习这三大职业素养的重要性。 专业精神是程序员的基石。一个具备专业精神的程序员&#xff0c;对技术有着执着的追求&#xff0c;对工作充满热情。他…

大容量异步电机直接转矩(DTC)控制matlab仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; DTC简介 直接转矩控制的基本思想就是利用逆变器所产生的空间电压矢量来控制定子磁链的旋转速度&#xff0c;通过控制定子磁链的走停来改变定子磁链的平均旋转速度的大小&#xff0c;从而改变磁通角的大小进而…

若依前后端分离项目(一)环境搭建

一、代码下载 RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 其中ruoyi-ui为前端项目 二、数据库 1、MySQL 创建数据库ry-vue并导入数据…

idea快捷键 | 代码整体左移或右移(PyCharm)

代码整体左移 Shift Tab 代码整体右移 Tab 点我以获更多快捷键