国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ARMV7架構(gòu)知識(shí)點(diǎn)記錄

這篇具有很好參考價(jià)值的文章主要介紹了ARMV7架構(gòu)知識(shí)點(diǎn)記錄。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

ArmV7-A架構(gòu)知識(shí)點(diǎn)記錄

? ARM會(huì)定期發(fā)布該架構(gòu)的新版本。它們會(huì)添加新功能或?qū)ΜF(xiàn)有行為進(jìn)行更改。此類更改幾乎總是向后兼容的,這意味著在舊版本的體系結(jié)構(gòu)上運(yùn)行的用戶代碼將繼續(xù)在新版本上正確運(yùn)行。當(dāng)然,為了利用新特性而編寫的代碼無(wú)法在缺乏這些特性的舊處理器上運(yùn)行。在體系結(jié)構(gòu)的所有版本中,一些系統(tǒng)特性和行為都是由實(shí)現(xiàn)定義的。例如,體系結(jié)構(gòu)沒(méi)有定義各個(gè)指令的緩存大小或循環(huán)時(shí)間。這些是由個(gè)別的核心和SoC決定的。每個(gè)架構(gòu)版本還可以定義可選的擴(kuò)展。這些可能在處理器的特定實(shí)現(xiàn)中實(shí)現(xiàn)。例如,在ARMv7體系結(jié)構(gòu)中,高級(jí)SIMD (Advanced SIMD, NEON)技術(shù)是可選的擴(kuò)展,在第7章介紹NEON時(shí)會(huì)介紹它。ARMv7體系結(jié)構(gòu)也有配置文件的概念。這些是描述針對(duì)不同市場(chǎng)和用途的處理器的體系結(jié)構(gòu)的變體。

1.ArmV7體系

? ArmV7有三個(gè)體系分別是ArmV7-A,ArmV7-R,ArmV7-M

  • A 應(yīng)用程序配置文件定義了一種針對(duì)高性能處理器的體系結(jié)構(gòu),支持使用內(nèi)存管理單元(MMU)的虛擬內(nèi)存系統(tǒng),因此能夠運(yùn)行功能齊全的操作系統(tǒng)。提供了對(duì)ARM和Thumb指令集的支持。ARMv8-A架構(gòu)支持AArch32狀態(tài),這是該架構(gòu)的32位實(shí)現(xiàn),向后兼容ARMv7-A。

  • R 實(shí)時(shí)概要文件定義了針對(duì)需要的系統(tǒng)的體系結(jié)構(gòu)確定性定時(shí)和低中斷延遲。不支持虛擬內(nèi)存系統(tǒng),但可以使用簡(jiǎn)單內(nèi)存來(lái)保護(hù)內(nèi)存區(qū)域保護(hù)單元(MPU)。R系列一般用于對(duì)實(shí)時(shí)性要求較高的場(chǎng)景。

  • M 微控制器配置文件定義了一種針對(duì)低成本系統(tǒng)的體系結(jié)構(gòu),其中低延遲的中斷處理至關(guān)重要。它使用了與其他配置文件不同的異常處理模型,并且只支持Thumb指令集的一個(gè)變體。M系列一般用于控制以及低功耗方面。

2.架構(gòu)歷史和擴(kuò)展

? 從80年代中期的第一個(gè)測(cè)試硅到90年代早期的第一個(gè)ARM6和ARM7器件,ARM架構(gòu)變化相對(duì)較小。在該體系結(jié)構(gòu)的第一個(gè)版本中,大部分的加載、存儲(chǔ)和算術(shù)操作以及異常模型和寄存器集都由ARM1實(shí)現(xiàn)。版本2增加了multiply和multiply-accumulate指令,并支持協(xié)處理器,還有其他一些創(chuàng)新。這些早期的處理器只支持26位的地址空間。該體系結(jié)構(gòu)的版本3分離了程序計(jì)數(shù)器和程序狀態(tài)寄存器,并添加了幾個(gè)新模式,支持32位地址空間。版本4增加了對(duì)半字加載和存儲(chǔ)操作的支持,以及一個(gè)額外的內(nèi)核級(jí)特權(quán)模式。如果不熟悉ARM體系結(jié)構(gòu)的讀者在本描述中使用了他們不熟悉的術(shù)語(yǔ),也不用擔(dān)心,因?yàn)樗羞@些主題都將在后續(xù)章節(jié)中介紹。ARMv4T架構(gòu)引入了Thumb(16位)指令集,由ARM7TDMI?和ARM9TDMI?處理器實(shí)現(xiàn),這些產(chǎn)品已經(jīng)出貨數(shù)十億美元。ARMv5TE架構(gòu)增加了對(duì)dsp類型操作和飽和運(yùn)算以及ARM/Thumb互操作的改進(jìn)。ARMv6做了許多增強(qiáng),包括支持非對(duì)齊內(nèi)存訪問(wèn)、對(duì)內(nèi)存架構(gòu)的重大更改和多核支持,以及支持在32位寄存器中操作字節(jié)或半字的SIMD操作。它還提供了許多可選的擴(kuò)展,特別是Thumb-2和安全擴(kuò)展(TrustZone)。Thumb-2將Thumb擴(kuò)展為混合長(zhǎng)度(16位和32位)指令集。

? ARMv7-A體系結(jié)構(gòu)強(qiáng)制使用Thumb-2擴(kuò)展,并添加了Advanced SIMD擴(kuò)展(NEON)

? 多年來(lái),ARM對(duì)處理器采用了順序編號(hào)系統(tǒng),從ARM9到ARM8,再到ARM7。各種數(shù)字和字母被附加到基族中以表示不同的變體。例如,ARM7TDMI處理器有T表示Thumb, D表示Debug, M表示快速乘法器,I表示EmbeddedICE。

? 對(duì)于ARMv7架構(gòu),ARM有限公司為其處理器采用了Cortex品牌名稱,并附帶一個(gè)字母表示處理器支持三種配置文件(A, R或M)中的哪一種。

? 下圖顯示了不同版本的架構(gòu)如何對(duì)應(yīng)不同的處理器實(shí)現(xiàn)。這個(gè)圖并不全面,也不包括所有的體系結(jié)構(gòu)版本或處理器實(shí)現(xiàn)。
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm

? 我們常見的STM32F1,F(xiàn)4系列就是ARMV7-M架構(gòu)的,可以去官網(wǎng)下載對(duì)應(yīng)的我文檔,這里介紹ArmV7-A。

? ARM Cortex-A7處理器是ARM開發(fā)的最節(jié)能的應(yīng)用處理器,擴(kuò)展了ARM在入門級(jí)智能手機(jī)、平板電腦和其他先進(jìn)移動(dòng)設(shè)備上的低功耗領(lǐng)導(dǎo)地位。下圖時(shí)ARMV7-Ac處理器架構(gòu)框圖
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm

上圖可以看出

  • 支持處理器多核調(diào)式和跟蹤
  • 支持?jǐn)?shù)據(jù)處理引擎
  • 支持指令緩存和數(shù)據(jù)緩存
  • 支持硬件浮點(diǎn)運(yùn)算
  • 128-bitAMBA總線接口

3處理器模式和寄存器組

? ARM架構(gòu)是一種模態(tài)架構(gòu)。在引入安全擴(kuò)展之前,它有7種處理器模式,如下表圖所示。有6種特權(quán)模式和1種非特權(quán)用戶模式。特權(quán)是執(zhí)行某些在用戶(非特權(quán))模式下無(wú)法完成的任務(wù)的能力。在用戶態(tài)下,對(duì)影響系統(tǒng)整體配置的操作有限制,例如MMU配置和緩存操作。ARMV7-M如我們的STM32只由特權(quán)和非特權(quán)兩種。
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm
在不同處理器模式下對(duì)LR(R14)寄存器的調(diào)整。

? 特定處理器模式和狀態(tài)的存在取決于處理器是否實(shí)現(xiàn)了相關(guān)的架構(gòu)擴(kuò)展,如下圖所示。
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm

? 當(dāng)前處理器模式和執(zhí)行狀態(tài)包含在當(dāng)前程序狀態(tài)寄存器(current Program Status Register, CPSR)中。改變處理器狀態(tài)和模式可以通過(guò)特權(quán)軟件顯式地進(jìn)行,也可以通過(guò)異常處理來(lái)實(shí)現(xiàn)。

3.1寄存器組

? ARM架構(gòu)提供了16個(gè)32位通用寄存器(r0 ~ r15)供軟件使用。其中15個(gè)(r0 ~ r14)可用于通用數(shù)據(jù)存儲(chǔ),R15為程序計(jì)數(shù)器,其值隨著核心執(zhí)行指令的變化而變化。軟件對(duì)R15的顯式寫入將改變程序流程。軟件也可以訪問(wèn)CPSR,以及先前執(zhí)行模式下保存的CPSR副本,稱為保存的程序狀態(tài)寄存器(SPSR)。
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm
? Cortex-A7 有 9 種運(yùn)行模式,每一種運(yùn)行模式都有一組與之對(duì)應(yīng)的寄存器組。每一種模式可見的寄存器包括 15 個(gè)通用寄存器(R0~R14)、一兩個(gè)程序狀態(tài)寄存器和一個(gè)程序計(jì)數(shù)器 PC。在這些寄存器中,有些是所有模式所共用的同一個(gè)物理寄存器,有一些是各模式自己所獨(dú)立擁有的,各個(gè)模式所擁有的寄存器如下圖所示。
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm
? 淺色字體的是與 User 模式所共有的寄存器,藍(lán)綠色背景的是各個(gè)模式所獨(dú)有的寄存器??梢钥闯?,在所有的模式中,低寄存器組(R0~R7)是共享同一組物理寄存器的,只是一些高寄存器組在不同的模式有自己獨(dú)有的寄存器,比如 FIQ 模式下 R8~R14 是獨(dú)立的物理寄存器。假如某個(gè)程序在 FIQ 模式下訪問(wèn) R13 寄存器,那它實(shí)際訪問(wèn)的是寄存器 R13_fiq,如果程序處于 SVC 模式下訪問(wèn) R13 寄存器,那它實(shí)際訪問(wèn)的是寄存器 R13_svc。總結(jié)一下,CortexA 內(nèi)核寄存器組成如下:

  • 34 個(gè)通用寄存器,包括 R15 程序計(jì)數(shù)器(PC),這些寄存器都是 32 位的。

  • 8 個(gè)狀態(tài)寄存器,包括 CPSR 和 SPSR。

  • Hyp 模式下獨(dú)有一個(gè) ELR_Hyp 寄存器。

3.1.1 通用寄存器

R0~R15 就是通用寄存器,通用寄存器可以分為以下三類:

  • 未備份寄存器,即 R0~R7。

  • 備份寄存器,即 R8~R14。

  • 程序計(jì)數(shù)器 PC,即 R15。

分別來(lái)看一下這三類寄存器:

未備份寄存器

? 未備份寄存器指的是 R0~R7 這 8 個(gè)寄存器,因?yàn)樵谒械奶幚砥髂J较逻@ 8 個(gè)寄存器都是同一個(gè)物理寄存器,在不同的模式下,這 8 個(gè)寄存器中的數(shù)據(jù)就會(huì)被破壞。所以這 8 個(gè)寄存器并沒(méi)有被用作特殊用途。

備份寄存器

? 備份寄存器中的 R8~R12 這 5 個(gè)寄存器有兩種物理寄存器,在快速中斷模式下(FIQ)它們對(duì)應(yīng)著 Rx_irq(x=8~12)物理寄存器,其他模式下對(duì)應(yīng)著 Rx(8~12)物理寄存器。FIQ 是快速中斷模式,看名字就是知道這個(gè)中斷模式要求快速執(zhí)行! FIQ 模式下中斷處理程序可以使用 R8~R12寄存器,因?yàn)?FIQ 模式下的 R8~R12 是獨(dú)立的,因此中斷處理程序可以不用執(zhí)行保存和恢復(fù)中斷現(xiàn)場(chǎng)的指令,從而加速中斷的執(zhí)行過(guò)程。備份寄存器 R13 一共有 8 個(gè)物理寄存器,其中一個(gè)是用戶模式(User)和系統(tǒng)模式(Sys)共用的,剩下的 7 個(gè)分別對(duì)應(yīng) 7 種不同的模式。R13 也叫做 SP,用來(lái)做為棧指針。基本上每種模式都有一個(gè)自己的 R13 物理寄存器,應(yīng)用程序會(huì)初始化 R13,使其指向該模式專用的棧地址,這就是常說(shuō)的初始化 SP 指針。備份寄存器 R14 一共有 7 個(gè)物理寄存器,其中一個(gè)是用戶模式(User)、系統(tǒng)模式(Sys)和超級(jí)監(jiān)視模式(Hyp)所共有的,剩下的 6 個(gè)分別對(duì)應(yīng) 6 種不同的模式。

? R14(鏈接寄存器LR)保存了在使用Link (BL)指令時(shí)輸入的子例程的返回地址。當(dāng)它不支持從子例程返回時(shí),它也可以用作通用寄存器。R14_svc、R14_irq、R14_fiq、R14_abt和R14_und類似地用于在中斷和異常發(fā)生時(shí),或在中斷或異常例程中執(zhí)行分支和鏈接指令時(shí),保存R15(PC)的返回值。

3.1.2 程序計(jì)數(shù)器

? 程序計(jì)數(shù)器 R15 也叫做 PC,R15 保存著當(dāng)前執(zhí)行的指令地址值加 8 個(gè)字節(jié),這是因?yàn)?ARM的流水線機(jī)制導(dǎo)致的。ARM 處理器 3 級(jí)流水線:取指->譯碼->執(zhí)行,這三級(jí)流水線循環(huán)執(zhí)行,比如當(dāng)前正在執(zhí)行第一條指令的同時(shí)也對(duì)第二條指令進(jìn)行譯碼,第三條指令也同時(shí)被取出存放在 R15(PC)中。我們喜歡以當(dāng)前正在執(zhí)行的指令作為參考點(diǎn),也就是以第一條指令為參考點(diǎn),那么 R15(PC)中存放的就是第三條指令,換句話說(shuō)就是 R15(PC)總是指向當(dāng)前正在執(zhí)行的指令地址再加上 2 條指令的地址。對(duì)于 32 位的 ARM 處理器,每條指令是 4 個(gè)字節(jié),所以:R15 (PC)值 = 當(dāng)前執(zhí)行的程序位置 + 8 個(gè)字節(jié)。

3.1.3 程序狀態(tài)寄存器

? 所有的處理器模式都共用一個(gè) CPSR 物理寄存器,因此 CPSR 可以在任何模式下被訪問(wèn)。CPSR 是當(dāng)前程序狀態(tài)寄存器,該寄存器包含了條件標(biāo)志位、中斷禁止位、當(dāng)前處理器模式標(biāo)志等一些狀態(tài)位以及一些控制位。所有的處理器模式都共用一個(gè) CPSR 必然會(huì)導(dǎo)致沖突,為此,除了 User 和 Sys 這兩個(gè)模式以外,其他 7 個(gè)模式每個(gè)都配備了一個(gè)專用的物理狀態(tài)寄存器,叫做 SPSR(備份程序狀態(tài)寄存器),當(dāng)特定的異常中斷發(fā)生時(shí),SPSR 寄存器用來(lái)保存當(dāng)前程序狀態(tài)寄存器(CPSR)的值,當(dāng)異常退出以后可以用 SPSR 中保存的值來(lái)恢復(fù) CPSR。因?yàn)?User 和 Sys 這兩個(gè)模式不是異常模式,所以并沒(méi)有配備 SPSR,因此不能在 User 和Sys 模式下訪問(wèn) SPSR,會(huì)導(dǎo)致不可預(yù)知的結(jié)果。由于 SPSR 是 CPSR 的備份,因此 SPSR 和CPSR 的寄存器結(jié)構(gòu)相同。
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm

  • N(bit31):當(dāng)兩個(gè)補(bǔ)碼表示的有符號(hào)整數(shù)運(yùn)算(CMP指令)的時(shí)候,N=1 表示運(yùn)算對(duì)的結(jié)果為負(fù)數(shù),N=0

    表示結(jié)果為正數(shù)。

  • **Z(bit30):**Z=1 表示運(yùn)算結(jié)果為零,Z=0 表示運(yùn)算結(jié)果不為零,對(duì)于 CMP 指令,Z=1 表示進(jìn)行比較的兩個(gè)數(shù)大小相等。

  • C(bit29):在加法(ADD)指令中,當(dāng)結(jié)果產(chǎn)生了進(jìn)位,則 C=1,表示無(wú)符號(hào)數(shù)運(yùn)算發(fā)生上溢,其它情況下 C=0。在減法指令中,當(dāng)運(yùn)算中發(fā)生借位,則 C=0,表示無(wú)符號(hào)數(shù)運(yùn)算發(fā)生下溢,其它情況下 C=1。對(duì)于包含移位操作的非加/減法運(yùn)算指令,C 中包含最后一次溢出的位的數(shù)值,對(duì)于其它非加/減運(yùn)算指令,C 位的值通常不受影響。

  • V(bit28):對(duì)于加/減法運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果表示為二進(jìn)制的補(bǔ)碼表示的帶符號(hào)數(shù)時(shí),V=1 表示符號(hào)位溢出,通常其他位不影響 V 位。

  • **Q(bit27)**僅 ARM v5TE_J 架構(gòu)支持,表示飽和狀態(tài),Q=1 表示累積飽和,Q=0 表示累積

    不飽和。

  • **IT:(bit26:25)**和 IT(bit15:bit10)一起組成 IT[7:0],作為 IF-THEN 指令執(zhí)行狀態(tài)。

  • **J(bit24):**僅 ARM_v5TE-J 架構(gòu)支持,J=1 表示處于 Jazelle 狀態(tài),此位通常和 T(bit5)位一起表示當(dāng)前所使用的指令集:

J T 描述
0 0 ARM
0 1 Thumb
1 1 ThumbEE
1 0 Jazelle
  • GE(bit19:16):SIMD 指令有效,大于或等于。

  • **IT(bit15:10):**參考 IT[1:0]。

  • **E(bit9):**大小端控制位,E=1 表示大端模式,E=0 表示小端模式。

  • **A(bit8):**禁止異步中斷位,A=1 表示禁止異步中斷。

  • **I(bit7):**I=1 禁止 IRQ,I=0 使能 IRQ。

  • **F(bit6):**F=1 禁止 FIQ,F(xiàn)=0 使能 FIQ。

  • **T(bit5):**控制指令執(zhí)行狀態(tài),表明本指令是 ARM 指令還是 Thumb 指令,通常和 J(bit24)一起表明指令類型,參考 J(bit24)位。

  • **M[4:0]:**處理器模式控制位。
    armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm

4.協(xié)處理器(CP15)

? CP15作為系統(tǒng)控制協(xié)處理器,提供了控制核心的許多功能。它可以包含多達(dá)16個(gè)32位主寄存器。對(duì)CP15的訪問(wèn)是權(quán)限控制的,并非所有寄存器都在用戶態(tài)可用。CP15寄存器訪問(wèn)指令指定所需的主寄存器,指令中的其他字段用于更精確地定義訪問(wèn),并增加CP15中物理32位寄存器的數(shù)量。CP15的16個(gè)主寄存器被命名為c0到c15,但經(jīng)常被稱為名稱。例如,CP15系統(tǒng)控制寄存器稱為CP15.(CTLR)。

? SCTLR是使用CP15訪問(wèn)的眾多寄存器中的一個(gè),用于控制標(biāo)準(zhǔn)內(nèi)存、系統(tǒng)設(shè)施,并為在核心中實(shí)現(xiàn)的函數(shù)提供狀態(tài)信息,結(jié)構(gòu)如下圖所示
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm

  • TE - Thumb指令啟用。它控制是否在ARM或Thumb指令的狀態(tài)。
  • NMFI -不可屏蔽FIQ (NMFI)支持。
  所有的ARM內(nèi)核都有兩個(gè)外部中斷請(qǐng)求,即FIQ和IRQ。這兩種都是電平敏感的低活躍輸入。各個(gè)實(shí)現(xiàn)都有中斷控制器,可
  以接受來(lái)自各種外部源的中斷請(qǐng)求,并將其映射到FIQ或IRQ上,從而導(dǎo)致內(nèi)核發(fā)生異常。一般來(lái)說(shuō),只有明確了適當(dāng)?shù)?  CPSR禁用位(F位和I位),并且斷言了相應(yīng)的輸入,才能發(fā)生中斷異常。CPS指令提供了一種簡(jiǎn)單的機(jī)制來(lái)啟用或禁用由
  CPSR a、I和F位(分別是異步夭折、IRQ和FIQ)控制的異常。CPS IE和CPS ID分別啟用和禁用異常。使用字母A、I和f中的
  一個(gè)或多個(gè)指定要啟用或禁用的異常。省略相應(yīng)的字母的異常將不會(huì)被修改。在Cortex-A系列處理器中,可以通過(guò)配置內(nèi)
  核使fiq無(wú)法被軟件屏蔽。這被稱為不可屏蔽FIQ,由硬件配置輸入信號(hào)控制,該信號(hào)在核心重置時(shí)進(jìn)行采樣。當(dāng)遇到FIQ異
  常時(shí),它們?nèi)匀粫?huì)被自動(dòng)屏蔽。

4.1 字節(jié)順序

  • EE 異常字節(jié)順序。這定義了CPSR的值。進(jìn)入異常時(shí)的比特位。
 在big-endian機(jī)器上,對(duì)象在內(nèi)存中的最高有效字節(jié)存儲(chǔ)在最低有效地址(接近于0)上。在小端序的計(jì)算機(jī)上,最高有效字節(jié)存儲(chǔ) 在最高地址。
 int i = 0x44332211;
 unsigned char c = *(unsigned char *)&i;
 在32位大端序機(jī)器上,c表示i的最高位字節(jié)的值:0x44。在小端序的機(jī)器上,c是i的最低有效字節(jié):0x11。

4.2 對(duì)齊模型

  • U -表示使用對(duì)齊模型。
 	  在ARM內(nèi)核上,訪問(wèn)的對(duì)齊非常重要。在老式的ARM處理器上, 可以訪問(wèn)未對(duì)齊的地址,但行為與使用ARMv7體系結(jié)構(gòu)
 	的地址不同。在ARM7和ARM9處理器上,非對(duì)齊LDR在內(nèi)存系統(tǒng)中執(zhí)行的方式與對(duì)齊訪問(wèn)相同,但返回的數(shù)據(jù)會(huì)被旋
 	轉(zhuǎn),因此請(qǐng)求地址處的數(shù)據(jù)會(huì)被放置在加載寄存器的最低有效字節(jié)中。一些老的編譯器和操作系統(tǒng)能夠使用這種行為進(jìn)行
 	巧妙的優(yōu)化。在將代碼從ARMv4或ARMv5移動(dòng)到ARMv7架構(gòu)時(shí),這可能表示可移植性問(wèn)題。ARM mmu可以配置為自動(dòng)
 	檢測(cè)這種非對(duì)齊訪問(wèn)并中止它們(使用CP15:SCTL位)。

? 與對(duì)齊訪問(wèn)相比,這些非對(duì)齊訪問(wèn)可能需要額外的周期,因此對(duì)齊也是一個(gè)性能問(wèn)題。此外,這種訪問(wèn)不能保證是原子性的。這意味著外部代理(系統(tǒng)中的另一個(gè)核心)可能執(zhí)行內(nèi)存訪問(wèn),該訪問(wèn)似乎是通過(guò)非對(duì)齊訪問(wèn)的一部分發(fā)生的。例如,它可能讀取訪問(wèn)的位置,并看到某些字節(jié)的新值和其他字節(jié)的舊值,下圖為對(duì)齊訪問(wèn)。
?armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm
? 按字對(duì)齊的地址是4的倍數(shù),例如0x100、0x104、0x108、0x10C、0x110。對(duì)齊訪問(wèn)的例子。

? 下圖為非對(duì)齊訪問(wèn)
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm

? 地址1處的一個(gè)未對(duì)齊字如上圖所示。它從0處的單詞中取出三個(gè)字節(jié),從4處的單詞中取出一個(gè)字節(jié)。

? 對(duì)齊效果對(duì)性能有顯著影響的一個(gè)簡(jiǎn)單例子是memcpy()的使用。在字對(duì)齊的地址之間復(fù)制少量字節(jié)將被編譯為L(zhǎng)DM或STM指令。復(fù)制對(duì)齊到單詞邊界的較大內(nèi)存塊通常使用優(yōu)化的庫(kù)函數(shù)完成,該函數(shù)還將使用LDM或STM。復(fù)制開始或結(jié)束點(diǎn)不在單詞邊界上的內(nèi)存塊可能會(huì)導(dǎo)致對(duì)通用memcpy()函數(shù)的調(diào)用,這可能會(huì)明顯變慢。盡管如此,如果源和目標(biāo)同樣沒(méi)有對(duì)齊,那么只有起始片段和結(jié)束片段是非最優(yōu)的。每當(dāng)執(zhí)行顯式類型轉(zhuǎn)換時(shí),這種轉(zhuǎn)換總是帶有對(duì)齊含義。

  • FI – FIQ 配置使能

  • V 這個(gè)位選擇異常向量表的基址。
    armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm
    ? 第一列給出了異常在向量表中的偏移量。這是一個(gè)指令表,當(dāng)出現(xiàn)異常時(shí),ARM內(nèi)核跳轉(zhuǎn)到這個(gè)指令表。這些指令位于內(nèi)存中的特定位置。向量的默認(rèn)基址是0x00000000,但大多數(shù)ARM內(nèi)核允許將向量的基址移動(dòng)到0xFFFF0000(或HIVECS)。所有的Cortex-A系列處理器都允許這樣做,這是Linux內(nèi)核選擇的默認(rèn)地址。實(shí)現(xiàn)安全擴(kuò)展的內(nèi)核還可以使用CP15向量基地址寄存器,為安全狀態(tài)和非安全狀態(tài)分別設(shè)置向量基地址。

4.3 cache控制位

  • I -指令緩存啟用位。

? 主要用于對(duì)cache的控制啟用,操作方法如下。

? 手冊(cè)上的介紹例子
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm

? 官方SDK中匯編啟動(dòng)文件中的示例

/* Reset SCTlr Settings */
    mrc     p15, 0, r0, c1, c0, 0     /* Read CP15 System Control register                  */
    bic     r0,  r0, #(0x1 << 12)     /* Clear I bit 12 to disable I Cache                  */
    bic     r0,  r0, #(0x1 <<  2)     /* Clear C bit  2 to disable D Cache                  */
    bic     r0,  r0, #0x2             /* Clear A bit  1 to disable strict alignment         */
    bic     r0,  r0, #(0x1 << 11)     /* Clear Z bit 11 to disable branch prediction        */
    bic     r0,  r0, #0x1             /* Clear M bit  0 to disable MMU                      */
    mcr     p15, 0, r0, c1, c0, 0     /* Write value back to CP15 System Control register   */
  • Z -分支預(yù)測(cè)使能位。

? 手冊(cè)上的例子

MRC p15, 0, r0, c1, c0, 0 ; Read System Control Register configuration data
ORR r0, r0, #(1 << 2) ; Set C bit
ORR r0, r0, #(1 << 12) ; Set I bit
ORR r0, r0, #(1 << 11) ; Set Z bit 設(shè)置Z位具體干嘛的不清楚。
MCR p15, 0, r0, c1, c0, 0 ; Write System Control Register configuration data
  • C -緩存啟用位

? 清理緩存或緩存行意味著將臟緩存行的內(nèi)容寫入主內(nèi)存,并清除緩存行中的臟位。這使得緩存行的內(nèi)容和主內(nèi)存的內(nèi)容是一致的。這只適用于使用回寫策略的數(shù)據(jù)緩存。緩存無(wú)效,且緩存清理操作可以通過(guò)緩存集、緩存方式或虛擬地址來(lái)執(zhí)行。

  • A -對(duì)齊檢查使能位。
  • M -使能MMU。

? 在啟用MMU之前,必須將轉(zhuǎn)換表寫入內(nèi)存。TTBR寄存器必須設(shè)置為指向表。接下來(lái)可以使用下列代碼序列來(lái)啟用MMU:

MRC p15, 0, R1, c1, C0, 0 ;Read control register
ORR R1, #0x1 ;Set M bit
MCR p15, 0,R1,C1, C0,0 ;Write control register and enable MMU

如果啟用MMU(內(nèi)存管理單元)改變了代碼當(dāng)前執(zhí)行區(qū)域的地址映射,則必須小心。

5ARM指令集

? ARMv7體系結(jié)構(gòu)是一個(gè)32位處理器體系結(jié)構(gòu)。它也是一種加載/存儲(chǔ)體系結(jié)構(gòu),這意味著數(shù)據(jù)處理指令只對(duì)通用寄存器中的值進(jìn)行操作。只有加載和存儲(chǔ)指令才能訪問(wèn)內(nèi)存。通用寄存器也是32位的。當(dāng)我們提到一個(gè)字時(shí),指的是32位。因此,雙字是64位寬,半字是16位寬。盡管ARMv7體系結(jié)構(gòu)是32位體系結(jié)構(gòu),但單個(gè)處理器的實(shí)現(xiàn)并不一定對(duì)所有塊和互連都使用32位寬度。例如,可以使用64位或更寬的路徑來(lái)進(jìn)行指令獲取或數(shù)據(jù)訪問(wèn)。大多數(shù)ARM處理器支持兩種甚至三種不同的指令集,而有些處理器(例如Cortex-M3處理器)實(shí)際上并不執(zhí)行原始的ARM指令集。ARM處理器至少可以使用兩種指令集。

ARM(32位指令)

? 這是最初的ARM指令集。

Thumb指令集

? 首先被添加到ARM7TDMI處理器中,并且只包含16位指令,這以犧牲一些性能為代價(jià)提供了更小的程序(內(nèi)存占用在較小的嵌入式系統(tǒng)中可能是一個(gè)主要問(wèn)題)。最近的處理器,包括那些在Cortex-A系列中的處理器,支持Thumb-2技術(shù),它擴(kuò)展了Thumb指令集,以提供16位和32位指令的混合。這樣可以兼得兩者的優(yōu)點(diǎn),性能與ARM指令集類似,代碼大小與Thumb指令類似。由于Thumb-2的體積和性能優(yōu)勢(shì),利用Thumb-2技術(shù)對(duì)所有代碼進(jìn)行編譯或組裝的情況越來(lái)越普遍。

6 cache

? cache這個(gè)詞來(lái)源于法語(yǔ)動(dòng)詞cacher,意思是“隱藏”。這個(gè)詞在處理器上的應(yīng)用是顯而易見的——緩存是處理器存儲(chǔ)指令和數(shù)據(jù)的地方,對(duì)程序員和系統(tǒng)是隱藏的。在許多情況下,可以說(shuō)緩存對(duì)您是透明的,或者對(duì)您是隱藏的。但我們將看到,很多時(shí)候,詳細(xì)理解緩存的操作是很重要的。在ARM架構(gòu)最初開發(fā)時(shí),處理器的時(shí)鐘速度和內(nèi)存的訪問(wèn)速度大致相似。如今的處理器內(nèi)核要復(fù)雜得多,運(yùn)行速度也快了幾個(gè)數(shù)量級(jí)。但是,外部總線和存儲(chǔ)設(shè)備的頻率還沒(méi)有擴(kuò)展到相同的程度。實(shí)現(xiàn)片上SRAM的小塊是可能的,它們可以以與核心相同的速度運(yùn)行,但與具有數(shù)千倍容量的標(biāo)準(zhǔn)DRAM塊相比,這樣的RAM非常昂貴。在許多基于ARM處理器的系統(tǒng)中,訪問(wèn)外部?jī)?nèi)存需要數(shù)十甚至數(shù)百個(gè)核心周期。

cache設(shè)計(jì)結(jié)構(gòu)如下圖所示。
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm
? 本質(zhì)上,緩存是位于核心和主內(nèi)存之間的一個(gè)小的、快速的內(nèi)存塊(至少在概念上是這樣)。它在主內(nèi)存中保存數(shù)據(jù)項(xiàng)的副本。訪問(wèn)高速緩存的速度明顯快于訪問(wèn)主內(nèi)存的速度。因?yàn)楦咚倬彺嬷槐4媪酥鲀?nèi)存內(nèi)容的一個(gè)子集,它必須在主內(nèi)存中同時(shí)存儲(chǔ)數(shù)據(jù)項(xiàng)的地址和相關(guān)的數(shù)據(jù)。每當(dāng)內(nèi)核想要讀寫一個(gè)特定的地址時(shí),它首先會(huì)在緩存中查找。如果它在緩存中找到了地址,它將使用緩存中的數(shù)據(jù),而不必訪問(wèn)主內(nèi)存。通過(guò)減少外部?jī)?nèi)存訪問(wèn)時(shí)間緩慢的影響,這顯著提高了系統(tǒng)的潛在性能。通過(guò)避免驅(qū)動(dòng)外部信號(hào),它還降低了系統(tǒng)的功耗。緩存大小相對(duì)于系統(tǒng)中使用的整體內(nèi)存較小。更大的緩存導(dǎo)致更昂貴的芯片。此外,增大內(nèi)部核心緩存可能會(huì)限制核心的最大速度。高效地使用有限的資源是編寫高效的應(yīng)用程序以在核心上運(yùn)行的關(guān)鍵部分。片上SRAM可以用來(lái)實(shí)現(xiàn)高速緩存,保存來(lái)自主內(nèi)存的指令和數(shù)據(jù)的臨時(shí)副本。代碼和數(shù)據(jù)具有時(shí)間局部性和空間局部性。這意味著,隨著時(shí)間的推移,程序傾向于重復(fù)使用相同的地址(時(shí)間局部性),并傾向于使用彼此鄰近的地址(空間局部性)。例如,代碼可以包含循環(huán),這意味著可以重復(fù)執(zhí)行相同的代碼或多次調(diào)用一個(gè)函數(shù)。數(shù)據(jù)訪問(wèn)(例如對(duì)棧的訪問(wèn))可以限制在較小的內(nèi)存區(qū)域內(nèi)。事實(shí)上,內(nèi)核對(duì)內(nèi)存的訪問(wèn)表現(xiàn)出局部性,而不是真正的隨機(jī),這使得緩存能夠成功。寫緩沖區(qū)是一個(gè)塊,它將內(nèi)核從外部?jī)?nèi)存總線執(zhí)行存儲(chǔ)指令時(shí)執(zhí)行的寫操作解耦。核心將與存儲(chǔ)相關(guān)的地址、控制和數(shù)據(jù)值放入一組硬件緩沖區(qū)中。和緩存一樣,它位于核心和主內(nèi)存之間。這使得核心可以繼續(xù)執(zhí)行下一條指令,而不必停下來(lái)等待緩慢的主內(nèi)存真正完成寫操作。

6.1 cache的缺點(diǎn)

? 看起來(lái),緩存和寫緩沖區(qū)自動(dòng)帶來(lái)了好處,因?yàn)樗鼈兗铀倭顺绦虻膱?zhí)行。但它們也帶來(lái)了一些在無(wú)緩存內(nèi)核中不存在的問(wèn)題。這樣做的一個(gè)缺點(diǎn)是程序執(zhí)行時(shí)間可能變得不確定。這意味著,由于緩存很小,只保存主內(nèi)存的一個(gè)子集,它會(huì)在程序執(zhí)行時(shí)迅速填滿。在緩存滿時(shí),必須刪除現(xiàn)有的代碼或數(shù)據(jù),為新項(xiàng)騰出空間。因此,在任何給定的時(shí)間,應(yīng)用程序通常不可能確定是否在緩存中找到特定的指令或數(shù)據(jù)項(xiàng)。這意味著特定代碼段的執(zhí)行時(shí)間可能會(huì)有很大差異。在硬實(shí)時(shí)系統(tǒng)中,這可能是一個(gè)問(wèn)題,因?yàn)橛矊?shí)時(shí)系統(tǒng)需要強(qiáng)烈的確定性行為。此外,還需要一種方法來(lái)控制緩存和寫緩沖區(qū)如何訪問(wèn)內(nèi)存的不同部分。在某些情況下,我們希望核心從外部設(shè)備(如外設(shè))讀取最新的數(shù)據(jù)。例如,使用定時(shí)器外設(shè)的緩存值是不合理的。有時(shí)你希望core停下來(lái)等待store完成。所以緩存和寫緩沖區(qū)給了你一些額外的工作。高速緩存和外部?jī)?nèi)存的內(nèi)容有時(shí)可能不相同,這是因?yàn)樘幚砥骺赡軙?huì)更新高速緩存的內(nèi)容,這些內(nèi)容還沒(méi)有寫回主內(nèi)存。或者,代理可以在核心獲取自己的副本后更新主內(nèi)存。這是一個(gè)一致性的問(wèn)題。cache缺點(diǎn)主要是cache一致性問(wèn)題。

6.2 cache結(jié)構(gòu)

? 在計(jì)算機(jī)科學(xué)中,內(nèi)存層次指的是內(nèi)存類型的層次結(jié)構(gòu),快而小的內(nèi)存靠近核心,慢而大的內(nèi)存遠(yuǎn)離核心。在大多數(shù)系統(tǒng)中,可以有輔助存儲(chǔ)器,如磁盤驅(qū)動(dòng)器和主存儲(chǔ)器,如閃存、SRAM和DRAM。在嵌入式系統(tǒng)中,通常將其細(xì)分為片上內(nèi)存和片外內(nèi)存。與核心在同一芯片(或至少在同一包中)上的內(nèi)存通常會(huì)快得多。緩存可以包含在層次結(jié)構(gòu)的任何級(jí)別上,并可以在內(nèi)存系統(tǒng)不同部分之間存在訪問(wèn)時(shí)間差異的情況下提高系統(tǒng)性能。在基于ARM處理器的系統(tǒng)中,一級(jí)(L1)緩存通常直接連接到獲取指令、處理加載和存儲(chǔ)指令的核心邏輯。這些是哈佛緩存,也就是說(shuō),指令和數(shù)據(jù)的緩存是分開的,它們實(shí)際上是核心的一部分。
armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm
? 多年來(lái),由于SRAM的大小和速度的提高,L1緩存的大小有所增加。在寫入時(shí),16KB或32KB的緩存是最常見的,因?yàn)檫@是在1GHz或更高的核心速度下能夠提供單周期訪問(wèn)的最大RAM大小。此外,許多ARM系統(tǒng)還具有二級(jí)(L2)緩存。這比L1緩存(通常為256KB、512KB或1MB)大,但速度較慢且統(tǒng)一(同時(shí)保存指令和數(shù)據(jù))。它可以在核心內(nèi)部,也可以實(shí)現(xiàn)為一個(gè)外部塊,放置在核心和內(nèi)存系統(tǒng)的其余部分之間。ARM L2C-310就是這種外部L2 cache控制器塊的一個(gè)例子。此外,內(nèi)核可以在集群中實(shí)現(xiàn),每個(gè)內(nèi)核都有自己的一級(jí)緩存。這樣的系統(tǒng)需要一種機(jī)制來(lái)保持高速緩存之間的一致性,這樣當(dāng)一個(gè)核改變內(nèi)存位置時(shí),共享該內(nèi)存的其他核都可以看到這個(gè)改變。

6.3 cache組相聯(lián)

? 在馮·諾依曼體系結(jié)構(gòu)中,指令和數(shù)據(jù)使用單一的緩存(統(tǒng)一的緩存)。改進(jìn)的哈佛體系結(jié)構(gòu)具有獨(dú)立的指令總線和數(shù)據(jù)總線,因此有兩個(gè)高速緩存,一個(gè)指令高速緩存(I-cache)和一個(gè)數(shù)據(jù)高速緩存(D-cache)。在許多ARM系統(tǒng)中,可以在統(tǒng)一的二級(jí)緩存的支持下?lián)碛胁煌闹噶詈蛿?shù)據(jù)一級(jí)緩存。緩存需要保存一個(gè)地址、一些數(shù)據(jù)和一些狀態(tài)信息。32位地址的頂部位告訴高速緩存信息來(lái)自主內(nèi)存的位置,稱為標(biāo)記??偩彺娲笮『饬苛怂梢员4娴臄?shù)據(jù)量;用于保存標(biāo)簽值的ram不包括在計(jì)算中。但該標(biāo)記確實(shí)占用了緩存中的物理空間。為每個(gè)標(biāo)簽地址保存一個(gè)數(shù)據(jù)字是低效的,因此通常將多個(gè)位置組合在同一個(gè)標(biāo)簽下。該邏輯塊通常稱為緩存行(cache line)。地址或索引的中間位標(biāo)識(shí)行。該索引用作高速緩存的地址,不需要存儲(chǔ)作為標(biāo)記的一部分。本章后面會(huì)詳細(xì)介紹。當(dāng)緩存行包含緩存的數(shù)據(jù)或指令時(shí),我們說(shuō)它是有效的,而當(dāng)它沒(méi)有包含緩存的數(shù)據(jù)或指令時(shí),我們說(shuō)它是無(wú)效的。這意味著地址的底部幾位(偏移量)不需要存儲(chǔ)在標(biāo)簽中——你需要的是整行的地址,而不是一行中每個(gè)字節(jié)的地址,因此最低5或6個(gè)有效位總是0。與每一行數(shù)據(jù)相關(guān)聯(lián)的是一個(gè)或多個(gè)狀態(tài)位。通常,你會(huì)有一個(gè)有效的位,它將行標(biāo)記為包含可使用的數(shù)據(jù)。(這意味著address標(biāo)簽代表一些真實(shí)的值。)在數(shù)據(jù)緩存中,還可能有一個(gè)或多個(gè)臟位,標(biāo)記緩存行(或其中的一部分)保存的數(shù)據(jù)是否與主內(nèi)存的內(nèi)容不同(更新)。

6.4 cache的相關(guān)術(shù)語(yǔ)

armv7,ARM體系架構(gòu),架構(gòu),開發(fā)語(yǔ)言,arm

  • Line 一行指的是緩存中最小的可加載單位,即來(lái)自主內(nèi)存的連續(xù)字塊。
  • index 索引是內(nèi)存地址的一部分,它決定可以在緩存的哪一行找到該地址。
  • Way 路徑是緩存的一個(gè)細(xì)分,每個(gè)路徑大小相同,索引方式相同。將與特定索引值相關(guān)聯(lián)的行從每個(gè)緩存方式分組在一起形成一個(gè)集合。
    標(biāo)記為包含可使用的數(shù)據(jù)。(這意味著address標(biāo)簽代表一些真實(shí)的值。)在數(shù)據(jù)緩存中,還可能有一個(gè)或多個(gè)臟位,標(biāo)記緩存行(或其中的一部分)保存的數(shù)據(jù)是否與主內(nèi)存的內(nèi)容不同(更新)。

6.4 cache的相關(guān)術(shù)語(yǔ)

[外鏈圖片轉(zhuǎn)存中…(img-x3bVxXIp-1698726497830)]文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-830619.html

  • Line 一行指的是緩存中最小的可加載單位,即來(lái)自主內(nèi)存的連續(xù)字塊。
  • index 索引是內(nèi)存地址的一部分,它決定可以在緩存的哪一行找到該地址。
  • Way 路徑是緩存的一個(gè)細(xì)分,每個(gè)路徑大小相同,索引方式相同。將與特定索引值相關(guān)聯(lián)的行從每個(gè)緩存方式分組在一起形成一個(gè)集合。
  • 標(biāo)記是存儲(chǔ)在緩存中的內(nèi)存地址的一部分,用于標(biāo)識(shí)與數(shù)據(jù)行關(guān)聯(lián)的主內(nèi)存地址。

到了這里,關(guān)于ARMV7架構(gòu)知識(shí)點(diǎn)記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • armv7l安裝miniconda

    armv7l安裝miniconda

    armv7l架構(gòu)的資料相對(duì)較少,本文記錄安裝miniconda及搭建虛擬python環(huán)境的過(guò)程。 可以看到本設(shè)備是armv7l的架構(gòu)。 請(qǐng)讀者根據(jù)自己機(jī)器的配置,在miniconda官網(wǎng)查找對(duì)應(yīng)的下載版本。注意如果是aarch64架構(gòu)那miniconda3的版本不要超過(guò)4.10。本設(shè)備為armv7架構(gòu),應(yīng)該下載的文件是:Minic

    2024年02月04日
    瀏覽(17)
  • C1 ARMv7-M Debug

    C1 ARMv7-M Debug

    This section describes the debug architecture for the ARMv7-M architecture profile. This includes several debug features that are supported only in the M profile. Debug support is a key element of the ARM architecture. ARMv7-M supports a range of invasive and non-invasive debug mechanisms. Invasive debug mechanisms are: ? The ability to halt the processor,

    2024年02月09日
    瀏覽(24)
  • Ubuntu and Debian(ARMv7) grafana prometheus

    Ubuntu and Debian(ARMv7) grafana prometheus

    Ubuntu and Debian(ARMv7)SHA256:?4d13652e0bb215fae2338123cd0e98d0755b76076d9ea7e652bea0fd039124e4 sudo apt-get install?-y adduser libfontconfig1 musl wget?https://dl.grafana.com/enterprise/release/grafana-enterprise_10.0.10_armhf.deb sudo dpkg?-i?grafana-enterprise_10.0.10_armhf.deb Download Grafana | Grafana Labs Download | Prometheus

    2024年01月21日
    瀏覽(19)
  • ARMv7,ARM7,ARMA7有什么區(qū)別

    ARMv7,ARM7,ARMA7有什么區(qū)別

    隨著ARM的發(fā)展,芯片也越來(lái)越多,對(duì)芯片的稱呼也多了。首先,ARMv7屬于 內(nèi)核版本號(hào) ,而ARM 7則為 Soc的稱號(hào) 。其中,內(nèi)核的版本號(hào),是有V1到V2 V3等,從小到大,性能越來(lái)越好。如下圖,ARM7(soc版本號(hào))是ARMV4內(nèi)核版本下的。 ARM是從 Cortex系列 有了一個(gè)大的轉(zhuǎn)折。ARM Cortex系列

    2024年02月06日
    瀏覽(18)
  • Yocto系列講解[技巧篇]92 - armv8 aarch64兼容armv7 32位程序運(yùn)行環(huán)境

    Yocto系列講解[技巧篇]92 - armv8 aarch64兼容armv7 32位程序運(yùn)行環(huán)境

    By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜歡的盆友歡迎點(diǎn)贊和訂閱! 你的喜歡就是我寫作的動(dòng)力!

    2024年01月24日
    瀏覽(32)
  • 百度車牌識(shí)別AI Linux使用方法-armV7交叉編譯

    百度車牌識(shí)別AI Linux使用方法-armV7交叉編譯

    百度智能云-登錄 (baidu.com) ????????里面有兩個(gè)版本的armV7和armV8架構(gòu)。v7架構(gòu)的性能比較低往往需要交叉編譯,v8的板子性能往往比較好,可以直接在板子上編譯。 ? ? ? ? 解壓到ubuntu里面。這里介紹v7架構(gòu)的。 ubuntu下安裝軟件包。根據(jù)提示可以安裝其他的包 zlib Home Site

    2024年02月06日
    瀏覽(66)
  • 如何在armv6 armv7 armv8(aarch64)嵌入式板子上面安裝nginx服務(wù)器,支持H265碼流

    如何在armv6 armv7 armv8(aarch64)嵌入式板子上面安裝nginx服務(wù)器,支持H265碼流

    為什么要在板子瑞芯微rv1126核心板上面安裝nginx服務(wù)器,是因?yàn)槲业捻?xiàng)目需要用到拉到連接在板子上面的攝像頭,由于是攝像頭是直連攝像頭的只能通過(guò)板子上面的wifi熱點(diǎn)設(shè)備,先連接這個(gè)熱點(diǎn)才能獲取到這個(gè)網(wǎng)絡(luò)攝像頭,那么就需要板子做一個(gè)推流的服務(wù)器讓攝像頭的畫面

    2024年02月15日
    瀏覽(25)
  • 【ARMv7-M】| 01——閱讀筆記 | 簡(jiǎn)介|應(yīng)用程序級(jí)編程和內(nèi)存模型

    【ARMv7-M】| 01——閱讀筆記 | 簡(jiǎn)介|應(yīng)用程序級(jí)編程和內(nèi)存模型

    系列文章目錄 【ARMv7-M】| 01——閱讀筆記 | 簡(jiǎn)介|應(yīng)用程序級(jí)編程和內(nèi)存模型 失敗了也挺可愛,成功了就超帥。 本文為ARMv7-M參考手冊(cè)的閱讀筆記 ARMv7架構(gòu)根據(jù)不同應(yīng)用場(chǎng)景和性能 分為三個(gè)分支 -A -R -M ARMv7-A:用于高性能應(yīng)用型SOC 支持ARM和Thumb指令集 內(nèi)存管理單元使用 MMU 支持

    2024年04月27日
    瀏覽(46)
  • unity android包(armV7+arm64)啟動(dòng)黑屏崩潰,在splash動(dòng)畫開始前

    1、先交代下問(wèn)題背景。打包一直是用的armV7架構(gòu),前段時(shí)間老板提到加上arm64。沒(méi)想到公司其中一臺(tái)手機(jī)居然崩潰,unity的splash動(dòng)畫都沒(méi)播,但是也沒(méi)閃退,就是黑屏??吹揭淮t色崩潰日志。 2、解決方式。把原來(lái)安裝的armV7架構(gòu)包刪掉,再裝armV7+arm64架構(gòu)的包就可以了。參考

    2023年04月26日
    瀏覽(29)
  • 玩客云 armv7l armbian 編譯安裝opencv2和opencv-contrib-python

    玩客云刷機(jī)系統(tǒng)為Armbian 23.11.1 Jammy with Linux 6.4.13-edge-meson,很多包不好直接安裝和下載,因此只能由源碼編譯 以opencv-contrib-python-4.6.0.66 ( opencv-python-4.9.0.80一樣操作) 下載源碼 cd ~/downloads tar -zcvf opencv-contrib-python-4.6.0.66.tar.gz cd opencv-contrib-python-4.6.0.66 采用setup.py安裝 等待完成即

    2024年02月20日
    瀏覽(96)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包