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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

OS001_基本構想與Cortex-M所提供的方便

作者:佚名   來源:互聯網   點擊數:  更新時間:2014年08月10日   【字體:

關于為何中斷入棧時使用正在使用的指針,入棧后強制使用MSP:這是一個很方便的設計,由于TaskSwitch在中斷中進行,中斷時使用原指針入棧,即使用某個進程的堆棧,在TaskSwitch中,將會把堆棧指針換成另一個進程的堆棧,下一次切換回當前進程時,就似乎只是從前一次的ISR中返回一樣,在進程眼中并沒有什么區別。

  • 線程中應使用PSP:由于ISR中可能會有堆棧操作以保存R4--R11的值,如果進程與ISR使用同一個指針,那么意味著必須在進入ISR以后馬上切換SP到應有的位置,而不是使用原來的進程SP,這樣使得C語言寫的終端服務可能出現問題。為了使得TaskSwitch與中斷相對獨立,即只要在中斷中調用就行,與調用的位置以及在那個ISR調用中無關,那么就應該使用兩個SP,這樣使得ISR仍然可以使用C來寫,只把TaskSwitch部分用匯編寫,TaskSwitch部分負責修改PSP 的值,其實只有一句話需要使用匯編寫,只需提供一個C的接口即可。
  • TaskSwitch在cortex中的實現:
    1. 其基本思想在于利用中斷的自動入棧與出棧,由于出棧入棧時存入了PC,使得切換任務是可以簡單的切換堆棧指針,使其自動出棧,回復PC的值,跳轉到響應的task。
    2. 堆棧內容:{R0,R1,R2,R3,R12,LR,PC,PSR}
    3. 假設兩個task: task1,task2,初始時:task1Stack:{0,0,0,0,0,0,task1,0},task1Stack:{0,0,0,0,0,0,task2,0}
    4. 系統初始化,模擬一次中斷返回自動出棧,假設在task1上執行:task1Stack:{},task1Stack:{0,0,0,0,0,0,task2,0}
    5. 此后PSP為task1棧基址,使用PSP,直接修改PC到task1,此后開始運行task1
    6. 中斷發生,自動入棧到task1堆棧中,此時為handler,修改psp到task2棧,中斷返回,返回時自動出棧,將使用task2的棧,恢復了task2在前一次中斷的狀態,在task2看來并沒有進入task1,而是簡單的近中斷,然后中斷返回。此后循環上述過程。可用下圖抽象。
  • 關閉窗口

    相關文章

    主站蜘蛛池模板: 一级片在线视频 | 日本 欧美 三级 高清 视频 | 久久福利电影 | 亚洲精品久久久久中文字幕欢迎你 | 久久午夜视频 | 久久久久久一区 | 亚洲精品一区二三区不卡 | 久久久www成人免费精品张筱雨 | 999久久久久久久久6666 | 国产精品综合色区在线观看 | 亚洲欧美日韩精品 | 国产精品久久国产精品久久 | 久久精品日产第一区二区三区 | 人人干人人干人人干 | 久久久精 | 天天人人精品 | 精品一二区 | 久久神马 | 91在线精品秘密一区二区 | 成人av在线网站 | 欧美一区二区三区在线 | 91最新在线视频 | 国产精品区二区三区日本 | 亚洲精品一区二三区不卡 | 日韩成人一区 | 西西裸体做爰视频 | 国产成人久久精品 | 91久久国产精品 | 欧美视频一区二区三区 | 成人精品在线观看 | 九九九久久国产免费 | 久草免费视 | 国产视频一区在线 | 国产精品一区二区久久 | 国产高清精品一区二区三区 | 亚洲高清av在线 | 久久蜜桃av一区二区天堂 | 欧美日韩大片 | 色av一区| 日本高清aⅴ毛片免费 | 国产伦精品一区二区三区照片91 |