0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Cortex A9架构下为何使用结构体效率会更高一些

电子设计 来源:电子设计 作者:电子设计 2020-12-24 12:51 次阅读

作为过来人,我发现很多程序猿新手,在编写代码的时候,特别喜欢定义很多独立的全局变量,而不是把这些变量封装到一个结构体中,主要原因是图方便,但是要知道,这其实是一个不好的习惯,而且会降低整体代码的性能。

另一方面,最近有幸与大神「公众号:裸机思维」的傻孩子交流的时候,他聊到:“其实Cortex在架构层面就是更偏好面向对象的(哪怕你只是使用了结构体),其表现形式就是:「Cortex所有的寻址模式都是间接寻址」——换句话说「一定依赖一个寄存器作为基地址」。

举例来说,同样是访问外设寄存器,过去在8位和16位机时代,人们喜欢给每一个寄存器都单独绑定地址——当作全局变量来访问,而现在Cortex在架构上更鼓励底层驱动以寄存器页(也就是结构体)为单位来定义寄存器,这也就是说,同一个外设的寄存器是借助拥有同一个基地址的结构体来访问的。”

以Cortex A9架构为前提,下面一口君详细给你解释为什么使用结构体效率会更高一些。

一、全局变量代码反汇编

1. 源文件

「gcd.s」

text
.global _start
_start:
ldr sp,=0x70000000 get stack top pointer
b main

「main.c」


* main.c

* Created on: 2020-12-12
* Author: pengdan

int xx=0;
int yy=0;
int zz=0;
int main(void)

xx=0x11;
yy=0x22;
zz=0x33;
while(1);
return 0;

「map.lds」

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS

. = 0x40008000;
. = ALIGN(4);
.text :

gcd.o(.text)
*(.text)

. = ALIGN(4);
.rodata :
{ *(.rodata) }
. = ALIGN(4);
.data :
{ *(.data) }
. = ALIGN(4);
.bss :
{ *(.bss) }

「Makefile」

TARGET=gcd
TARGETC=main
all:
arm-none-linux-gnueabi-gcc -O1 -g -c -o $(TARGETC).o $(TARGETC).c
arm-none-linux-gnueabi-gcc -O1 -g -c -o $(TARGET).o $(TARGET).s
arm-none-linux-gnueabi-gcc -O1 -g -S -o $(TARGETC).s $(TARGETC).c
arm-none-linux-gnueabi-ld $(TARGETC).o $(TARGET).o -Tmap.lds -o $(TARGET).elf
arm-none-linux-gnueabi-objcopy -O binary -S $(TARGET).elf $(TARGET).bin
arm-none-linux-gnueabi-objdump -D $(TARGET).elf > $(TARGET).dis
clean:
rm -rf *.o *.elf *.dis *.bin

【交叉编译工具,自行搜索安装】

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式设计
    +关注

    关注

    0

    文章

    390

    浏览量

    21275
  • Cortex
    +关注

    关注

    2

    文章

    202

    浏览量

    46457
  • ARM架构
    +关注

    关注

    14

    文章

    177

    浏览量

    36295
收藏 人收藏

    评论

    相关推荐

    结构成员的顺序影响结构的大小吗

    相同的结构成员,如果把顺序调整下,会不会影响结构的大小? 答案是的,这主要跟字节对齐有关
    的头像 发表于 11-25 16:24 106次阅读

    Arm Cortex-X925 树立全新性能标杆,实现人工智能、游戏和多任务处理的先进功能

    Cortex-X925基于Armv9.2架构,树立了CPU性能的全新标杆,实现了Cortex-X系列有史以来最大幅度的IPC同比提升。得益于最新的三纳米工艺节点,Cortex-X925
    的头像 发表于 10-08 12:43 250次阅读
    Arm <b class='flag-5'>Cortex</b>-X925 树立全新性能标杆,实现人工智能、游戏和多任务处理的先进功能

    iTOP-3562开发板/核心板采用RK3562,集成四核A53+Mali G52架构

    A53+Mali G52架构,主频2GHZ,内置1TOPSNPU算力,RK809动态调频。支持OpenGLES1.1/2.0/3.2、0penCL2.0、Vulkan 1.1内嵌高性能2D加速硬件
    发表于 09-05 11:30

    X86架构处理器有哪些优点和缺点

    X86架构处理器作为计算机领域的重要组成部分,具有多个显著的优点和定的缺点。以下是对X86架构处理器优缺点的详细分析。
    的头像 发表于 08-22 11:25 1671次阅读

    X86架构和ARM架构有什么区别

    X86架构和ARM架构是两种主流的CPU架构,它们在多个方面存在显著的差异。以下是对这两种架构的详细比较,涵盖了追求目标、应用领域、技术特点、性能功耗比、软件生态以及未来趋势等方面。
    的头像 发表于 08-22 11:21 8855次阅读

    ElfBoard技术贴|如何将libwebsockets库编译为x86架构

    和高效。通过在主机环境中编译运用x86架构下的libwebsockets库,可以充分利用主机卓越的计算性能与丰富的调试资源,显著提升开发及调试工作的效率与便捷性。
    的头像 发表于 07-10 09:38 1185次阅读
    ElfBoard技术贴|如何将libwebsockets库编译为x86<b class='flag-5'>架构</b>

    迅为RK3562核心板四核A53+MaliG52架构,应用于商业平板电脑,视频会议,智能家居,教育电子,医疗设备,边缘计算,工业应用

    迅为RK3562核心板四核A53+MaliG52架构,应用于商业平板电脑,视频会议,智能家居,教育电子,医疗设备,边缘计算,工业应用
    发表于 07-09 10:57

    移动端芯片性能提升,Armv9架构新升级引发关注

    “数码博主”5月17日的最新爆料指出,联发科积极推进Armv9代IP BLACKHAWK“黑鹰”的架构设计,预计天玑9400芯片将采用这一架构,有望以“全大核”设计再度领跑移动So
    的头像 发表于 05-17 16:51 981次阅读

    为何什么risc-v芯片比arm的效率

    RISC-V芯片在某些情况下可能相对于ARM架构芯片表现出更高效率,这主要得益于RISC-V设计的一些特点和优势。 首先,RISC-V指令集架构
    发表于 04-28 09:38

    鸿湖万联成功举办基于x86架构的OpenHarmony应用生态挑战赛

    近日,由开放原子开源基金、央视网、江苏省工业和信息化厅、无锡市人民政府、江苏软件产业人才发展基金、苏州工业园区、无锡高新区等共同承办,鸿湖万联参与共建的“基于x86架构的OpenHarmony应用生态挑战赛”决赛路演在无锡圆
    的头像 发表于 04-23 09:26 325次阅读
    鸿湖万联成功举办基于x86<b class='flag-5'>架构</b>的OpenHarmony应用生态挑战赛

    适用于ARM® Cortex™-A8/A9 SOC 和 FPGA 的TPS65218电源管理数据表

    电子发烧友网站提供《适用于ARM® Cortex™-A8/A9 SOC 和 FPGA 的TPS65218电源管理数据表.pdf》资料免费下载
    发表于 03-06 14:18 0次下载
    适用于ARM® <b class='flag-5'>Cortex</b>™-<b class='flag-5'>A</b>8/<b class='flag-5'>A9</b> SOC 和 FPGA 的TPS65218电源管理数据表

    对于绘制USB DRP架构一些疑问求解

    我正在绘制新系统的架构,对此有一些疑问: 1) 通常左侧板有 20V 固定电源,将通过 TypeC 端口向右板提供 20V。 a) Vbus 通过 Mosfets 直接连接到 20V,如果谈判失败
    发表于 02-23 06:31

    arm架构和x86架构区别 linux是x86还是arm

    ARM架构和x86架构是两种不同的计算机处理器架构,它们在体系结构、指令集、应用领域等方面有着明显的区别。Linux操作系统则具有广泛的适配性,可以运行在各种
    的头像 发表于 01-30 13:46 1.7w次阅读

    Arm Cortex-M52的主要特性和规格

    Arm Cortex-M52是款采Arm Helium 技术的新型微控制器内核,旨在将AI功能引入更小、成本更低的物联网设备,而不是基于Arm Cortex-M55内核的SoC,Arm Co
    的头像 发表于 01-02 11:12 1391次阅读
    Arm <b class='flag-5'>Cortex</b>-M52的主要特性和规格

    Debian宣布停止i386架构支持

    近日,在英国剑桥市举行的小规模DebConf活动中,Debian GNU/Linux的发布团队召开春季会议,探讨了未来发展方向,其中包括停止对i386架构的支持。
    的头像 发表于 12-19 10:16 836次阅读