# ARM
###### tags: `work`

ARM架構
優點: 低成本 高效能 低耗電
ARNv1~v9
ARM經典核心系列
ARM Cortex系列
經典核心系列於2009年就沒有新的了
都是Cortex
Cortex有[A,R,M三種系列](https://www.cool3c.com/article/107624), 分別用在
A: 應用 Apllication
R: 反應速度, 微處理器 Microprocessor?
M: 微控制器 嵌入式
[三種各自的差別](https://www.cool3c.com/article/107624)
### Register
16 個 32 bit 長度的暫存器,其中有 13 個為 通用暫存器 (General Purpose Registers, GPRs) , R13-R15 則有其他用途
:::info
R13 通常會被用來當作堆疊指標 (Stack Pointer, SP),在實際使用中,一般會在記憶體分配一些空間作為堆疊,系統初始化時將這一塊堆疊的底部位址儲存到 R13 。
:::
:::info
R14 為 連結暫存器 (Link register, LR) ,用來存放副程式的返回地址,比如我們在組語中呼叫到了 BL、BLX 等指令時,會將 PC 的數值複製到 R14 中,作為反還 (return) 的位址,具體範例如下。
:::
:::info
R15 則是程式計數器(Program Counter, PC),用來存放下一道指令的位址,根據 ARM7TDMI Technical Reference Manual, R15 在 ARM 或是 Thumb 模式下狀況不同
- ARM 模式 (ARM state)
bits [1:0] 未定義且會被忽略, bits [31:2] 保留了 PC 數值
- Thumb 模式 (Thumb state)
bit [0] 未定義且被忽略, bits [31:1] 保留了 PC 數值
:::
ARM指令: 32 bit
thumb-1指令: 指令大小為16 bit, 優點在於小, 可以讓指令密度更高
thumb-2指令: 指令大小為16與32bit綜合, 優點在於效率比thumb-1更好, 比ARM指令更密集
為什麼比thumb-1更好, 因為thumb-1只有16 bit, 要做一些功能會讓指令數增加很多, 因此有了綜合ARM與thumb-1的thumb-2指令
VFP(向量浮點)是在協同處理器針對ARM架構的衍生技術。它提供低成本的單精度和倍精度浮點運算能力
---
### NEON
[基礎介紹](https://zyddora.github.io/2016/02/28/neon_1/)
---
安全性擴充TrustZone
reference: 中文維基百科
https://zh.wikipedia.org/wiki/ARM%E6%9E%B6%E6%A7%8B#%E5%85%A7%E6%A0%B8%E7%A8%AE%E9%A1%9E
除了A, R, M三種
2020還出了X1, 能高度客製化(三劍客:A78, Mali, X1)
高通 三星都自研架構, 但效果沒很好, 三星在2019就不自研架構了
目前自研架構最強的是Apple
---
[**jserv ARM課程**](https://hackmd.io/@sysprog/arm-architecture)
ARM研究(cortex A72, NEON(Adcanced SIMD) )
[課程單元 - 回顧 ARM 架構(w/ Thumb、VFP、NEON)](https://hackmd.io/tv2qzMGXQ42QCOMoqDoQsg?view)
進階SIMD(NEON):
它是一個結合64位元和128位元的單指令多重數指令集(SIMD),其針對多媒體和訊號處理程式具備標準化加速的能力。
NEON具有一組廣泛的指令集、各自的暫存器檔案,以及獨立執行的硬體。NEON支援8、16、32和64位元的整數及單精度浮點數據,並以單指令多重數的方式運算,執行圖形和遊戲處理中關於語音及視訊的部分。
單指令多重指令集在向量超級處理機中是個決定性的要素,它具備同時多項處理功能。在NEON技術中,SIMD最高可同時做16個運算。
---
raspberry pi facial landmarks detection
[1](https://circuitdigest.com/microcontroller-projects/facial-landmark-detection-using-raspberry-pi-opencv) [2](https://www.pyimagesearch.com/2017/10/23/raspberry-pi-facial-landmarks-drowsiness-detection-with-opencv-and-dlib/)
---
馮紐曼架構:指令與資料記憶體合併
哈佛架構:指令與資料記憶體分開, 改進後的哈佛反而沒有將兩者完全分開
---
[淺談ARM處理器的七種異常處理](https://kknews.cc/zh-tw/code/429axqv.html)
---
[Jserv: Intel和ARM的Interrupt](https://hackmd.io/@sysprog/linux-interrupt?type=view)
softirq, tasklet, workqueue
tag: `ARM`, `embedded system`, `driver`