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

    文章

    388

    浏览量

    21012
  • Cortex
    +关注

    关注

    2

    文章

    183

    浏览量

    44702
  • ARM架构
    +关注

    关注

    14

    文章

    130

    浏览量

    35694
收藏 人收藏

    评论

    相关推荐

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

    一些ARM处理器(如Cortex-A9 MPCore)不同,ARM®Cortex®-A5x MPCore和Cortex-A72 MPCore处理器不包括集成中断控制器。 这些内核实现GIC
    发表于 08-23 07:21

    基于ARM Cortex-A9架构小米路由硬件配置如何,拆解达人来支招

    个1GHz的ARM®的Cortex™-A9双核芯片:该芯片采用最先进的TurboQAM技术。在802.11ac下
    发表于 03-10 12:09

    x86架构和arm架构的区别

    架构是X86指令集,它属于CISC指令集。ARM架构是ARM指令集,属于RISC指令集。X86是冯若依曼结构,ARM是哈弗结构,这个不定,比如ARM7TDMI用的就是冯若依曼结构。其实都是差不多,X86指令多,应用范围广,但效率就显得低
    发表于 09-27 14:40

    基于ARMv7架构Cortex系列

    架构Cortex系列由ARM公司在2006年推出,Cortex系列的推出满足人们对性能日渐复杂的设计要求,根据不同需求,Cortex系列共三个不同的子系列...
    发表于 08-09 06:37

    arm架构和x86架构有什么区别是什么?

    Cortex系列处理器是从从ARM哪个架构开始的?arm架构和x86架构有什么区别是什么?如何计算地址线和数据线?
    发表于 10-28 08:36

    基于Cortex-A53架构的低功耗高性能处理器RK3328有哪些功能呢

    Cortex-A53架构的低功耗高性能处理器RK3328有哪些功能呢?
    发表于 03-09 06:27

    ARM GIC(八)GICv3架构的变化

    架构。版本也历经了多个变化,从最初的GICv1到现在最新的GICv4。每个新的版本,都增加了一些新的功能。目前最新的GIC-600 IP,支持
    发表于 04-07 10:59

    请问在Keil uVision5下怎么为某一架构重新生成libmicroros.a

    a。那我想请教下在Keil uVision5下怎么为某一架构重新生成libmicroros.a。谢谢!
    发表于 04-12 10:02

    X86架构和ARM架构

    架构个32位元精简指令集中央处理器架构,x86架构指的是特定微处理器执行的一些计算机语言指令集。X86架构比ARM架构系统在性能方面要快得多、强得多。
    发表于 11-30 12:48
    X86<b>架构</b>和ARM<b>架构</b>

    深入解析ARM Cortex-A12架构

    Cortex-A12
    发表于 01-14 12:31 20次下载

    Cortex-A17架构 国产最强ARM处理器曝光

    Cortex-A17架构,号称是跑分王。
    发表于 05-23 10:08 1.5w次阅读

    ARM公司Cortex A15相比Cortex A9核心 到底强在哪里?

    Cortex A15架构。同时,智能移动设备iPad3的处理器传言也会用上全新的ARM Cortex A15架构处理器。虽然苹果iPad3处理器较
    发表于 10-10 16:26 1.5w次阅读
    ARM公司<b>Cortex</b> <b>A</b>15相比<b>Cortex</b> <b>A9</b>核心 到底强在哪里?

    关于ARM cortex-A5架构的介绍

    cortex-A5架构的消息
    的头像 发表于 06-26 10:31 6907次阅读

    NXP Cortex A9系列嵌入式介绍

    Cortex-A9架构 i.MX6处理器的核心板卡,整板尺寸小巧仅40mm*70mm,采用四个高度为1.5mm的超薄连接器,引脚数量多达320PIN,将处理器全部功能引脚引出。
    的头像 发表于 10-15 17:15 4433次阅读
    NXP <b>Cortex</b> <b>A9</b>系列嵌入式介绍

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

    结构中,主要原因是图方便,但是要知道,这其实是个不好的习惯,而且降低整体代码的性能。
    的头像 发表于 12-24 18:18 388次阅读