浅谈MDK, IAR,CLANG和GCC的局部变量字节对齐处理差异(2023-10-13)

视频:

https://www.bilibili.com/video/BV1CB4y1Z7kA

浅谈MDK, IAR, CLANG和GCC的局部变量字节对齐处理差异


问题由来:

早期这个帖子里面的局部变量对齐仅测试了MDK AC5,但项目中使用AC6发现了新问题,看来AAPCS规约研究的还是不够细:

https://www.armbbs.cn/forum.php?mod=viewthread&tid=109400

当时对局部变量的描述如下:局部变量使用的是栈空间(除了静态局部变量和编译器优化不使用栈,直接用寄存器做变量空间),也就是大家使用在xxxx.S启动文件开辟的stack空间。

在M内核里面,局部变量的对齐问题如果研究起来是最烧脑的,这个涉及到AAPCS规约(Procedure Call Standard for the Arm Architecture,  Arm架构的程序调用标准)。

上面这个贴图最重要,仅需理解上面这两条就可以,意思是说,栈地址是全程至少保持4字节对齐的,因为M内核的硬件长做了处理,SP最低两个bit,bit0和bit1直接固定为0了。

但是在程序调用入口处必须满足8字节对齐,对于C语言,不需要用户去管,编译器都帮我们处理好了,先来个简单的示例压压惊:

而汇编文件是需要用户去处理的。以xxx.S启动文件为例,通过伪指令PRESERVE8来保证

那么问题来了,我们搞个4对齐是不是会出问题,一般情况下也没问题的,但特殊情况下不行,特别调用C库的sprintf和printf函数,直接给你输出个不知所以然的结果来。比如我在H7上做如下测试:

输出结果:


总结:

MDK AC5和IAR的用法差不多,MDK AC6和GCC的用法差不多视频里面做了详细对比测试)。

对于GCC和MDK AC6,大家可以手动添加__ALIGNED()设置对齐,这个原定义在CMSIS软件的头文件里面。

#define __ALIGNED(x)                           __attribute__((aligned(x)))

AC6定义如下:

#define __ALIGNED(x)                           __attribute__((aligned(x)))

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

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

相关文章

ArcGIS笔记4_水动力模型验证不理想时如何修改局部水深地形

本文目录 前言Step 1 模型验证不理想的情况Step 2 修改确值点并重新插值 前言 本章主要服务于MIKE水动力模型的调整修改工作。水动力模型跑完之后,常常会出现验证结果不理想的情况,比如潮位验证中,实测站点数据与模拟数据相差很大&#xff0…

苹果ios用户下载ipa文件内测签名的后的app应用下载安装到手机图标消失了-解决方案

下载好的应用竟然找不到了?这么神奇?我尝试了解了一下复原了同学给我的内容果然出现了我尝试科技了一下,总结了以下的可能性!同学如果这个回答解决了你的困扰,同学给个赞,如果你有更好的排查方案评论区分享…

Modelsim查看波形窗口内断言(SVA)消息指示器

步骤1:创建工程并编译完成 在相应目录下创建好工程并编译无错误后; 步骤二: 在菜单栏中选择“Simulate”—>“Start Simulation”—>“Others”,在“Others Vsim Options”中输入 -msgmode both -displaymsgmode both 步骤三&#xf…

UI自动化测试 —— Jenkins配置

前一段时间帮助团队搭建了UI自动化环境,这里将Jenkins环境的一些配置分享给大家。 背景: 团队下半年的目标之一是实现自动化测试,这里要吐槽一下,之前开发的测试平台了,最初的目的是用来做接口自动化测试和性能测试&…

SQL Server远程登录失败

SQL Server远程登录失败 检查SQL SERVER 是否允许远程访问. 具体步骤: 1)在远端SQL Server主机上,打开SSMS并连接数据库 2)在相应”数据库”上单击右键,选择”属性” 3)选择”连接”选项卡,检查”远程服务器连接”下,RPC服务是否选择. 设置SQL Server相关TCP连接 1.打开SQL Se…

下载Python的不同版本在同一台电脑上如何共存

1. 下载安装不同版本的Python 官网下载:https://www.python.org/downloads/安装自己需要的版本(我这里以Python3.6和Python3.9为例,下载安装细节不过多赘述) (这里的安装路径自己设定,命名最好是根据下载…

项目管理之六大目标及成功方程式

项目管理的六大目标分别是范围、质量、时间、成本、收益和风险。在项目开始之前,需要明确了解项目的范围,并在项目执行过程中对范围进行严格控制,确保项目不偏离既定的范围。同时,需要明确项目的质量标准和预期成果,然…

使用 Apache Kafka 进行发布-订阅通信中的微服务

发布-订阅消息系统在任何企业架构中都发挥着重要作用,因为它可以实现可靠的集成,而无需紧密耦合应用程序。在解耦的系统之间共享数据的能力并不是一个容易解决的问题。 考虑一家拥有多个使用不同语言和平台独立构建的应用程序的企业。它需要响应地共享数…

frp隧道(流量代理)

代理 代理使用场景 拿下远程web服务器webshell连接不稳定,需要使用稳定的木马程序远程服务器无法直接连接攻击者电脑(内网IP)需要借助公网vps转发来自失陷服务器的木马流量借助frp服务器(vps)和客户端(内…

MOS管经常被烧坏,多半是这些原因

MOS管,即金属氧化物半导体场效应管,是电子电路中常见的重要元件,因此很多电子工程师会选择在电路板上使用MOS管,但在使用过程中经常会遇见MOS管莫名被烧毁的问题,这些问题是如何造成的?如何解决&#xff1f…

彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)

彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK) Chapter1 (彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)一、Qt Creator环境设置二、编码知识科普Qt常见的两种编码是:UTF-8和GBK 三、编码转换四、QString显示中文乱码的原…

香港服务器在大陆连不上怎么回事?

众所周知,香港服务器与中国内地的网络连通性是比较好的,不仅是机房地理距离的加持,还有就是利用CN2 GIABGP高速线路,参考恒创科技香港服务器访问内地网站,无需绕国际线路转换再到大陆,访问速度会比较快。但…

【交叉编译】tslib库交叉编译

tslib 是一个捕捉触屏事件的工具。qt 库在交叉编译的时候,提供了 -tslib 选项,使用该选项需要提前对 tslib 库进行交叉编译。 目录 1、源码下载 2、安装依赖 3、创建编译脚本 4、开始编译 1、源码下载 tslib 源码下载地址: https://github.com/lib…

《动手学深度学习 Pytorch版》 8.4 循环神经网络

8.4.1 无隐状态的神经网络 对于无隐藏装态的神经网络来说,给定一个小批量样本 X ∈ R n d \boldsymbol{X}\in\mathbb{R}^{n\times d} X∈Rnd,则隐藏层的输出 H ∈ R n h \boldsymbol{H}\in\mathbb{R}^{n\times h} H∈Rnh 通过下式计算: …

html和css基础练习

vscode快捷键 alt b 在浏览器中打开 alt shift b 在其他浏览器打开 ctrl / 注释 ctrl y 快捷键删除 参考文章 https://www.bilibili.com/video/BV1m84y1w7Tb 基础html标签 img:图像,title:头部文字,body:主…

格式工厂怎么把两个视频合并在一起

免费的工具谁不喜欢呢,今天为大家介绍的是格式工厂这款多功能视频转换软件,然而今天主要为大家介绍的是格式工厂的视频合并功能。 是的,你没有听错,格式工厂除了转换之外,还可以视频合适、视频剪辑、视频分割、去水印…

linux 安装python django pip 遇到的问题

Python解决SSL不可用问题 解决方案: 首先要明白python版本需要和openssl的版本需要相对匹配的,在Python3.7之后的版本,依赖的openssl,必须要是1.1或者1.0.2之后的版本,或者安装了2.6.4之后的libressl,linux…

实验室超声波清洗器的频率越高越好?

实验室超声波清洗器是一种新型的清洗设备,为实验室的高清洁度需求而开发。可实现各种试验玻璃容器和精密设备的自动清洗,处理传统人工清洗费时费力、效果难以控制的缺点,避免科研人员暴露在有害的清洗试剂中,改善实验室清洗环境。…

Meta开源数字水印Stable Signature,极大增强生成式AI安全

全球社交、科技巨头Meta(Facebook、Instagram等母公司)在官网宣布,开源数字水印产品Stable Signature,并公开论文。 据悉,Stable Signature是由Meta和INRIA(法国国家信息与自动化研究所)联合开…

“一馆一策”保亚运,精准气象服务背后的数据魔法

第十九届杭州亚运会已隆重闭幕,十五个比赛日留下了无数精彩的瞬间:开幕式数字火炬手点燃主火炬、男女100米接力赛的激情澎湃、“时间孤勇者”丘索维金娜的坚持、围棋选手柯洁的泪洒赛场…… 作为亚洲水平最高的综合型运动会,本届杭州亚运会竞…