ARM體系結構

ARM體系結構

編程原理

從源代碼到CPU執行過程

編譯器
匯編器
Objcopy工具
總線
CPU內部指令流水線
.c高級語言源代碼
.s匯編源代碼
Elf格式二進制可執行程序
Bin格式燒錄文件
CPU讀入后先解碼
CPU執行指令

體系結構

馮諾依曼結結構

程序和數據放在同一內存中,彼此不分離的結構。如:Intel CPU

  • 特點
    • 安全和穩定性不好
    • 處理起來簡單

哈佛結構

程序(一般放在ROM、Flash中)和數據(一般放在RAM中)分開獨立存放在不同的內存塊中,彼此完全分離的結構。如:單片機、ARM CPU

  • 特點
    • 安全和穩定性高
    • 軟件處理復雜

指令集

  • CISC復雜指令集
    • 設計理念:用最少的指令完成任務
    • CPU本身設計復雜,工藝復雜
    • 如:Intel CPU
  • RISC精簡指令集
    • 設計理念:讓軟件完成具體的任務,CPU本身僅提供基本指令集
    • 編譯器的設計變難了
    • 如:ARM CPU

總線編址方式

  • IO與內存獨立編址
    使用專用的CPU指令來訪問某種特定外設。如:Intel CPU
  • IO與內存統一編址
    把外設的寄存器當做一個內存地址來讀寫。如:ARM CPU

ARM CPU 工作模式

7個基本工作模式

  • 非特權模式
    • User:普通模式,大部分任務執行在這種模式
  • 特權模式
    • 系統模式
      • System:使用和User模式相同寄存器集的特權模式
    • 異常模式
      • FIQ:當高優先級(fast)中斷產生時,進入這種模式
      • IRQ:當低優先級(normal)中斷產生時,進入這種模式
      • Supervisor:當復位或軟中斷指令執行時,進入這種模式
      • Abort:當存取異常時,進入這種模式
      • Undef:當執行未定義指令時,進入這種模式

寄存器

寄存器特性

  • 寄存器屬于CPU外設的硬件組成部分
  • CPU可以像訪問內存一樣訪問寄存器
  • 寄存器設計的目的是留作外設被編程控制的“活動開關”
  • 寄存器中每個bit位都有特定含義,編程時需要位操作。如STM32寄存器編程
  • 單個寄存器的位寬一般和CPU的位寬一樣,以實現最佳訪問效率

寄存器分類

  • 通用寄存器
    • 是CPU的組成部分,ARM CPU有37個。
  • SFR(特殊功能寄存器)
    • 不在CPU中,而是存在于CPU的外設中,可通過訪問外設的SFR來編程操控這個外設。

ARM CPU的37個寄存器

  • ARM 共有37個寄存器,但每種工作模式下最多只能看到18個寄存器,其他寄存器在當前模式下不可見。這種設計叫影子寄存器(banked register)
  • ARM 37個寄存器,都是32位長度
    • 30個:“通用”型
    • 1個:固定用作PC
    • 1個:固定用作CPSR
    • 5個:固定用作5種異常模式下的SPSR
  • CPSR程序狀態寄存器
    • CPSR中各個bit位表明了CPU的某些狀態信息
    • CPSR中的I、F位和開中斷、關中斷有關
    • CPSR的mode位決定了CPU的工作模式
  • PC(Program control register)程序指針
    • 整個CPU只有一個PC,PC指向哪里,CPU就會執行哪條指令
      在這里插入圖片描述

ARM 異常處理方式

異常

  • 正常工作之外的流程都叫異常
  • 異常會打斷正在執行的工作,且異常處理完成后繼續回來執行原來的工作
  • 中斷是異常的一種

異常向量表

  • 所有的CPU都有異常向量表,是CPU設計時就設定好的,是硬件決定的
  • 當異常發生時,CPU會自動動作(PC跳轉到異常向量處處理異常)
  • 異常向量表是硬件向軟件提供的處理異常的支持

異常處理機制

  • 當異常產生時,ARM core進行現場保護:
    • 拷貝CPSR到SPSR_
    • 設置適當的CPSR位:
      • 改變處理器狀態進入ARM態
      • 改變處理器模式進入相應的異常模式
      • 如果需要,設置中斷禁止位禁止中斷
    • 保存返回地址到LR_
    • 設置PC為相應的異常向量
  • 返回時:
    • 從SPSR_恢復CPSR
    • 從LR_恢復PC

內存地址映射

以S5PV210為例,ARM Cortex-A8架構,32位CPU。
在這里插入圖片描述

  • 相關術語表
術語描述
ROM(Read only Memory)只讀存儲器
RAM(Random access Memory)隨機訪問存儲器
IROM(Internal ROM)內部ROM,集成到SOC內部的ROM
IRAM(Internal RAM)內部RAM,集成到SOC內部的RAM
DRAM(Dynamic RAM)動態RAM
SRAM(Static RAM)靜態RAM
SFR(Special function Register)特殊功能寄存器

內存與外存

  • 內存/外存區別
術語用途描述
內存用來運行程序RAM,如DRAM、SRAM、DDR
外存用來存儲程序和數據ROM,如Flash(Nand、iNand、U盤、SSD)、硬盤、光盤
  • 內存的區別
術語特點
SRAM容量小、價格高,優點是不需要軟件初始化,上電直接就能用
DRAM容量大、價格低,缺點是上電后不能直接使用,需要軟件初始化后才能使用
  • 外存的區別
術語特點
NorFlash容量小、價格高,優點是可以和CPU直接總線式相連,CPU上電后直接讀取。一般用作啟動介質
NandFlash容量大、價格低,缺點是不能總線式訪問,上電時CPU不能直接讀取,需要CPU先運行初始化軟件,然后通過時序接口進行讀寫

SOC啟動過程

啟動過程

啟動過程對比

類型描述
PC機很小容量的BIOS(NorFlash) + 很大容量的硬盤(類似于NandFlash) + 大容量的DRAM
單片機很小容量的NorFlash + 很小容量的SRAM
SoC外接的大容量Nand + 外接的大容量DRAM + SOC內置的SRAM

SOC啟動步驟示例

  • 第一步:CPU上電后先從內部IROM中讀取預先設置的代碼(BL0),并執行。BL0代碼,首先做一些基本初始化(CPU時鐘,關看門狗…);然后判斷選擇啟動模式(如通過OMPin設置),并從對應的外部存儲器中去讀取第一部分啟動代碼(BL1,大小為16KB)到內部SRAM。
  • 第二步:從IRAM中去運行上一步讀取來的BL1(16KB)。BL1負責初始化NandFlash,然后將BL2讀取到IRAM(剩余的80KB)。
  • 第三步:從IRAM運行BL2,BL2初始化DRAM;然后將OS讀取到DRAM中,并啟動OS。啟動過程結束。
    在這里插入圖片描述
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92728.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92728.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92728.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于SpringBoot的高校社團管理系統的設計與實現(代碼+LW文檔+遠程運行)

💯博主:?全網擁有50W粉絲、博客專家、全棧領域優質創作者、平臺優質Java創作者、專注于Java技術領域和畢業項目實戰?💯 💗開發技術:SpringBoot、Vue、SSM、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、…

F5發布業界首創集成式應用交付與安全平臺,開啟ADC 3.0新時代

在數字化轉型加速與AI技術蓬勃發展的今天,企業對應用性能與安全的需求正經歷革命性變革。傳統應用架構已難以滿足現代混合多云環境與AI驅動型業務場景的嚴苛要求。全球領先的應用安全和交付服務提供商F5(NASDAQ: FFIV),持續推動 F…

SELinux 入門指南

SELinux(Security-Enhanced Linux)是 Linux 內核的一個安全模塊,它提供了一種強制訪問控制(Mandatory Access Control, MAC)機制。與傳統的 Linux 自主訪問控制(Discretionary Access Control, DAC)不同,SE…

ARMv8 MMU頁表格式及地址轉換過程分析

1.簡介 CPU發出的虛擬地址經過MMU轉換后得到物理地址,然后使用物理地址訪問真實的硬件。虛擬地址和物理地址的映射關系保存在頁表中,MMU需要遍歷頁表,才能將虛擬地址轉換成物理地址。ARM64現在有兩種大小的頁表描述符,分別是ARMv8…

數據結構---二叉樹(概念、特點、分類、特性、讀取順序、例題)、gdb調試指令、時間復雜度(概念、大O符號法、分類)

一、二叉樹1、樹1)概念 樹是 n(n > 0) 個結點的有限集合。若 n0 ,為空樹。在任意一個非空樹中:(1)有且僅有一個特定的根結點;(2)當 n>1 時,其余結點可分為 …

安全基礎DAY1-安全概述

信息安全現狀及挑戰常見術語信息安全的脆弱性及常見攻擊網絡環境的開放性其實就是人人可以上網,網上零成本。協議棧自身的脆弱性及常見攻擊協議棧自身的脆弱性常見安全風險網絡的基本攻擊模式物理層--物理攻擊前置知識 1.打開Apache服務 cd /etc/init.d ./apache2 s…

Claude Code 的核心能力與架構解析

技術分析介紹:Claude Code 的核心能力與架構解析一、概述 Claude Code 是由 Anthropic 推出的面向開發者的智能編碼助手,它不僅僅是一個代碼生成工具,更是一個具備記憶、工具調用、自主規劃和環境感知能力的“智能代理”(Agentic …

Mac 電腦放在環境變量中的通用腳本

mac電腦下放在環境變量中,方便提高效率執行 注:相關路徑需要根據實際情況進行更新 需要在 .bash_profile 文件中定義如下(路徑需要做實際替換): source $HOME/software/scripts/base_profile.sh source $HOME/software…

UE藍圖節點Add Impulse和Add Torque in Radians

???????Add Impulse:對剛體施加一次性的線性脈沖(瞬時改變量),改變速度(與質量有關,除非你勾 bVelChange)。Add Torque (in Radians):對剛體施加轉矩/旋轉力(向量…

大型語言模型幻覺檢測與緩解技術研究綜述

摘要 本文系統綜述了大型語言模型(LLMs)中的幻覺現象及其檢測與緩解技術。研究首先從認知機制角度分析了幻覺產生的理論根源,包括模型對語言先驗的過度依賴、訓練數據偏差以及推理過程中的信息衰減等問題。在技術層面,綜述將現有方法歸納為三類&#xff…

【數據結構初階】--二叉樹(二)

😘個人主頁:Cx330? 👀個人簡介:一個正在努力奮斗逆天改命的二本覺悟生 📖個人專欄:《C語言》《LeetCode刷題集》《數據結構-初階》 前言:上篇博客我們學習了有關樹的概念和相關術語的介紹&…

jmm 指令重排 緩存可見性 Volatile 內存屏障

CPU指令重排 CPU指令重排是指CPU為了提高指令執行效率,可能會對指令的執行順序進行優化,使得(單線程下)指令的實際執行順序與代碼中的順序不同,但結果是一致的。 這種優化是通過亂序執行和緩存讀寫重排來實現的。 亂序…

卡車手機遠程啟動一鍵啟動無鑰匙進入有哪些好處

隨著汽車科技的發展,卡車智能化升級已成為趨勢,其中手機控車、遠程啟動、無鑰匙進入及一鍵啟動等功能顯著提升了駕駛便捷性與安全性。以下從功能特點、技術原理、適用場景及改裝建議等方面展開說明。一、核心功能及技術特點1. 無鑰匙進入系統自動感應操作…

【pyqt5】SP_(Standard Pixmap)的標準圖標常量及其對應的圖標

目錄 **常見SP_圖標分類及用途** **1. 箭頭和導航圖標** **2. 文件和編輯操作** **3. 系統狀態和通知** **4. 應用程序和菜單** **5. 數據視圖控件** **完整列表(部分)** **使用建議** **6. 數據操作圖標** **7. 編輯和文本操作** **8. 媒體控制圖標** **9. 系統和應用狀態**…

VS Git巨坑合并分支失敗導致多項無關改變

基于主分支創建的臨時分支上進行了一些開發,合并回主分支,期間主分支沒有進行任何更改還是創建臨時分支時的狀態,但合并莫名其妙報錯 “1 uncommitted …”,我可以確認主分支和臨時分支均沒有尚未提交的更改。更惡心的是&#xff…

開始記錄U9客開過程中聽點滴

很久沒有更新了。終于有時間可以拾起U9的研究當中。時間長了就生疏了很多,記錄下來備查吧。用這個工具可以生成一個VS 2022的項目,在指定的地方寫自已的代碼既可。BE插件,Busing Plugin 商業插件。總結一下,BE插件是應用于某一個單…

C# 異步編程(使用異步Lambda表達式)

使用異步Lambda表達式 到目前為止,本章只介紹了異步方法。但我們曾經說過,你還可以使用異步匿名方法和異步 Lambda表達式。這些構造尤其適合那些只有少量工作要做的事件處理程序。下面的代碼片段將 一個表達式注冊為一個按鈕點擊事件的事件處理程序。 st…

K8S云原生監控方案Prometheus+grafana

目錄 1. 概述 1.1 系統架構 1.1.1 架構圖 ?編輯 1.2 環境準備 2. 部署prometheus 2.1 創建Namespace 2.2 創建ConfigMap資源 2.3 創建ServiceAccount,Clusterrole,Clusterrolebinding,Service,Deployment,in…

Matplotlib庫:Python數據可視化的基石,發現它的美

Matplotlib是Python中最基礎、最廣泛使用的數據可視化庫,它提供了類似MATLAB的繪圖接口,能夠創建高質量的靜態、動態和交互式圖表。作為科學計算和數據可視化的核心工具,Matplotlib幾乎成為Python數據科學生態系統的標準可視化組件。 今天與…

每日算法刷題Day59:8.9:leetcode 隊列8道題,用時2h30min

一、基礎 1.套路 1.隊列常用在 BFS 中&#xff0c;見 網格圖題單 和 圖論題單。 2.隊列(queue)是容器適配器&#xff0c;功能較少。 隊尾插入元素&#xff0c;隊首彈出元素&#xff0c;可以訪問隊首元素、隊尾元素和隊列長度。 無begin(),end()等迭代器 queue<int> qu…