Cortex-M​ 函数调用的入栈与出栈操作

ARM Cortex-M 系列单片机中,普通C函数调用的入栈(压栈)和出栈操作通常由编译器编译后生成的代码管理,而硬件仅负责部分关键操作。以下是详细分析:


1. 函数调用与返回的核心机制

(1) 硬件自动完成的部分
  • 返回地址的保存
    当通过 BL(Branch with Link)或 BLX 指令调用函数时,**硬件会自动将返回地址(即下一条指令的地址)保存到 LR(Link Register)**中。
    例如:

    BL my_function  ; 调用函数,硬件自动将返回地址存入 LR
    
  • 返回地址的恢复
    函数返回时,通过 BX LRMOV PC, LR 指令,硬件会跳转回 LR 中的地址继续执行。

(2) 软件管理的部分
  • 寄存器的保存与恢复
    C语言写的函数调用,如果被调用的函数需要修改某些寄存器(如 R4-R11),编译器生成的代码会

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

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

相关文章

DeepSeek能否用于对话系统(Chatbot)?技术解析与应用实例!

引言:Chatbot 的进化与挑战 你有没有发现,现在的AI聊天机器人越来越聪明了?无论是客服助手、智能语音设备,还是社交媒体上的自动回复,Chatbot(对话系统)已经渗透到我们生活的方方面面。但问题是…

多表查询的多与一

1.查寻表需要的条件 1.1.首先我们要了解查询表有哪些 1.1.1.多对一 多对一就是一个年表拥有例外一个表的多条数据 一个表对应立一个表的多条数据,另一个表对应这个表的多条数据 这个点被称为多对一 1.1.2.多对多 多对多简单来说就是需要一个中间商 中间商就…

配置文件、Spring日志

SpringBoot配置⽂件 SpringBoot⽀持并定义了配置⽂件的格式, 也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的 ⽬的. 很多项⽬或者框架的配置信息也放在配置⽂件 中, ⽐如: 项⽬的启动端⼝ 数据库的连接信息(包含⽤⼾名和密码的设置) 第三⽅系统的调⽤密钥等信息 ⽤…

嵌入式——Linux系统的使用以及编程练习

目录 一、Linux的进程、线程概念 (一)命令控制进程 1、命令查看各进程的编号pid 2、命令终止一个进程pid 二、初识Linux系统的虚拟机内存管理 (一)虚拟机内存管理 (二)与STM32内存管理对比 三、Lin…

Springcache+xxljob实现定时刷新缓存

目录 SpringCache详解 SpringCache概述 核心原理 接口抽象与多态 AOP动态代理 核心注解以及使用 公共属性 cacheNames KeyGenerator:key生成器 key condition:缓存的条件,对入参进行判断 注解 xxl-job详解 SpringcacheRedis实现…

前端Uniapp接入UviewPlus详细教程!!!

相信大家在引入UviewPlusUI时遇到很头疼的问题,那就是明明自己是按照官网教程一步一步的走,为什么到处都是bug呢?今天我一定要把这个让人头疼的问题解决了! 1.查看插件市场 重点: 我们打开Dcloud插件市场搜素uviewPl…

vector的介绍与代码演示

由于以后我们写OJ题时会经常使用到vector,所以我们必不可缺的是熟悉它的各个接口。来为我们未来作铺垫。 首先,我们了解一下: https://cplusplus.com/reference/vector/ vector的概念: 1. vector是表示可变大小数组的序列容器…

ZLMediaKit 源码分析——[5] ZLToolKit 中EventPoller之延时任务处理

系列文章目录 第一篇 基于SRS 的 WebRTC 环境搭建 第二篇 基于SRS 实现RTSP接入与WebRTC播放 第三篇 centos下基于ZLMediaKit 的WebRTC 环境搭建 第四篇 WebRTC学习一:获取音频和视频设备 第五篇 WebRTC学习二:WebRTC音视频数据采集 第六篇 WebRTC学习三…

【零基础入门unity游戏开发——2D篇】SortingGroup(排序分组)组件

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、…

26信号和槽_自定义信号(1)

Qt 中也允许自定义信号 ①自定义槽函数,非常关键.开发中大部分情况都是需要自定义槽函数的. 槽函数,就是用户触发某个操作之后,要进行的业务逻辑. ②自定义信号,比较少见.实际开发中很少会需要自定义信号. 信号就对应到用户的某个操作~ 在 GUI,用户能够进行哪些操作…

今天来介绍一下一个简单,灵活的JavaScrip图标工具Chart.js

Chart.js 柱形图 先看效果&#xff1a; 代码部分&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <script src"https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/Chart.js/3.7…

Mysql 中的 binlog、redolog、undolog

Binlog MySQL中的Binlog&#xff08;Binary Log&#xff09; 是 MySQL 用来记录数据库所有数据更改操作的日志文件。它是 MySQL 数据库的核心组件之一&#xff0c;广泛应用于 数据复制、数据恢复 和 故障恢复 等操作中。 Binlog的主要作用&#xff1a; 数据复制&#xff08;…

object中的方法,和String类常用api

Java Object 类和 String 类常用 API 一、Object 类核心方法 Object 类是 Java 中所有类的超类&#xff0c;提供了以下重要方法&#xff1a; 1. 基本方法 方法描述重写建议public boolean equals(Object obj)对象相等性比较必须重写&#xff08;同时重写hashCode&#xff0…

Haskell语言的云安全

Haskell语言的云安全探索 引言 在信息技术迅猛发展的今天&#xff0c;云计算已经成为了企业和个人用户不可或缺的重要组成部分。然而&#xff0c;随着云计算的普及&#xff0c;相关的安全问题也日益突显。云安全不仅涉及数据的安全性、隐私保护&#xff0c;更涵盖了访问控制、…

01背包问题的空间优化与边界处题目解析

01背包问题的空间优化与边界处题目解析 01背包问题是经典的动态规划问题&#xff0c;旨在选择若干物品装入背包&#xff0c;使得总价值最大且不超过背包容量。每个物品只能选或不选&#xff08;0或1&#xff09;&#xff0c;不可分割。 选和不选是01背包问题最大的特征 例题…

vue3+ts+element-plus 开发一个页面模块的详细过程

目录、文件名均使用kebab-case&#xff08;短横线分隔式&#xff09;命名规范 子组件目录&#xff1a;./progress-ctrl/comps 1、新建页面文件 progress-ctrl.vue <script setup lang"ts" name"progress-ctrl"></script><template>&l…

Ubuntu上离线安装ELK(Elasticsearch、Logstash、Kibana)

在 Ubuntu 上离线安装 ELK(Elasticsearch、Logstash、Kibana)的完整步骤如下: 一.安装验证 二.安装步骤 1. 在联网机器上准备离线包 (1) 安装依赖工具 #联网机器 sudo apt update sudo apt install apt-rdepends wget(2) 下载 ELK 的 .deb 安装包 #创建目录将安装包下载…

Git 常用操作整理

1. 提交本地修改 将本地代码的修改保存到 Git 仓库中&#xff0c;为后续操作&#xff08;同步、合并等&#xff09;做准备。 git add . # 添加所有修改&#xff08;新文件、修改文件、删除文件&#xff09; git commit # 提交到本地仓库&#xff08;会打…

Python星球日记 - 第2天:数据类型与变量

&#x1f31f;引言&#xff1a; 上一篇&#xff1a;Python星球日记 - 第1天&#xff1a;欢迎来到Python星球 名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和…

PyTorch的dataloader制作自定义数据集

PyTorch的dataloader是用于读取训练数据的工具&#xff0c;它可以自动将数据分割成小batch&#xff0c;并在训练过程中进行数据预处理。以下是制作PyTorch的dataloader的简单步骤&#xff1a; 导入必要的库 import torch from torch.utils.data import DataLoader, Dataset定…