日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

電子發(fā)燒友App

硬聲App

掃碼添加小助手

加入工程師交流群

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>接口技術(shù)>UCOSIII移植中的匯編接口函數(shù)講解

UCOSIII移植中的匯編接口函數(shù)講解

2017-12-06 | rar | 未知 | 次下載 | 1積分

資料介紹

 1:開始多任務(wù)函數(shù) void OSStartHighRdy(void)
  在OSInit()初始化完畢之后,會(huì)調(diào)用OSStart(),在OS開始函數(shù)里面會(huì)調(diào)用void OSStartHighRdy(void)函數(shù),這是一個(gè)純匯編編寫的函數(shù),在os_cpu_a.s這個(gè)匯編文件里面實(shí)現(xiàn),具體的如下,我已經(jīng)給每一句代碼都添加了注釋。
    ; 開始多任務(wù)
  ; void OSStartHighRdy(void)
  ;
  ; 注意 : 1) 這個(gè)函數(shù)觸發(fā)了一個(gè)PendSV異常,導(dǎo)致第一個(gè)任務(wù)開始運(yùn)行。
  ;
  ; 2) OSStartHighRdy() 必須:
  ; a) 設(shè)置PendSV的優(yōu)先級(jí)為最低;
  ; b) 初始化進(jìn)程堆棧指針PSP等于0, 表明這是第一次上下文切換;
  ; c) 設(shè)置主堆棧指針等于OS_CPU_ExceptStkBase
  ; d) 觸發(fā)PendSV異常;
  ; e) 使能中斷,任務(wù)開始運(yùn)行。
    ;********************************************************************************************************
  ; 開始多任務(wù)
  ; void OSStartHighRdy(void)
  ;
  ; 注意 : 1) 這個(gè)函數(shù)觸發(fā)了一個(gè)PendSV異常,導(dǎo)致第一個(gè)任務(wù)開始運(yùn)行。
  ;
  ; 2) OSStartHighRdy() 必須:
  ; a) 設(shè)置PendSV的優(yōu)先級(jí)為最低;
  ; b) 初始化進(jìn)程堆棧指針PSP等于0, 表明這是第一次上下文切換;
  ; c) 設(shè)置主堆棧指針等于OS_CPU_ExceptStkBase
  ; d) 觸發(fā)PendSV異常;
  ; e) 使能中斷,任務(wù)開始運(yùn)行。
  ;********************************************************************************************************
  OSStartHighRdy
  ; 設(shè)置PendSV中斷優(yōu)先級(jí)
  LDR R0, =NVIC_SYSPRI14
  LDR R1, =NVIC_PENDSV_PRI
  STRB R1, [R0] ;*R0=R1(低字節(jié)),因?yàn)楸磉_(dá)優(yōu)先級(jí)只需要8bit
  ; 初始化PSP=0
  MOVS R0, #0 ; 把0加載到R0
  MSR PSP, R0 ; 把R0的值加載到特殊寄存器PSP
  ; 初始化MSP地址
  LDR R0, =OS_CPU_ExceptStkBase ; 把OS_CPU_ExceptStkBase這個(gè)指針變量的地址加載到R0
  LDR R1, [R0] ; *R0 = R1,實(shí)際上就是把OS_CPU_ExceptStkBase的值加載到R1
  MSR MSP, R1 ; 把R1的值加載到MSP,此時(shí)MSP=OS_CPU_ExceptStkBase
  ; 觸發(fā)PendSV異常 (進(jìn)入上下文切換)
  LDR R0, =NVIC_INT_CTRL
  LDR R1, =NVIC_PENDSVSET
  STR R1, [R0] ; *R0 = R1
  ; 打開中斷
  CPSIE I
  ; 正常情況下,永遠(yuǎn)不會(huì)運(yùn)行到這,因?yàn)檫@是一個(gè)死循環(huán)
  OSStartHang
  B OSStartHang
  1:PendSV 異常服務(wù)函數(shù) void OS_CPU_PendSVHandler(void)
?
OS_CPU_PendSVHandler
????CPSID ??I ?????????????????????????????????????????????????????????; 關(guān)中斷,執(zhí)行上下文切換的時(shí)候不能被中斷,屬于臨界段
????MRS ????R0, PSP ???????????????????????????????????????????????; 加載PSP(即R13)的值到R0
????CBZ ????R0, OS_CPU_PendSVHandler_nosave ????; R0的值為0則跳轉(zhuǎn)到OS_CPU_PendSVHandler_nosave; CBZ:比較,如果結(jié)果為0就跳轉(zhuǎn)
???????????????????????????????????????????????????????????????????????????; 第一次進(jìn)行上下文切換的時(shí)候PSP等于0,所以要進(jìn)行跳轉(zhuǎn)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????SUBS ???R0, R0, #0x20 ????????????????????????????????????; 壓棧之前先調(diào)整堆棧指針,要壓棧的寄存器R4-R11有8個(gè),所以偏移為8*0x04=0x20
????STM ????R0, {R4-R11} ??????????????????????????????????????; 手動(dòng)將R4-R11壓棧
?
????; 實(shí)現(xiàn) OSTCBCurPtr->OSTCBStkPtr = SP;
????LDR ????R1, =OSTCBCurPtr ?????????????????????????????; R1=&OSTCBCurPtr,這個(gè)時(shí)候R1里面存的是OSTCBCurPtr這個(gè)指針變量的地址 ???????????????
????LDR ????R1, [R1] ????????????????????????????????????????????; R1=*R1=OSTCBCurPtr,這個(gè)時(shí)候,R1等于OSTCBCurPtr這個(gè)指針變量
????STR ????R0, [R1] ????????????????????????????????????????????; *R1=R0,這個(gè)時(shí)候OSTCBCurPtr指向的TCB的第一個(gè)成員(即OSTCBCurPtr->OSTCBStkPtr)等于R0
????????????????????????????????????????????????????????????????????????; R0又是一開始進(jìn)行壓棧的PSP,所以O(shè)STCBCurPtr->OSTCBStkPtr = SP
????????????????????????????????????????????????????????????????????????; 程序運(yùn)行到這個(gè)點(diǎn)上,進(jìn)入上下文切換的過程已經(jīng)保存好了
OS_CPU_PendSVHandler_nosave
????PUSH ???{R14} ??????????????????????????????????????????????; 保存 LR exc_return 的值
????LDR ????R0, =OSTaskSwHook ????????????????????????; 調(diào)用OSTaskSwHook()
????BLX ????R0
????POP ????{R14}
?
????; 實(shí)現(xiàn) OSPrioCur = OSPrioHighRdy;
????LDR ????R0, =OSPrioCur ???????????????????????????????; R0=&OSPrioCur ???????????????????????????????
????LDR ????R1, =OSPrioHighRdy ????????????????????????; R1=&OSPrioHighRdy
????LDRB ???R2, [R1] ????????????????????????????????????????; R2=*R1(低字節(jié)),因?yàn)閮?yōu)先級(jí)是8bit的,所以是低字節(jié)
????STRB ???R2, [R0] ?????????????????????????????????????????; R0=*R2(低字節(jié)),因?yàn)閮?yōu)先級(jí)是8bit的,所以是低字節(jié)
?
????; 實(shí)現(xiàn) OSTCBCurPtr = OSTCBHighRdyPtr;
????????????????LDR ????R0, =OSTCBCurPtr ???????????????; R0=&OSTCBCurPtr ?????????????????????????????????
????LDR ????R1, =OSTCBHighRdyPtr ????????????????????; R1=&OSTCBHighRdyPtr
????LDR ????R2, [R1] ??????????????????????????????????????????; R2=*R1
????STR ????R2, [R0] ??????????????????????????????????????????; R0=*R2
?
????LDR ????R0, [R2] ?????????????????????????????????????????; R0等于新的進(jìn)程的SP; SP = OSTCBHighRdyPtr->StkPtr
??????????????????????????????????????????????????????????????????????; R2=OSTCBHighRdyPtr,則[R2]=*R2=OSTCBHighRdyPtr=StkPtr,因?yàn)門CB的第一個(gè)成員就是StkPtr
????LDM ????R0, {R4-R11} ?????????????????????????????????; 從新的堆棧中彈出R4-R11
????ADDS ???R0, R0, #0x20 ???????????????????????????????; 重新調(diào)整堆棧指針,R4-R11為8個(gè)寄存器,每個(gè)寄存器為四個(gè)字節(jié),8*4=32=0X20
????MSR ????PSP, R0 ?????????????????????????????????????????; 更新PSP的值
????ORR ????LR, LR, #0x04 ???????????????????????????????; 判斷LR寄存器的位4是否為1,確保異常返回用用的是PSP
????CPSIE ??I ???????????????????????????????????????????????????; 打開中斷,上下文切換結(jié)束
????BX ?????LR ??????????????????????????????????????????????????; 異常返回
?
????END ?????????????????????????????????????????????????????????; 匯編程序結(jié)束
  ; 只有在特權(quán)級(jí)下,才可以訪問下面三個(gè)寄存器
  ; PRIMASK :這是個(gè)只有單一比特的寄存器。 在它被置 1 后,就關(guān)掉所有可屏蔽的異常,只剩下 NMI 和硬 fault 可以響應(yīng)。它的缺省值是 0,表示沒有關(guān)中斷。
  ; FAULTMASK:這是個(gè)只有 1 個(gè)位的寄存器。當(dāng)它置 1 時(shí),只有 NMI 才能響應(yīng),所有其它的異常,甚至是硬 fault,也通通閉嘴。它的缺省值也是 0,表示沒有關(guān)異常。
  ; BASEPRI :這個(gè)寄存器最多有 9 位( 由表達(dá)優(yōu)先級(jí)的位數(shù)決定)。它定義了被屏蔽優(yōu)先級(jí)的閾值。當(dāng)它被設(shè)成某個(gè)值后,所有優(yōu)先級(jí)號(hào)大于等于此值的中斷都被關(guān)(優(yōu)先級(jí)號(hào)
  ; 越大,優(yōu)先級(jí)越低)。但若被設(shè)成 0,則不關(guān)閉任何中斷, 0 也是缺省值。
  ;
  ; 為了快速的開關(guān)中斷,CM3專門設(shè)置了一條CPS指令,有4種用法
  ; CPSID I //PRIMASK = 1, ;關(guān)中斷
  ; CPSIE I //PRIMASK = 0, ;開中斷
  ; CPSID F //FAULTMASK = 1, ;關(guān)異常
  ; CPSIE F //FAULTMASK = 0, ;開異常
?
接口 匯編 uCOS
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1MDD品牌三極管MMBT3906數(shù)據(jù)手冊(cè)
  2. 2.33 MB  |  次下載  |  免費(fèi)
  3. 2MDD品牌三極管S9012數(shù)據(jù)手冊(cè)
  4. 2.62 MB  |  次下載  |  免費(fèi)
  5. 3聯(lián)想flex2-14D/15D說明書
  6. 4.92 MB   |  次下載  |  免費(fèi)
  7. 4收音環(huán)繞擴(kuò)音機(jī) AVR-1507手冊(cè)
  8. 2.50 MB   |  次下載  |  免費(fèi)
  9. 524Pin Type-C連接器設(shè)計(jì)報(bào)告
  10. 1.06 MB   |  次下載  |  免費(fèi)
  11. 6新一代網(wǎng)絡(luò)可視化(NPB 2.0)
  12. 3.40 MB  |  次下載  |  免費(fèi)
  13. 7MS1000TA 超聲波測(cè)量模擬前端芯片技術(shù)手冊(cè)
  14. 0.60 MB   |  次下載  |  免費(fèi)
  15. 8MS1022高精度時(shí)間測(cè)量(TDC)電路數(shù)據(jù)手冊(cè)
  16. 1.81 MB   |  次下載  |  免費(fèi)

本月

  1. 1愛華AIWA HS-J202維修手冊(cè)
  2. 3.34 MB   |  37次下載  |  免費(fèi)
  3. 2PC5502負(fù)載均流控制電路數(shù)據(jù)手冊(cè)
  4. 1.63 MB   |  23次下載  |  免費(fèi)
  5. 3NB-IoT芯片廠商的資料說明
  6. 0.31 MB   |  22次下載  |  1 積分
  7. 4H110主板CPU PWM芯片ISL95858HRZ-T核心供電電路圖資料
  8. 0.63 MB   |  6次下載  |  1 積分
  9. 5UWB653Pro USB口測(cè)距通信定位模塊規(guī)格書
  10. 838.47 KB  |  5次下載  |  免費(fèi)
  11. 6技嘉H110主板IT8628E_BX IO電路圖資料
  12. 2.61 MB   |  4次下載  |  1 積分
  13. 7蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
  14. 0.04 MB   |  4次下載  |  1 積分
  15. 8100W準(zhǔn)諧振反激式恒流電源電路圖資料
  16. 0.09 MB   |  2次下載  |  1 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935137次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191439次下載  |  10 積分
  9. 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  10. 158M  |  183353次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81602次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73822次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65991次下載  |  10 積分
登封市| 宜兴市| 长岛县| 顺平县| 四会市| 南川市| 商水县| 孙吴县| 巨野县| 慈利县| 林州市| 绥中县| 柳林县| 桂阳县| 彰武县| 三穗县| 平湖市| 上林县| 府谷县| 家居| 克东县| 渑池县| 德昌县| 武宣县| 上高县| 永靖县| 西丰县| 兰西县| 和平县| 邵阳县| 青州市| 青岛市| 孝义市| 勃利县| 新平| 普安县| 扎赉特旗| 文安县| 鄯善县| 正安县| 连城县|