預(yù)備知識

M3內(nèi)核基本結(jié)構(gòu)

  • Cortex-M3內(nèi)核是32位的
  • M3F103內(nèi)核采用Thumb-2指令集
  • 支持16/32位指令混合編碼
  • 內(nèi)核模式分為handler(管理者)和thread(線程)模式。handler運行在特權(quán)級下,thread可運行在特權(quán)級下和用戶級下
  • 操作權(quán)限分兩個等級:特權(quán)級和用戶級郊闯,處理器復(fù)位后自動進入thread模式下的特權(quán)級,這時候程序具有全部權(quán)限俗冻,處理器配置完畢后自動進入thread的用戶級,放棄對重要處理器的配置權(quán)限牍颈。當(dāng)進入中斷時迄薄,自動切換到handler級。通過control寄存器的第0位可以切換特權(quán)級
  • 內(nèi)核有18個寄存器煮岁,R0-R12讥蔽、R13為SP寄存器、R14為LR寄存器画机、R15為PC寄存器冶伞、XPSR寄存器

R0-R12作為通用寄存器,這些通用寄存器用來存放臨時數(shù)據(jù)步氏,R0-R3在程序調(diào)用時可以用來傳遞函數(shù)參數(shù)和返回值响禽,R12在某些情況下可以用來 保存子程序的中間值

SP是棧寄存器,用來指示當(dāng)前棧的位置荚醒。在M3中有兩個SP寄存器分別為MSP和PSP芋类。MSP為缺省的棧指針,handler模式只能用MSP界阁,thread模式可以使用MSP和PSP侯繁。注意任何時刻只有一個SP起作用,可簡單的只使用MSP泡躯。

LR是鏈接寄存器贮竟,用來保存跳轉(zhuǎn)后返回的地址丽焊。當(dāng)發(fā)生函數(shù)調(diào)用時,LR寄存器中保存著函數(shù)返回后需要執(zhí)行的指令地址咕别。LR對普通函數(shù)調(diào)用時存儲調(diào)用函數(shù)后的返回地址技健,但在中斷發(fā)生時發(fā)生了變化。
當(dāng)中斷發(fā)生時惰拱,硬件自動存儲R0-R3凫乖,R12,LR弓颈,PC,XPSR這8個寄存器删掀,中斷返回時自動恢復(fù)這8個寄存器翔冀。中斷發(fā)生時將這8個寄存器壓入PSP/MSP棧,進入中斷服務(wù)程序后披泪,硬件會自動將一個特殊的值EXC_RETURN而不是返回地址存入LR中纤子,EXC_RETURN只有三個值,0xFFFFFFF1表示中斷服務(wù)程序返回handler模式且使用MSP款票,0xFFFFFFF9表示中斷服務(wù)函數(shù)返回thread模式且使用MSP控硼,0XFFFFFFFD表示中斷服務(wù)函數(shù)返回thread模式且使用PSP。
中斷時由于LR不保存返回地址艾少,所以根據(jù)棧中的PC值(下條指令地址)來尋找入口卡乾。
可以理解為M3內(nèi)核機制進行了一個二級跳,先將8個寄存器數(shù)值壓入棧中缚够,再將代表中斷返回所使用的工作模式以及棧寄存器的EXC_RETURN值存入LR中幔妨,中斷退出時跳轉(zhuǎn)到EXC_RETURN值,并從棧中取出8個寄存器值,這樣就不僅找到了返回地址,又可以找到中斷前的工作狀態(tài)和棧指針裸准。

PC寄存器存儲的是當(dāng)前所執(zhí)行指令所在的地址副硅。處理器通過PC寄存器找到其需要執(zhí)行的指令,更改PC寄存器就會發(fā)生指令跳轉(zhuǎn)羞迷。

XPSR--狀態(tài)寄存器,這個狀態(tài)寄存器由多個寄存器復(fù)合而成。APSR存放著程序的狀態(tài)悉抵,IPSR存放著中斷號,EPSR存放著執(zhí)行程序的狀態(tài)摘完。

STM32F103處理器運行的程序完全由這18個寄存器控制基跑,操作系統(tǒng)通過備份、還原更改寄存器來控制程序執(zhí)行流程描焰,實現(xiàn)任務(wù)切換媳否。

Thumb-2指令集

  • 指令數(shù):16條 指令空間:40byte 指令特點:16/32混合
  • 數(shù)據(jù)計算指令:add栅螟、adr、sub
  • 數(shù)據(jù)搬移指令:mov篱竭、ldr力图、ldm、stm掺逼、push吃媒、pop
  • 狀態(tài)寄存器操作指令:mrs、msr
  • 邏輯計算指令:and
  • 跳轉(zhuǎn)指令:bx吕喘、xbz
  • 軟中斷指令:svc

一個例子

testfunc1
    PUSH {R4-R5}
    LDR R0, =1
    LDR R1, =2
    LDR R2, =3
    LDR R3, =4
    LDR R4, =5
    LDR R5, =6
    PUSH{R4-R5,R14}
    BL testfunc2
    ADD R0,#7
    ADD SP,#8
    POP{R14}
    POP{R4-R5}
    BX R14
char testfunc2(char p1,char p2,char p3,char p4,char p5,char p6)
{
    return p1 + p2 + p3 + p4 + p5 +p6;
}

該函數(shù)依次進行了赘那,將R4,5壓棧(0-3不壓),R14(LR)壓棧氯质,計算testfunc2募舟,恢復(fù)現(xiàn)場的操作。

函數(shù)間調(diào)用標(biāo)準(zhǔn)

該內(nèi)核使用匯編語言編寫寄存器相關(guān)代碼闻察,用c編寫功能型代碼
Arm內(nèi)核上的規(guī)則是AAPCS

  • 父函數(shù)與子函數(shù)間的入口參數(shù)通過R0-R3傳遞
  • 子函數(shù)通過R0將函數(shù)值傳遞給父函數(shù)
  • AAPCS規(guī)定拱礁,發(fā)生函數(shù)調(diào)用錢由父函數(shù)備份R0-R3寄存器中有用的數(shù)據(jù)
  • R4-R11為普通的通用寄存器
  • R13寄存器是SP,用來保存當(dāng)前指針
  • R14是連接寄存器辕漂,用來保存函數(shù)的返回地址
  • R15是程序寄存器PC呢灶,正在執(zhí)行的指令所在的地址存儲在PC中
  • XPSP寄存器是狀態(tài)寄存器,某些指令會影響狀態(tài)寄存器钉嘹,用作判斷
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸯乃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子跋涣,更是在濱河造成了極大的恐慌飒责,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仆潮,死亡現(xiàn)場離奇詭異宏蛉,居然都是意外死亡,警方通過查閱死者的電腦和手機性置,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門拾并,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鹏浅,你說我怎么就攤上這事嗅义。” “怎么了隐砸?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵之碗,是天一觀的道長。 經(jīng)常有香客問我季希,道長褪那,這世上最難降的妖魔是什么幽纷? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮博敬,結(jié)果婚禮上友浸,老公的妹妹穿的比我還像新娘。我一直安慰自己偏窝,他們只是感情好收恢,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祭往,像睡著了一般伦意。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上硼补,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天驮肉,我揣著相機與錄音,去河邊找鬼括勺。 笑死,一個胖子當(dāng)著我的面吹牛曲掰,可吹牛的內(nèi)容都是我干的疾捍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼栏妖,長吁一口氣:“原來是場噩夢啊……” “哼乱豆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吊趾,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宛裕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后论泛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揩尸,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年屁奏,在試婚紗的時候發(fā)現(xiàn)自己被綠了岩榆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡坟瓢,死狀恐怖勇边,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情折联,我是刑警寧澤粒褒,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站诚镰,受9級特大地震影響奕坟,放射性物質(zhì)發(fā)生泄漏祥款。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一执赡、第九天 我趴在偏房一處隱蔽的房頂上張望镰踏。 院中可真熱鬧,春花似錦沙合、人聲如沸奠伪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绊率。三九已至,卻和暖如春究履,著一層夾襖步出監(jiān)牢的瞬間滤否,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工最仑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留藐俺,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓泥彤,卻偏偏與公主長得像欲芹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吟吝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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