0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Cortex A9架構(gòu)下為何使用結(jié)構(gòu)體效率會(huì)更高一些

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-12-24 12:51 ? 次閱讀

作為過來人,我發(fā)現(xiàn)很多程序猿新手,在編寫代碼的時(shí)候,特別喜歡定義很多獨(dú)立的全局變量,而不是把這些變量封裝到一個(gè)結(jié)構(gòu)體中,主要原因是圖方便,但是要知道,這其實(shí)是一個(gè)不好的習(xí)慣,而且會(huì)降低整體代碼的性能。

另一方面,最近有幸與大神「公眾號(hào):裸機(jī)思維」的傻孩子交流的時(shí)候,他聊到:“其實(shí)Cortex在架構(gòu)層面就是更偏好面向?qū)ο蟮模呐履阒皇鞘褂昧私Y(jié)構(gòu)體),其表現(xiàn)形式就是:「Cortex所有的尋址模式都是間接尋址」——換句話說「一定依賴一個(gè)寄存器作為基地址」。

舉例來說,同樣是訪問外設(shè)寄存器,過去在8位和16位機(jī)時(shí)代,人們喜歡給每一個(gè)寄存器都單獨(dú)綁定地址——當(dāng)作全局變量來訪問,而現(xiàn)在Cortex在架構(gòu)上更鼓勵(lì)底層驅(qū)動(dòng)以寄存器頁(也就是結(jié)構(gòu)體)為單位來定義寄存器,這也就是說,同一個(gè)外設(shè)的寄存器是借助擁有同一個(gè)基地址的結(jié)構(gòu)體來訪問的?!?/p>

以Cortex A9架構(gòu)為前提,下面一口君詳細(xì)給你解釋為什么使用結(jié)構(gòu)體效率會(huì)更高一些。

一、全局變量代碼反匯編

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

【交叉編譯工具,自行搜索安裝】

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式設(shè)計(jì)

    關(guān)注

    0

    文章

    390

    瀏覽量

    21218
  • Cortex
    +關(guān)注

    關(guān)注

    2

    文章

    201

    瀏覽量

    46259
  • ARM架構(gòu)
    +關(guān)注

    關(guān)注

    14

    文章

    175

    瀏覽量

    36178
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    X86架構(gòu)處理器有哪些優(yōu)點(diǎn)和缺點(diǎn)

    X86架構(gòu)處理器作為計(jì)算機(jī)領(lǐng)域的重要組成部分,具有多個(gè)顯著的優(yōu)點(diǎn)和定的缺點(diǎn)。以下是對(duì)X86架構(gòu)處理器優(yōu)缺點(diǎn)的詳細(xì)分析。
    的頭像 發(fā)表于 08-22 11:25 ?446次閱讀

    X86架構(gòu)和ARM架構(gòu)有什么區(qū)別

    X86架構(gòu)和ARM架構(gòu)是兩種主流的CPU架構(gòu),它們?cè)诙鄠€(gè)方面存在顯著的差異。以下是對(duì)這兩種架構(gòu)的詳細(xì)比較,涵蓋了追求目標(biāo)、應(yīng)用領(lǐng)域、技術(shù)特點(diǎn)、性能功耗比、軟件生態(tài)以及未來趨勢(shì)等方面。
    的頭像 發(fā)表于 08-22 11:21 ?3142次閱讀

    ElfBoard技術(shù)貼|如何將libwebsockets庫編譯為x86架構(gòu)

    和高效。通過在主機(jī)環(huán)境中編譯運(yùn)用x86架構(gòu)下的libwebsockets庫,可以充分利用主機(jī)卓越的計(jì)算性能與豐富的調(diào)試資源,顯著提升開發(fā)及調(diào)試工作的效率與便捷性。
    的頭像 發(fā)表于 07-10 09:38 ?1006次閱讀
    ElfBoard技術(shù)貼|如何將libwebsockets庫編譯為x86<b class='flag-5'>架構(gòu)</b>

    迅為RK3562核心板四核A53+MaliG52架構(gòu),應(yīng)用于商業(yè)平板電腦,視頻會(huì)議,智能家居,教育電子,醫(yī)療設(shè)備,邊緣計(jì)算,工業(yè)應(yīng)用

    迅為RK3562核心板四核A53+MaliG52架構(gòu),應(yīng)用于商業(yè)平板電腦,視頻會(huì)議,智能家居,教育電子,醫(yī)療設(shè)備,邊緣計(jì)算,工業(yè)應(yīng)用
    發(fā)表于 07-09 10:57

    移動(dòng)端芯片性能提升,Armv9架構(gòu)新升級(jí)引發(fā)關(guān)注

    “數(shù)碼博主”5月17日的最新爆料指出,聯(lián)發(fā)科積極推進(jìn)Armv9代IP BLACKHAWK“黑鷹”的架構(gòu)設(shè)計(jì),預(yù)計(jì)天璣9400芯片將采用這一架構(gòu),有望以“全大核”設(shè)計(jì)再度領(lǐng)跑移動(dòng)So
    的頭像 發(fā)表于 05-17 16:51 ?785次閱讀

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

    RISC-V芯片在某些情況下可能相對(duì)于ARM架構(gòu)芯片表現(xiàn)出更高效率,這主要得益于RISC-V設(shè)計(jì)的一些特點(diǎn)和優(yōu)勢(shì)。 首先,RISC-V指令集架構(gòu)
    發(fā)表于 04-28 09:38

    適用于ARM? Cortex?-A8/A9 SOC 和 FPGA 的TPS65218電源管理數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《適用于ARM? Cortex?-A8/A9 SOC 和 FPGA 的TPS65218電源管理數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 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電源管理數(shù)據(jù)表

    對(duì)于繪制USB DRP架構(gòu)一些疑問求解

    我正在繪制新系統(tǒng)的架構(gòu),對(duì)此有一些疑問: 1) 通常左側(cè)板有 20V 固定電源,將通過 TypeC 端口向右板提供 20V。 a) Vbus 通過 Mosfets 直接連接到 20V,如果談判失敗
    發(fā)表于 02-23 06:31

    arm架構(gòu)和x86架構(gòu)區(qū)別 linux是x86還是arm

    ARM架構(gòu)和x86架構(gòu)是兩種不同的計(jì)算機(jī)處理器架構(gòu),它們?cè)隗w系結(jié)構(gòu)、指令集、應(yīng)用領(lǐng)域等方面有著明顯的區(qū)別。Linux操作系統(tǒng)則具有廣泛的適配性,可以運(yùn)行在各種
    的頭像 發(fā)表于 01-30 13:46 ?1.4w次閱讀

    Debian宣布停止i386架構(gòu)支持

    近日,在英國劍橋市舉行的小規(guī)模DebConf活動(dòng)中,Debian GNU/Linux的發(fā)布團(tuán)隊(duì)召開春季會(huì)議,探討了未來發(fā)展方向,其中包括停止對(duì)i386架構(gòu)的支持。
    的頭像 發(fā)表于 12-19 10:16 ?646次閱讀

    Arm微架構(gòu)學(xué)習(xí)—開啟Armv9時(shí)代

    在上篇文章“從A76到A78——在變化中學(xué)習(xí)Arm微架構(gòu)”中,我們了解了Arm處理器微架構(gòu)的基本組成,介紹了Armv8
    的頭像 發(fā)表于 11-27 16:46 ?934次閱讀
    Arm微<b class='flag-5'>架構(gòu)</b>學(xué)習(xí)—開啟Armv<b class='flag-5'>9</b>時(shí)代

    三軸或六軸加速度傳感器哪種靈敏度高一些?

    DIY平衡控制系統(tǒng),需要使用加速度傳感器,三軸或六軸的均可以,哪種靈敏度高一些?
    發(fā)表于 11-10 06:46

    步進(jìn)電機(jī)的細(xì)分驅(qū)動(dòng)和半步驅(qū)動(dòng)哪個(gè)精度更高一點(diǎn)?

    步進(jìn)電機(jī)的細(xì)分驅(qū)動(dòng)和半步驅(qū)動(dòng)哪個(gè)精度更高一點(diǎn)
    發(fā)表于 10-10 07:03

    lm35傳感器和18b20傳感器哪個(gè)精度高一些?

    這兩個(gè)哪個(gè)精度高一些,分別是多少,還有測(cè)溫范圍是多少
    發(fā)表于 10-07 07:16

    長(zhǎng)江存儲(chǔ)致態(tài)Ti600 2TB SSD評(píng)測(cè)分析

    致態(tài)Ti600系列SSD采用了長(zhǎng)江存儲(chǔ)最新代NAND閃存顆粒,基于晶棧Xtacking 3.0架構(gòu), 再配合優(yōu)秀主控解決方案,可以達(dá)到7000MB/s的讀取速度和6000MB/s的寫入速度,而實(shí)測(cè)數(shù)據(jù)比這還要更高一些。
    發(fā)表于 09-27 10:49 ?997次閱讀
    長(zhǎng)江存儲(chǔ)致態(tài)Ti600 2TB SSD評(píng)測(cè)分析