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

    文章

    399

    浏览量

    22529
  • Cortex
    +关注

    关注

    2

    文章

    220

    浏览量

    49003
  • ARM架构
    +关注

    关注

    15

    文章

    187

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Infineon XC2734X微控制器:16/32位架构的强劲之选

    Infineon XC2734X微控制器:16/32位架构的强劲之选 作为电子工程师,在设计过程中,选择合适的微控制器至关重要。今天就来和大家聊聊英飞凌(Infineon)的XC2734X微控制器
    的头像 发表于 03-30 16:35 560次阅读

    鸿蒙智能上/下、升级流程介绍

    执行上操作,并且已经审核通过的智能,才能被其他用户搜索并使用。 升级审核未通过的智能,线上依旧保留上次通过审核的智能版本提供给其他
    发表于 02-10 10:38

    Cortex-M0 处理器介绍

    功耗的32位处理器。 Cortex-M0是Cortex-M家族中的M0系列。最大特点是低功耗的设计。Cortex-M0为32位、3级流水线RISC处理器,其核心仍为冯.诺依曼结构,是指
    发表于 01-16 08:04

    C语言中一些令人震惊的结构介绍

    C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么? int a = 5, b = 7, c; c = a+++b;
    发表于 12-23 08:15

    结构声明与定义

    1、声明 结构的声明使用struct关键字,如果我们想要把我们的学籍信息组织下的话,可以这样表示: struct Info { unsigned long identifier;//学号
    发表于 12-11 07:52

    typedef结构使用

    虽然结构的出现能够让我们有个更科学的数据结构来管理数据,但是每次使用结构都需要struct
    发表于 12-08 07:04

    为什么不建议用匿名结构

    说起匿名结构,想必大家第感觉就是看着好高大上的名字,但实际上也就那样。 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 878次阅读
    迅为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 2066次阅读
    瑞芯微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 984次阅读
    瑞迅科技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