讀書筆記| (一)ARM9 嵌入式學(xué)習(xí):基礎(chǔ)篇

讀書筆記| ARM9 嵌入式學(xué)習(xí)

讀書筆記| ARM9 嵌入式學(xué)習(xí)

1、ARM處理器簡(jiǎn)介


  • 基于RISC,采用Load/Store

  • 數(shù)據(jù)存取指令執(zhí)行時(shí)間遠(yuǎn)大于寄存器內(nèi)部數(shù)據(jù)操作指令

  • ARM處理器工作模式

    • 用戶模式(User mode)
    • 速中斷模式(FIQ) ===> 高速數(shù)據(jù)傳輸及通道處理
    • 外部中斷模式(IRQ)
    • 特權(quán)模式(Supervisor)===> cpu上電后默認(rèn)模式
      • 用途: 系統(tǒng)初始化 & 軟中斷
    • 數(shù)據(jù)訪問(wèn)終止模式(Abort)
      • 支持虛存或存儲(chǔ)器保護(hù)
      • 訪問(wèn)非法地址時(shí)進(jìn)入該模式
    • 未定義指令終止模式(Undefined)
      • 識(shí)別不了指令操作時(shí)進(jìn)入該模式
    • 系統(tǒng)模式(System)
      • 和用戶模式共用一套寄存器
  • ARM存儲(chǔ)器

    • 4字節(jié)對(duì)齊
    • 大端格式: 高字節(jié)低地址馍悟,低字節(jié)高地址
    • 小端格式: 高字節(jié)高地址,低字節(jié)低地址
    • 數(shù)據(jù)類型: 字節(jié)型數(shù)據(jù) / 半字 / 字

2陡厘、ARM寄存器


2.1 寄存器概況

  • 37個(gè)导披,31通用舵鳞,6個(gè)狀態(tài)寄存器
  • 寄存器均為32位
  • 修改寄存器某一位:采用“先與后或”的方式

2.2 r0-r15探入,CPSR/SPSR

  • 各模式下公用寄存器存到堆棧中

  • r13堆棧指針寄存器(SP)

    • 習(xí)慣用法狡孔,也可用其他寄存器做堆棧指針
    • 每個(gè)模式都有自己的r13,指向相應(yīng)的地址空間
  • R14鏈接寄存器(LR)

    • 存放子程序的返回地址
    • 調(diào)用子程序時(shí)蜂嗽,將當(dāng)前r15保存到r14
    • 執(zhí)行完子程序苗膝,r14的值復(fù)制回R15
  • r15程序計(jì)數(shù)器(PC)

    • PC,不指向當(dāng)前正在執(zhí)行的指令
    • 總是指向“正在取指”的指令
    • PC值=當(dāng)前地址值+8
  • CPSR/SPSR

    • 當(dāng)前/備份程序狀態(tài)寄存器
      • CPSR:公用寄存器
      • SPSR: 獨(dú)立寄存器
    • 標(biāo)志位組成:
      • 條件標(biāo)志位
      • 模式控制位
      • IRQ植旧、FIQ中斷響應(yīng)位

2.3 三級(jí)流水線: 馮諾依曼結(jié)構(gòu)

  • (1)取指:
    從指令存儲(chǔ)器取指令
    從存儲(chǔ)器裝載一條指令
  • (2)譯碼:
    識(shí)別將要被執(zhí)行的指令
  • (3)執(zhí)行:
    產(chǎn)生ALU運(yùn)算結(jié)果或產(chǎn)生存儲(chǔ)器地址

2.4 五級(jí)流水線: 哈佛結(jié)構(gòu)

  • (4)訪存:
    訪問(wèn)數(shù)據(jù)存儲(chǔ)器
  • (5)回寫:
    完成結(jié)果寫寄存器

3辱揭、ARM指令集


3.1 ARM指令

  • 存儲(chǔ)器訪問(wèn)指令
  • 數(shù)據(jù)處理指令
  • 跳轉(zhuǎn)指令
  • 程序狀態(tài)寄存器訪問(wèn)指令
  • 協(xié)處理器訪問(wèn)指令

3.2 存儲(chǔ)器訪問(wèn)指令

3.2.1 LDR/STR

  • ldr r0, 0x12345678
    • 把0x12345678這個(gè)地址中的值存放到r0中
    • mov不能實(shí)現(xiàn)這個(gè)功能
    • mov只能在寄存器之間移動(dòng)數(shù)據(jù),或者把立即數(shù)移動(dòng)到寄存器中
  • ldr r0, =0x12345678
    • 把0x12345678這個(gè)值寫到r0中
    • 類似MOV病附,但mov長(zhǎng)度不能超過(guò)8位

3.2.2 LDM/STM

  • IA ----> Increment After
    每次傳送后地址加4
  • IB---->Increment Before
    每次傳送前地址加4
  • DA ----> Decrement After
    每次傳送后地址減4
  • DB ---->Decrement Before
    每次傳送前地址減4
  • FA ----> Full Ascending 滿遞增堆棧
  • FD ----> Full Descending 滿遞減堆棧
  • EA ----> Empty Ascending 空遞增堆棧
  • ED ----> Empty Descending 空遞減堆棧

3.3 數(shù)據(jù)處理指令

  • MOV
  • ADD/SUB/BIC/CMP/ORR
  • BIC:位清除
  • ORR:邏輯或
  • swp:內(nèi)存和寄存器之間字?jǐn)?shù)據(jù)交換指令

3.4 跳轉(zhuǎn)指令

  • b
  • bl

3.5 程序狀態(tài)寄存器訪問(wèn)指令

  • MSR:寫狀態(tài)寄存器指令
  • MRS:讀~

3.6 協(xié)處理器訪問(wèn)指令

  • MRC: 協(xié)處理器中寄存器的數(shù)據(jù)傳送到arm處理器寄存器中
  • MCR: 反之

3.7 ARM偽操作

  • GET
    • 包含定義常量的源文件
    • 相當(dāng)于C的“include”
    • GET 2440addr.inc
  • AREA/ENTRY/END
  • EXPORT/IMPORT
    • E:聲明外部標(biāo)號(hào)
    • I:引用其他文件定義的標(biāo)號(hào)
  • EQU/LTORG/ALIGN
  • MACRO/MEND
  • MAP/FIELD
  • ADRL/LDR

4问窃、ARM宏指令


5、ARM尋址方式


  • 立即尋址:
    數(shù)據(jù)在指令中
  • 寄存器尋址:
    操作數(shù)在寄存器中完沪,指令給出寄存器編號(hào)
  • 寄存器移位尋址:
    取寄存器的值域庇,做移位運(yùn)算
  • 寄存器間接尋:
    寄存器存操作數(shù)的內(nèi)存地址
  • 基址尋址:
    操作數(shù)地址=基址寄存器的值+指令給出的偏移量
  • 多寄存器尋址
  • 堆棧尋址

6、相關(guān)細(xì)節(jié)


  • JTAG: 系統(tǒng)仿真丽焊、調(diào)試
  • 串口: 數(shù)據(jù)一位一位地順序傳送
  • 并口: 同時(shí)傳送8位數(shù)據(jù)
  • RISC
    • Reduced Instruction Set Computer
    • 簡(jiǎn)單指令硬件實(shí)現(xiàn)
    • 復(fù)雜指令軟件實(shí)現(xiàn)
  • CISC
    Complex Instruction Set Computer

7较剃、ARM C 語(yǔ)言基礎(chǔ)


7.1 typedef &#define

  • T:編譯階段處理
  • D:預(yù)處理階段處理

7.2 volatile:

每次讀寫數(shù)據(jù)咕别,都到內(nèi)存單元處讀取技健,而非寄存器

7.3 C語(yǔ)言源程序處理過(guò)程

  • 預(yù)處理
  • 編譯
  • 匯編
  • 鏈接

7.4 arm C擴(kuò)展關(guān)鍵字

  • __irq: 定義中斷處理函數(shù)
  • __swi: 定義軟中斷
  • __asm: 嵌入?yún)R編代碼 & 完成c代碼無(wú)法完成的工作
  • __inline: 內(nèi)聯(lián)函數(shù) & 解決函數(shù)調(diào)用開(kāi)銷太大的問(wèn)題
  • sizeof: 是一個(gè)關(guān)鍵字,非函數(shù)

8. 匯編&C混合編程


8.1 APCS: ARM Process Call Standard

  • r0-r3:傳遞函數(shù)參數(shù)
  • R4-R11:保存函數(shù)的局部變量
  • 子程序參數(shù)大于4時(shí)惰拱,借助堆棧傳遞參數(shù)
  • 函數(shù)返回值用R0傳遞(4字節(jié))雌贱,8字節(jié)用r0和r1傳遞
  • 浮點(diǎn)數(shù)參數(shù)可以通過(guò)寄存器傳遞,也可以通過(guò)數(shù)據(jù)棧傳遞

8.2 在c程序中嵌入?yún)R編代碼的原因

  • c代碼無(wú)法操作寄存器
  • 嵌入?yún)R編代碼提高效率

PS:

FP寄存器

  • 浮點(diǎn)參數(shù)會(huì)用到
  • 幀指針寄存器啊送,r11
  • 函數(shù)局部變量被分配在連續(xù)存儲(chǔ)區(qū)中,它是通過(guò)一個(gè)指針訪問(wèn)的
    • 該連續(xù)存儲(chǔ)區(qū)稱為這個(gè)函數(shù)的存儲(chǔ)“幀”
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末欣孤,一起剝皮案震驚了整個(gè)濱河市馋没,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌降传,老刑警劉巖篷朵,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異婆排,居然都是意外死亡声旺,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門段只,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腮猖,“玉大人,你說(shuō)我怎么就攤上這事赞枕〕喝保” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵炕婶,是天一觀的道長(zhǎng)姐赡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)柠掂,這世上最難降的妖魔是什么雏吭? 我笑而不...
    開(kāi)封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮陪踩,結(jié)果婚禮上杖们,老公的妹妹穿的比我還像新娘。我一直安慰自己肩狂,他們只是感情好摘完,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著傻谁,像睡著了一般孝治。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上审磁,一...
    開(kāi)封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天谈飒,我揣著相機(jī)與錄音,去河邊找鬼态蒂。 笑死杭措,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钾恢。 我是一名探鬼主播手素,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鸳址,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了泉懦?” 一聲冷哼從身側(cè)響起稿黍,我...
    開(kāi)封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崩哩,沒(méi)想到半個(gè)月后巡球,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邓嘹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年辕漂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吴超。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钉嘹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鲸阻,到底是詐尸還是另有隱情跋涣,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布鸟悴,位于F島的核電站陈辱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏细诸。R本人自食惡果不足惜沛贪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望震贵。 院中可真熱鬧利赋,春花似錦、人聲如沸猩系。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寇甸。三九已至塘偎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拿霉,已是汗流浹背吟秩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绽淘,地道東北人涵防。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像收恢,于是被迫代替她去往敵國(guó)和親武学。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容