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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3969|回復: 0
打印 上一主題 下一主題
收起左側

UCOS的初始化后加載任務過程匯編代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:82781 發表于 2015-6-13 16:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
昨晚看到了任務切換時的匯編文件,才終于知道人為怎么才可以制造一次模擬中斷,任務切換時就是模擬發生了一次中斷,其實!他工作的原理是什么呢?
這就要看匯編文件:
MOV DPH,#HIGH (OSRunning)
MOV DPL,#LOW  (OSRunning)
MOV A,#1
MOVX @DPTR,A

SETB TR0
這一段是把系統狀態改成運行
并且開啟系統定時器
MOV DPH,#HIGH(OSTCBHighRdy)
MOV DPL,#LOW (OSTCBHighRdy)
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,R0
MOV DPL,A

;Move OSTCBStkPtr to dptr
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,R0
MOV DPL,A

上面的一段是用DPTR指向任務的堆棧,這一點非常重要。這里不得不說他分兩次查找,第一次它裝載指向堆棧的指針,找到這指針變量的位置后他再一次的吧指針里面的地址取出來裝載到DPTR中,所以看到的是兩次對DPTR進行賦值,R0作為暫存無實際意義
MOVX A,@DPTR
MOV ?C_IBP,A

JZ OSCPUASmltRstOver ;
INC DPTR
MOVX A,@DPTR  

MOV R0,#StkBottom - 1 ;
MOV R1,A   ;
ADD A,R0   ;sp
MOV SP,A

這一段非常重要他做了什么?
他首先取出用戶堆棧的第一個數據,這個數據叫做IBP,
然后取出堆棧的第二個數據,就是初始化的時后定義的堆棧的大小,
然后又取出系統設定好的堆棧開始地址,然后兩者求和,求出的和就是SP最后的大小,也就是說SP指針已經指向了最高的地址(如果堆棧向上升成長)
OSCPUARstHardStk:
INC R0   
INC DPTR
MOVX A,@DPTR
MOV @R0,A
DJNZ R1,OSCPUARstHardStk

顯然這是一個循環,他的做用就是吧剩下的用戶對戰里的數據全部加載到CPU硬件堆棧中,比如函數入口地址,ACCb,psw等保存在用戶堆棧的數據全部加載到系統棧中,接下來才是關鍵的也是最后的一哆嗦,
POP 07
POP 06
POP 05
POP 04
POP 03
POP 02
POP 01
POP 00
POP PSW
POP DPL
POP DPH
POP B
POP ACC ;A is register but ACC is direct ram

SETB EA ;after start, enable EA
RETI
這個是個出棧命令,POP,前面已經說到SP已經指向了最高的堆棧地值,那么這就表示把系統棧的所有的數據全部彈入對應的寄存器寄存器中,也就是說他用MOV指令代替了PUSH,他用MOV把用戶棧數據復制到系統棧中,然后用戶POP把系統棧的數據又恢復到寄存器中,是不是有點多此一舉?直接把用戶數據恢復到CPU寄存器不是更快馬?開始我那么想,向下看,有個RETI,再看棧頂正好存入的是函數的入口地址,哈哈所以他就跳轉到了對應的任務中去了,跟中斷幾乎是一模一樣的,都是保護現場,一個樣,


注意區分戶任務棧和系統棧,所謂系統棧就是那個用SP做棧指針,用RETI返回的棧,而用戶棧其實說白了就是個數組而已!需要用戶自己定義。
以上是出棧,入站的問題上比較糾結,主要是不符合預想,有待學習!他壓棧的時候是把一組從f0-ff之間的數據寫進去了后面又緊跟著系統棧的內容,按理說入棧就把系統棧內的寄存器保存就可以了吧,為什么還要入一塊不相關的內存?而且任務加載總是從初始化開始,沒有進行任務間的轉換,還看不到他處理的方法,不過思路都差不多,入站的格式一定得和出站的格式是一樣的存放順序(在用戶站立)否則他不可能找到正確的如口的!糾結中。。。。。。。







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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩视频一区 | 99在线资源 | 国产精品1区 | 草久视频 | 九色在线视频 | 久久久久国产一区二区三区 | 午夜不卡一区二区 | 在线国产一区 | 色888www视频在线观看 | 成人免费黄色 | 欧美日韩精品专区 | 久久久婷婷 | 999热精品 | 午夜免费成人 | 中国大陆高清aⅴ毛片 | 久久亚洲一区二区三区四区 | 99精品欧美一区二区三区 | 精品久久久一区 | 亚洲一区亚洲二区 | 中文字幕免费视频 | 色综合国产| 亚洲免费在线 | 91pao对白在线播放 | 性福视频在线观看 | 久久久久国产精品一区 | 精品国产一区二区三区日日嗨 | 日韩久久中文字幕 | 国产精品久久久精品 | 成年人在线视频 | 美女视频h | 亚洲精品成人免费 | 国产成人精品一区二区三区在线观看 | 国产综合久久 | 91麻豆精品一区二区三区 | 中文字幕1区2区 | 日本精品一区二区三区在线观看 | 亚洲精彩免费视频 | www.五月天婷婷 | 中文字幕亚洲精品在线观看 | 日韩免费一区 | 在线精品亚洲欧美日韩国产 |