亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? arm_00_os_taskswitch.c

?? 一個基于arm的
?? C
?? 第 1 頁 / 共 2 頁
字號:
   }
   
  TimeOfTaskStart=T0VAL;  //保存當前T0VAL的值
  
  OSCurrentPcb=OSReadyList;   //當前進程控制塊設置為就緒態任務列表中的第一個。它是優先級最高的就緒任務。


  OSResumeSP();     //恢復出堆棧指針{}

  __asm LDMIA R0!,{R4-R12} //將R4-R12從用戶堆棧中恢復
  __asm MOV R2,R8         //將R8保存到R2中{}
  __asm MOV R3,R12        //將R12保存到R3中{}
  __asm LDMIA R0!,{R14}^   //恢復用戶模式下的R14


  __asm LDMIA R0!,{R1}  //將用戶堆棧中的SPSR彈出到R1中

  __asm ADD SP,SP,#24  //調整特權模式下的SP,使SP指向堆棧中返回地址的前一個位置{}
  
  __asm ADD R0,R0,#16  //調整R0,使R0指向用戶棧中的返回地址{}
  
  __asm LDMIA R0!,{R12}  //將用戶棧中的返回地址彈出至R12{}

  __asm STMDB SP!,{R2,R3,R12}  //R2中保存的是R8,R3中保存的是R12,R12中保存的是返回地址
                                //將它們壓入到特權模式下的堆棧中
  
  __asm SUB R8,R0,#20     //調整用戶模式下的堆棧并將其保存至R8{}
  
  __asm SUB SP,SP,#4      //{}調整SP,使其指向堆棧中的SPSR前一個位置
  __asm STMDB SP!,{R1}    //{}R1中保存的是SPSR,將其壓入堆棧中
  __asm ADD SP,SP,#8      //{}調整回SP
  
  __asm LDMIA R8!,{R0-R3}   //將R0-R3彈出  
  
  __asm STMDB SP!,{R3}   //R3的值壓入特權模式下的堆棧中
  
  __asm SUB SP,SP,#8     //調整回SP,使其指向正確的位置
                                  
  
  __asm ADD R8,R8,#4       //調整R8{}
  
  __asm STMDB SP,{R8}     //將R8入棧,R8中保存的是堆棧指針,要將其恢復到用戶模式下的SP中。但并未更新SP的值。
  
  __asm SUB R8,SP,#4       //{}將特權模式下的SP-4的值放入到R3中,因為不能直接使用SP,要借用R8作為堆棧指針。
                           //-4是因為剛剛未更新SP的值。
  
  __asm LDMIA R8,{SP}^    //將剛壓入的用戶模式下的堆棧指針彈出至用戶模式下的SP中。
  __asm NOP                //{}加入一個空操作,在特權模式下訪問用戶模式下的SP后,后面不能緊跟訪問備份寄存器的操作
}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:FIQ中斷服務程序。
入口參數:無。
返回:無。
備注:時鐘節拍在此產生,修改這里的代碼是要注意,可能會導致程序跑飛。
**********************************************************************************************/
void FIQ_Handler(void) __fiq   //FIQ中斷服務程序
{
//函數進來時,編譯器會自動將R0-R3,R14壓入堆棧

 if(FIQSTA & TIMER0)	   //讀取FIQ中斷狀態,判斷FIQ中斷源。這里為定時器0中斷。
  {
   OSpcb *  TempDelayPcb;   //臨時用的進程控制塊,查找延遲列表時使用。
   OSpcb *  TempReadyPcb;   //臨時用的進程控制塊,查找就緒列表時使用。
  
   uint32 DeleteFirstFlag;  //是否刪除表頭的標志
  
   T0CLRI=0;		  //清定時器0中斷
  
   __asm MOV R0,SP   //將FIQ模式下的SP移入R0{}
   __asm STMDB R0!,{SP}^  //將用戶模式下的堆棧指針SP壓入FIQ的堆棧
   __asm NOP        //插入一個NOP指令。在訪問用戶模式下的寄存器后,后面不能緊跟訪問備份寄存器的指令,所以插入一個NOP指令{}
   __asm MOV SP,R0  //將R0放回SP中{}
  
   __asm LDMIA SP!,{R0}  //將用戶模式下的SP彈出至R0
  
  
   __asm ADD SP,SP,#16   //{}調整堆棧指針SP,使其指向堆棧中的返回地址
  
   __asm LDMDA SP!,{R8}  //{}將返回地址彈出到R8中
   __asm SUB R8,R8,#4    //{}因為FIQ發生時,PC已經更新,所以要減去4,使其指向中斷發生時的下一條指令。
   __asm STMDB R0!,{R8}  //將返回地址壓入用戶堆棧中
 
   __asm LDMDA SP!,{R8}  //將R3彈出至R8中
   __asm STMDB R0!,{R8}  //將被彈出的R3壓入到用戶堆棧中
  
   __asm LDMDA SP!,{R8}  //將R2彈出至R8中
   __asm STMDB R0!,{R8}  //將被彈出的R2壓入到用戶堆棧中
  
   __asm LDMDA SP!,{R8}  //將R1彈出至R8中
   __asm STMDB R0!,{R8}  //將被彈出的R1壓入到用戶堆棧中
  
   __asm LDMDA SP,{R8}   //將R0彈出至R8中
   __asm STMDB R0!,{R8}  //將被彈出的R0壓入到用戶堆棧中
  
   __asm ADD SP,SP,#20   //調整堆棧指針,使其指向進入中斷前的位置{}
  
   __asm MRS R8,SPSR     //將SPSR放入R8中。SPSR用來恢復CPSR{}
   __asm STMDB R0!,{R8}  //將SPSR壓入到用戶堆棧中

   __asm STMDB R0!,{R4-R12,R14}^ //將用戶模式下的R4-R12,R14壓入到用戶堆棧中
  
   __asm BL OSSaveSP     //保存堆棧指針
 
   if(TimeOfTaskStart<=T0VAL)   //T0VAL是計數器0的值。T0VAL的值是減小的。如果T0VAL大于或者等于上一次的值,則說明已經溢出
    {
     OSCurrentPcb->RunTimeInThisRefreshPeriod+=TimeOfTaskStart+MaxOfTimer0+1-T0VAL;   //計算時間差
    }
   else
    {
     OSCurrentPcb->RunTimeInThisRefreshPeriod+=TimeOfTaskStart-T0VAL;  //計算時間差
    }
   
   TimeOfTaskStart=T0VAL;   //保存當前T0VAL的值
   
  
   TempDelayPcb=OSDelayList;   //從延時列表的表頭開始查找

   while(TempDelayPcb->Next)   //直到查到表尾
    {
     TempDelayPcb->Delay--;    //延遲列表中的任務延遲數,減1
     DeleteFirstFlag=0;        //刪除表頭的標志清0
     if(TempDelayPcb->Delay==0)  //如果延時的任務時間到,則
      {
       TempDelayPcb->Status=OSInReadyStatus;
       TempReadyPcb=OSReadyList;  //將就緒表表頭放入TempReadyPcb中,從表頭開始查找
       while(1)
        {
         if((TempDelayPcb->Priority)<=(TempReadyPcb->Priority)) //如果被喚醒的任務的優先級比被查找的就緒表中的任務的優先級高
          {		   
           if(TempDelayPcb==OSDelayList)  //如果被喚醒的任務處于延時列表的表頭
            {
             OSDelayList=TempDelayPcb->Next;   //延時列表的表頭指向被喚醒的任務的下一個
             OSDelayList->Prior=OSDelayList;   //延時列表的前趨指向自己
             DeleteFirstFlag=1;                //設置表頭被刪除的標志
            }
           else   //如果被喚醒的任務不處于延時列表的表頭
            {
             TempDelayPcb->Next->Prior=TempDelayPcb->Prior;  //被喚醒任務的下一個任務的前一個任務指向被喚醒任務的前一個任務
             TempDelayPcb->Prior->Next=TempDelayPcb->Next;   //被喚醒任務的前一個任務的下一個任務指向被喚醒任務的下一個任務
            }
           if(TempReadyPcb==OSReadyList)  //如果被喚醒的任務要插入到就緒任務列表的表頭
            {
             OSReadyList=TempDelayPcb;     //就緒列表的表頭設置為被喚醒的任務
             OSReadyList->Prior=OSReadyList;  //就緒列表的表頭的前趨指向自己
            }
           else     //如果被喚醒的任務不是被插入到表頭
            {
             //則將被喚醒的任務,插入到就緒表中
             //被喚醒的任務被插在TempReadyPcb之前
             TempReadyPcb->Prior->Next=TempDelayPcb;   //TempReadyPcb的前趨的后趨設置為被喚醒的任務
             TempDelayPcb->Prior=TempReadyPcb->Prior;	//被喚醒的任務的前趨設置為TempReadyPcb的前趨								 		     
            }
           TempReadyPcb->Prior=TempDelayPcb;      //TempReadyPcb的前趨設置為被喚醒的任務
           TempDelayPcb=TempDelayPcb->Next->Prior; //將TempDelayPcb被設置為被喚醒任務的前一個任務
           TempReadyPcb->Prior->Next=TempReadyPcb;  //因為TempReadyPcb->Prior等于TempDelayPcb,所以相當于
		                                            //TempDelayPcb=TempReadyPcb。即被喚醒任務的后趨被置為TempReadyPcb。
           break;
          }
         if(TempReadyPcb->Next==(OSpcb *)0)break;   //如果已經查找到就緒表的尾部,則退出
         TempReadyPcb=TempReadyPcb->Next;   //TempReadyPcb移到下一個
        }
      }
     if(DeleteFirstFlag)  //如果剛剛被喚醒的任務處于延時列表的表頭,則
      {
       TempDelayPcb=OSDelayList;  //TempDelayPcb指向延時列表的表頭
      }
     else
      {
       TempDelayPcb=TempDelayPcb->Next;   //TempDelayPcb設置為下一個
      }
    }
   
   if((OSCurrentPcb->Status)==OSInReadyStatus)   //如果當前任務處于就緒態
    {
     if((OSCurrentPcb->Next)!=0)  //如果當前任務不是空閑任務
      {
       if((OSCurrentPcb->Priority)==(OSCurrentPcb->Next->Priority))   //如果當前任務的優先級跟它的下一個就緒態任務的優先級一樣
        {
         OSCurrentPcb=OSCurrentPcb->Next;   //則切換到下一個任務,實現時間片輪循調度
        }
       else   //如果不相等
        {
         OSCurrentPcb=OSReadyList;   //則將就緒表的表頭的任務做為運行任務
        }
      }	  
     else   //如果當前任務是空閑任務
      {
       OSCurrentPcb=OSReadyList;  //則將就緒表的表頭的任務做為運行任務
      }
	}
   else //如果當前任務被掛起或者延時了,
    {
     OSCurrentPcb=OSReadyList; //則將就緒表的表頭的任務做為運行任務
    }


   OSResumeSP();           //恢復出任務堆棧指針
  

   __asm LDMIA R0!,{R4-R12,R14}^  //恢復出R4-R12,R14

   __asm LDMIA R0!,{R8}  //將SPSR出棧至R8
   __asm MSR SPSR_fsxc,R8  //將R8寫入SPSR。在函數返回時,以恢復CPSR{}
  
   __asm ADD R0,R0,#16   //調整堆棧指針,使其指向堆棧中的返回地址{}
 
   __asm LDMDA R0!,{R8}  //返回地址彈出至R8
   __asm ADD R8,R8,#4    //由于函數返回時,編譯器會自動將返回地址減4后才返回,所以事先加上4{}
   __asm STMDB SP!,{R8}  //將返回地址壓入到FIQ的堆棧中
   
   __asm LDMDA R0!,{R8}  //將R3彈出至R8
   __asm STMDB SP!,{R8}  //將剛彈出的R3,壓入FIQ的堆棧中
  
   __asm LDMDA R0!,{R8}  //將R2彈出至R8
   __asm STMDB SP!,{R8}  //將剛彈出的R2,壓入FIQ的堆棧中

   __asm LDMDA R0!,{R8}  //將R1彈出至R8
   __asm STMDB SP!,{R8}  //將剛彈出的R1,壓入FIQ的堆棧中

   __asm LDMDA R0!,{R8}  //將R0彈出至R8
   __asm STMDB SP!,{R8}  //將剛彈出的R0,壓入FIQ的堆棧中
  
   __asm ADD R0,R0,#24     //{}將R0調整到出棧后的值。R0作為堆棧地址用。
  
  
   __asm STMDB SP,{R0}   //將堆棧地址暫時壓入FIQ的堆棧中。不更新SP,所以下面需要-4操作。
   
   __asm SUB R0,SP,#4     //將SP-4放入R0中,借用R0來壓棧,因為訪問用戶模式下的寄存器時,不能訪問備份寄存器{}
   __asm LDMIA R0,{SP}^   //將堆棧指針彈出至用戶模式下的堆棧指針中
   __asm NOP              //{}加入一個空操作,在特權模式下訪問用戶模式下的SP后,后面不能緊跟訪問備份寄存器的操作  
   return;
  }
}
//////////////////////////////////End of function//////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久夜色精品国产网站| 精品久久国产97色综合| 欧美日韩精品是欧美日韩精品| 8x福利精品第一导航| 国产精品精品国产色婷婷| 美日韩一区二区| 色综合久久久网| 国产视频在线观看一区二区三区 | 久久只精品国产| 亚洲激情欧美激情| 不卡视频一二三| 精品国产三级a在线观看| 亚洲欧洲成人自拍| 国产一区二区三区免费在线观看| 欧美艳星brazzers| 亚洲精品免费在线播放| 国产一本一道久久香蕉| 在线电影一区二区三区| 亚洲欧美成aⅴ人在线观看| 国产精品一区二区在线观看不卡| 在线不卡免费欧美| 亚洲精品日产精品乱码不卡| 成人午夜伦理影院| 久久综合国产精品| 麻豆国产精品777777在线| 欧美精品三级在线观看| 一区二区三区免费在线观看| 91小视频在线| 亚洲欧美精品午睡沙发| 欧美日韩一区国产| 中文字幕日韩一区| av在线一区二区三区| 国产精品久久久久三级| 成人自拍视频在线观看| 国产午夜精品理论片a级大结局 | 精品国产网站在线观看| 久久99国产精品久久99| 精品国产一区久久| 国产成人午夜视频| 亚洲国产精品激情在线观看| 成人免费av资源| 国产精品剧情在线亚洲| www.欧美日韩国产在线| 亚洲欧洲日韩女同| 欧美在线影院一区二区| 首页综合国产亚洲丝袜| 日韩欧美国产精品| 国产精品一二二区| 亚洲国产高清aⅴ视频| 91免费国产视频网站| 亚洲男人电影天堂| 欧美日韩亚洲不卡| 久久国产精品无码网站| 中国av一区二区三区| 色综合久久久久综合99| 亚洲成a人v欧美综合天堂下载| 欧美精品在线一区二区三区| 久久精品国产第一区二区三区| 精品入口麻豆88视频| 国产成人免费视频| 亚洲免费观看在线视频| 5858s免费视频成人| 国产老妇另类xxxxx| 亚洲男人的天堂在线观看| 91精品在线观看入口| 国产九色sp调教91| 一区二区视频免费在线观看| 在线不卡的av| 丁香六月综合激情| 午夜精品福利视频网站| 久久精品人人做人人爽人人| 91激情五月电影| 久久不见久久见免费视频7 | 国产日韩一级二级三级| 成人伦理片在线| 亚洲成人精品一区二区| 久久麻豆一区二区| 色香蕉久久蜜桃| 精品中文字幕一区二区| 一区二区三区国产精华| 久久久久久久久久久黄色| 欧美日韩一区二区欧美激情| 国产大陆亚洲精品国产| 亚洲线精品一区二区三区八戒| 久久久欧美精品sm网站| 欧美人与禽zozo性伦| 本田岬高潮一区二区三区| 免费观看在线综合色| 一二三四区精品视频| 国产欧美一二三区| 欧美一区二区三区四区五区| 色综合咪咪久久| 成人午夜激情视频| 麻豆成人久久精品二区三区红 | 欧美高清视频在线高清观看mv色露露十八 | 日韩一区欧美小说| 久久久高清一区二区三区| 欧美日韩国产bt| 97精品电影院| 波多野结衣视频一区| 极品少妇xxxx偷拍精品少妇| 亚洲成a人片在线不卡一二三区| 亚洲午夜av在线| 国产精品乱码一区二三区小蝌蚪| 日韩精品一区二区三区在线| 日本大香伊一区二区三区| 成人午夜激情视频| 国产成人av一区二区三区在线观看| 日本不卡高清视频| 婷婷激情综合网| 亚洲国产精品久久一线不卡| 一区二区三区四区视频精品免费| 国产精品久久久久aaaa樱花| 中文字幕电影一区| 国产午夜亚洲精品理论片色戒| www成人在线观看| 精品福利一二区| 精品福利在线导航| 精品对白一区国产伦| 欧美sm美女调教| 欧美mv日韩mv亚洲| 欧美videos中文字幕| 久久亚洲综合色| xnxx国产精品| 欧美高清在线精品一区| 国产色一区二区| 中文字幕一区二区三区在线观看 | 天天影视网天天综合色在线播放| 舔着乳尖日韩一区| 日韩精品一级中文字幕精品视频免费观看 | 中文字幕综合网| 一区二区三区四区av| 亚洲一区二区三区影院| 无吗不卡中文字幕| 蜜臀av亚洲一区中文字幕| 精品一区二区三区久久久| 狠狠色狠狠色合久久伊人| 国产一区 二区 三区一级| 成人永久免费视频| 色综合天天综合在线视频| 欧美三级乱人伦电影| 欧美成人a在线| 国产精品日产欧美久久久久| 一区二区免费看| 捆绑调教美女网站视频一区| 国产精品99久久久久久久vr| 91视频观看免费| 欧美一区二区播放| 亚洲国产成人午夜在线一区 | 在线观看亚洲精品视频| 91精品久久久久久蜜臀| 国产欧美一区在线| 亚洲自拍偷拍网站| 国产一区二区三区美女| 色婷婷久久久亚洲一区二区三区| 在线综合视频播放| 中文字幕欧美三区| 日韩精品国产精品| 成人h精品动漫一区二区三区| 欧美日韩dvd在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲777理论| 成人精品小蝌蚪| 日韩一区二区三区高清免费看看| 国产精品成人免费精品自在线观看| 亚洲伊人色欲综合网| 福利一区二区在线| 日韩三级在线免费观看| 亚洲精品国产精品乱码不99 | 国产精品麻豆99久久久久久| 亚洲成人一区在线| 成人av资源在线观看| 欧美一卡二卡在线观看| 亚洲制服欧美中文字幕中文字幕| 国产一区在线视频| 欧美精品一二三区| 亚洲日本va午夜在线电影| 国产精品18久久久久久久久| 欧美妇女性影城| 一卡二卡欧美日韩| aaa亚洲精品一二三区| 26uuu国产电影一区二区| 日韩精品三区四区| 欧美日韩国产综合一区二区| 亚洲男人的天堂网| gogo大胆日本视频一区| 久久久蜜臀国产一区二区| 黑人精品欧美一区二区蜜桃| 欧美精品日韩精品| 亚洲第一会所有码转帖| 在线精品亚洲一区二区不卡| 国产精品国产三级国产三级人妇| 国产成人精品一区二区三区网站观看| 日韩一区二区免费在线电影| 亚洲成av人片在线| 欧美日韩一区二区电影| 亚洲国产欧美日韩另类综合| 色婷婷亚洲精品| 一区二区三区精品在线观看| 色婷婷av久久久久久久|