久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3186|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

UCOS移植代碼之LAMMY分析--IRQ.INC

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:72519 發(fā)表于 2015-1-23 20:49 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
中斷接口文件IRQ.INC:
NoInt EQU 0x80 //禁止IRQ中斷
USR32Mode EQU 0x10 //用戶模式
SVC32Mode EQU 0x13 //管理模式
SYS32Mode EQU 0x1f //系統(tǒng)模式
IRQ32Mode EQU 0x12 //中斷模式
FIQ32Mode EQU 0x11 //快速中斷模式
;引入的外部標(biāo)號(hào)在這聲明
//IMPORT表示引用外部的信息
IMPORT OSIntCtxSw ;任務(wù)切換函數(shù)//引用外部的函數(shù)
IMPORT OSIntExit ;中斷退出函數(shù)
IMPORT OSTCBCur
IMPORT OSTCBHighRdy
IMPORT OSIntNesting ;中斷嵌套計(jì)數(shù)器
IMPORT StackUsr
IMPORT OsEnterSum

CODE32
AREA IRQ,CODE,READONLY
MACRO
$IRQ_Label HANDLER $IRQ_Exception_Function
EXPORT $IRQ_Label ; 輸出的標(biāo)號(hào)
IMPORT $IRQ_Exception_Function ; 引用的外部標(biāo)號(hào)
$IRQ_Label
SUB LR, LR, #4 ; 計(jì)算返回地址
//進(jìn)入中斷后,它的返回地址該怎么計(jì)算呢,可以這樣來(lái)理解,因?yàn)樗闹噶盍魉是3級(jí)的,即執(zhí)行進(jìn)入中斷函數(shù)時(shí),PC已經(jīng)指向欲取值的指令即當(dāng)前執(zhí)行的地址+8;當(dāng)已進(jìn)入中斷時(shí),LR里面裝的是PC,所以要想中斷返回到正確的地址處,就必須把LR-4。
STMFD SP!, {R0-R3, R12, LR} ; 保存任務(wù)環(huán)境
//這里面為什么只把R0-R3,R12,LR保存呢,其它不用嗎,是這樣的,我們可以從你裝的ADS1.2目錄下的PDF文件夾里面的ADS_DeveloperGuide_D.PDF文件的2.2就可以發(fā)現(xiàn)r4-r11裝的是局部變量,在進(jìn)行函數(shù)跳轉(zhuǎn)時(shí),編譯器它會(huì)自動(dòng)保護(hù)它們的。
MRS R3, SPSR ; 保存狀態(tài)
STMFD SP, {R3, SP, LR}^ ; 保存用戶狀態(tài)的R3,SP,LR,注意不能回寫 //前面一個(gè)SP是IRQ模式的,后面一個(gè)SP是用戶模式的,為什么不能回寫呢,如果你回寫的話,那么它保存的是用戶的SP,顯然是不行的。不知這樣理解對(duì)不對(duì)。
; 如果回寫的是用戶的SP,所以后面要調(diào)整SP
LDR R2, =OSIntNesting ; OSIntNesting++//中斷嵌套數(shù)+1
LDRB R1, [R2]
ADD R1, R1, #1
STRB R1, [R2]

SUB SP, SP, #4*3

MSR CPSR_c, #(NoInt | SYS32Mode) ; 切換到系統(tǒng)模式//只有切換到系統(tǒng)模式,后面的調(diào)用中斷處理程序才可以訪問用戶模式的寄存器
CMP R1, #1
LDREQ SP, =StackUsr

BL $IRQ_Exception_Function ; 調(diào)用c語(yǔ)言的中斷處理程序

MSR CPSR_c, #(NoInt | SYS32Mode) ; 切換到系統(tǒng)模式//應(yīng)該是為了避免中斷嵌套是處理器模式不處于系統(tǒng)模式了吧,不知理解對(duì)不對(duì)
LDR R2, =OsEnterSum ; OsEnterSum,使OSIntExit退出時(shí)中斷關(guān)閉
MOV R1, #1
STR R1, [R2]

BL OSIntExit

LDR R2, =OsEnterSum ; 因?yàn)橹袛喾⻊?wù)程序要退出,所以O(shè)sEnterSum=0
MOV R1, #0
STR R1, [R2]

MSR CPSR_c, #(NoInt | IRQ32Mode) ; 切換回irq模式
LDMFD SP, {R3, SP, LR}^ ; 恢復(fù)用戶狀態(tài)的R3,SP,LR, //前面一個(gè)SP是IRQ模式的,后面一個(gè)SP是用戶模式的,為什么不能回寫呢,如果你回寫的話,那么它保存的是用戶的SP,顯然是不行的。不知這樣理解對(duì)不對(duì)。
; 如果回寫的是用戶的SP,所以后面要調(diào)整SP
LDR R0, =OSTCBHighRdy
LDR R0, [R0]
LDR R1, =OSTCBCur
LDR R1, [R1]
CMP R0, R1 //判斷被掛起的任務(wù)是不是還是具有最高優(yōu)先級(jí)

ADD SP, SP, #4*3 ;
MSR SPSR_cxsf, R3
LDMEQFD SP!, {R0-R3, R12, PC}^ ; 不進(jìn)行任務(wù)切換
LDR PC, =OSIntCtxSw ; 進(jìn)行任務(wù)切換
MEND
END


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:72519 發(fā)表于 2015-1-23 20:49 | 只看該作者
歡迎大家指點(diǎn)
回復(fù)

使用道具 舉報(bào)

板凳
ID:68804 發(fā)表于 2015-2-9 15:04 | 只看該作者
學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品高潮呻吟久久aⅴ码 | 2019天天干夜夜操 | 一区二区三区免费 | 亚洲一区二区三区在线 | 日韩在线国产 | 97超碰在线播放 | 国产一区二区中文字幕 | 国产伦精品一区二区三区高清 | 色网站入口| 国产精品视频一区二区三区不卡 | 天堂色网 | 粉色午夜视频 | 国产a区| 欧美一级二级视频 | 久久精品欧美视频 | 欧美在线视频观看 | 国产精品久久亚洲 | 视频一区中文字幕 | 日韩中文字幕网 | 亚洲精品乱码久久久久v最新版 | 欧美电影免费观看高清 | 91免费看片 | 精品一区国产 | 久久91精品国产一区二区 | 欧美在线一区二区三区 | 一区中文| 欧美激情精品久久久久久免费 | 在线免费黄色小视频 | 超碰在线免费 | 国产成人叼嘿视频在线观看 | 久久久久久九九九九 | 日韩性在线 | 亚洲午夜精品在线观看 | 日本不卡免费新一二三区 | 精品九九 | 一级欧美 | 日韩在线第一 | 国产欧美精品区一区二区三区 | 色婷婷av99xx| 成年网站在线观看 | 久精品久久|