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

    文章

    393

    浏览量

    22365
  • Cortex
    +关注

    关注

    2

    文章

    220

    浏览量

    48405
  • ARM架构
    +关注

    关注

    15

    文章

    185

    浏览量

    38991
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    为什么不建议用匿名结构

    说起匿名结构,想必大家第感觉就是看着好高大上的名字,但实际上也就那样。 typedef struct { union { struct { uint8_t bit_0:1
    发表于 12-04 07:39

    C语言结构使用

    有时候需要将不同类型的数据组合为个整体,以便于引用。例如,名学生有学号、姓名、性别、年龄等属性,如果针对每个属性都单独定义个变量,那么当有多名学生时变量就难以分清。结构
    发表于 11-12 08:30

    基于蜂鸟E203架构的指令集K扩展

    蜂鸟E203是款基于RISC-V架构的微处理器,其指令集包含RV32I的基本指令集,RV32M的乘法扩展指令集,以及一些常用的定点指令和控制指令。如果需要扩展其指令集,可以考虑使用RISC-V的可
    发表于 10-21 09:38

    迅为Hi3403V610开发板海思Cortex-A55架构核心板卡

    迅为电子重磅推出基于海思Hi3403处理器的高性能核心板,采用先进的四核Cortex-A55架构,主频高达1.4GHz,以强劲算力、超凡能效比与卓越的图像处理能力,为千行百业的智能化升级注入核心动力。无论是智能视觉、工业互联,还是AIoT边缘计算,它都能轻松驾驭,助您畅快
    的头像 发表于 09-30 14:18 370次阅读
    迅为Hi3403V610开发板海思<b class='flag-5'>Cortex-A</b>55<b class='flag-5'>架构</b>核心板卡

    线上研讨 | @9/23 Tinyswitch5不Tiny,拥有更高效、更高瓦更精简的变频反驰式架构

    9月23日,大联大诠鼎集团携手PI将做客大大通直播间带来“Tinyswitch5不Tiny,拥有更高效、更高瓦、更精简的变频反驰式架构”主题研讨
    的头像 发表于 09-18 08:18 335次阅读
    线上研讨<b class='flag-5'>会</b> | @<b class='flag-5'>9</b>/23 Tinyswitch5不Tiny,拥有<b class='flag-5'>更高</b>效、<b class='flag-5'>更高</b>瓦更精简的变频反驰式<b class='flag-5'>架构</b>

    瑞芯微RK3562一体机产品概述

    在工业控制、边缘计算和智能显示等场景中,设备需同时满足高算力、低延迟、长续航三大核心需求。然而,性能与功耗往往是对矛盾:追求极致性能可能导致发热量激增、续航缩短;过度压低功耗又可能牺牲计算效率。瑞芯微RK3562
    的头像 发表于 09-04 14:46 1333次阅读
    瑞芯微RK3562<b class='flag-5'>一体</b>机产品概述

    迅为iTOP-3588S开发板核心板引脚240PIN全部引出8GB内存32GBEMMC存储

    性能强 iTOP-3588S开发板采用瑞芯微RK3588S处理器,是全新代AloT高端应用芯片,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构主频高达2
    发表于 06-23 11:19

    瑞迅科技RK3568主板赋能健康检测一体机创新应用

    硬件平台,RK3568主板的创新应用正在重新定义健康服务的效率与体验。 、RK3568主板:健康检测一体机的“智慧心脏” 瑞迅科技自主研发的RK3568主板,搭载四核ARM Cortex-A
    的头像 发表于 05-22 15:45 583次阅读
    瑞迅科技RK3568主板赋能健康检测<b class='flag-5'>一体</b>机创新应用

    iTOP-3588S开发板四核心架构GPU内置GPU可以完全兼容0penGLES1.1、2.0和3.2。

    性能强 iTOP-3588S开发板采用瑞芯微RK3588S处理器,是全新代AloT高端应用芯片,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构主频高达2
    发表于 05-15 10:36

    迅为iTOP-RK3588S开发板/核心板瑞芯微RK3588S处理器6TOPS算力内置NPU

    性能强 iTOP-3588S开发板采用瑞芯微RK3588S处理器,是全新代AloT高端应用芯片,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构主频高达2
    发表于 04-10 11:13

    iTOP-3588开发板采用瑞芯微RK3588处理器四核心架构GPU内置独立NPU强大的视频编解码

    55架构,主频高达2.4GHz。 四核心架构GPU 集成Mali G610 MP4四核GPU、支持OpenGLES 1.1.2.0、 3.2, OpenCL 2.2和Vulkan1.2。带有MMU的特殊2D
    发表于 04-09 16:09

    Arm发布基于Armv9架构Cortex-A320处理器

    边缘 AI 需要更卓越的计算性能、更强大的安全性,以及更出色的软件灵活性。随着软件愈发复杂化,Armv9 架构应运而生,以提供先进的机器学习 (ML) 和 AI 功能,并具备增强的安全特性。该架构现已在
    的头像 发表于 02-27 17:10 1152次阅读

    迅为iTOP-RK3588S开发板/核心板6TOPS的NPU算力视频编解码8K编码+8K解码

    性能强 iTOP-3588S开发板采用瑞芯微RK3588S处理器,是全新代AloT高端应用芯片,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构主频高达2
    发表于 02-20 14:24

    迅为RK3588S开发板/核心板介绍

    性能强 iTOP-3588S开发板采用瑞芯微RK3588S处理器,是全新代AloT高端应用芯片,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构主频高达2
    发表于 02-13 14:40

    基于Armv9架构的MediaTek天玑8400移动芯片问世

    如今,基于 Armv9 CPU 技术构建的人工智能 (AI) 旗舰智能手机立于技术前沿,为 AI 创新提供了前所未有的机遇。为了应对持续增长的 AI 工作负载的计算强度及复杂度,Armv9.2 CPU 集群带来了更强性能、更高效率,以及更多功能,为新
    的头像 发表于 12-24 14:18 1135次阅读