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

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

3天内不再提示

Cortex A9架构:为什么使用结构体效率会更高一些

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

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

另一方面,最近有幸与大神「公众号:裸机思维」的傻孩子交流的时候,他聊到:“其实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

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

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

    关注

    2

    文章

    194

    浏览量

    45859
  • ARM架构
    +关注

    关注

    14

    文章

    168

    浏览量

    36015
收藏 人收藏

    评论

    相关推荐

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

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

    lm35传感器和18b20传感器哪个精度高一些

    这两个哪个精度高一些,分别是多少,还有测温范围是多少
    发表于 10-07 07:16

    w806和esp32哪个性价比高一些

    w806和esp32哪个性价比高一些
    发表于 09-22 06:00

    BM1684架构介绍

    、概述 图胜千言,先po架构图,如下所示: 二、TPU架构 2.1 DTCM DTCM是TPU内部的MCU ARM
    发表于 09-19 08:11

    《 AI加速器架构设计与实现》+学习和一些思考

    :神经网络的结构、数据流向和基本运算类型 高效设计的核心问题是:阵列和阵列的组织形式,如何最大化的利用运算单元,减少无谓的开销(包括运算开销和储存开销) 读书报告的内容包括书籍内容和一些自己的学习理解
    发表于 09-16 11:11

    将GICv2中断控制器与ARM Cortex-A5x和Cortex-A72处理器集成

    与之前的一些ARM处理器(如Cortex-A9 MPCore)不同,ARM®Cortex®-A5x MPCore和Cortex-A72 MP
    发表于 08-23 07:21

    ARM Cortex-A系列ARMv8-A程序员指南

    。 有关ARMv7-A架构般介绍,请参阅ARM®Cortex®-A系列程序员指南。 本指南还可以帮助您熟悉本卷中讨论的
    发表于 08-22 07:22

    Arm Cortex-R82处理器技术参考手册

    Cortex®-R82处理器是款中等性能的多核有序超标量处理器,适用于实时嵌入式应用。 Cortex®-R82处理器采用ARM®V8-R AArch64架构。 ARM®V8-R AA
    发表于 08-17 07:45

    Cortex-A5技术参考手册

    Cortex-A5处理器是款高性能、低功耗的ARM宏单元,具有提供完整虚拟内存功能的级高速缓存子系统。 Cortex-A5处理器实现了ARMv7
    发表于 08-17 07:16

    ARM Cortex-A17 MPCore技术参考手册

    Cortex-A17 MPCore处理器是款高性能、低功耗的处理器,采用ARMv7架构Cortex-A17 MPCore处理器在带有L1和L2高速缓存子系统的单个多处理器设备中具
    发表于 08-17 07:06

    Cortex-A9技术参考手册

    Cortex-A9处理器是款高性能、低功耗的ARM宏单元,具有提供完整虚拟内存功能的级高速缓存子系统。 Cortex-A9处理器实现ARMv7-
    发表于 08-17 06:53

    Arm CCA安全模型1.0架构与技术组

    ARM保密计算体系结构(CCA)是种提供称为Realms的受保护执行环境的体系结构。 领域的目的是为机密计算提供环境。 除了标准ARM体系结构提供的基于特权的隔离之外,领域还接受反向
    发表于 08-11 07:39

    ARM CoreLink GIC-500通用中断控制器技术参考手册

    GIC-500是个构建时可配置的中断控制器,最多支持128个内核。GIC-500仅支持实现ARMv8架构的内核,以及具有标准GIC流协议接口的GIC CPU接口,如Cortex®-A
    发表于 08-02 14:02

    ARM指令集体系结构(ISA)的一些功能介绍

    本指南介绍了特定于每个ARM指令集体系结构(ISA)的一些功能,并考虑了哪些应用程序最好地利用了这些功能。该指南的重点是Cortex-R。然而,我们也考虑Cortex-A
    发表于 08-02 07:39

    Arm Cortex-X4推进了CPU性能的前沿领域

    -X2和Cortex-X3 CPU的IPC性能提高到两位数,这些CPU是在Armv9架构上建立的。所有的Cortex-X CPU都是我们Cortex
    发表于 05-29 18:25