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

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

?? arm_00_os_taskswitch.c

?? 一個基于arm的
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**********************************************************************************************
本程序只供學習使用,不得用于其它任何用途,否則后果自負。

  ARM_00_OS_TaskSwitch.c file
  
  注意:該文件必須設置為ARM模式。
  
  作者:Computer-lov
  建立日期:2006-5-1
  修改日期:2006-5-16
  版本:V1.0
  版權所有,盜版必究。
  任何技術問題可到我的博客上留言:    http://computer00.21ic.org
  Copyright(C) Computer-lov 2006-2016
  All rights reserved
**********************************************************************************************/

#include <ADuC7027.H>
#include "My_type.h"
#include "LED.H"
#include "UART.H"
#include "KEYS.H"
#include "interrupt.h"
#include "ARM_00_OS_Core.H"
#include "ARM_00_OS_TaskSwitch.H"

/**********************************************************************************************
功能:禁止中斷。
入口參數1:DisEnabledBit。即CPSR中對應的I位和Q位。
           頭文件中有定義,#define OS_I_Bit 0x80 #define OS_F_Bit 0x40
		   關IRQ中斷時,使用OS_I_Bit,關FIQ中斷時,使用OS_F_Bit。
		   兩個都關時,將兩者按位或,即 OS_I_Bit | OS_F_Bit
返回:無。
使用資源:使用軟中斷號0。
備注:使用了內嵌的ARM指令,該函數所在的文件必須設置為ARM模式。
**********************************************************************************************/
void DisEnableInterrupt(uint32 DisEnableBit) __swi(0)
{
 __asm LDMIA SP!,{R8}     //堆棧中保存的是SPSR寄存器(參看SWI_VEC.s文件),將其彈出至R8中。
 __asm ORR R8,R8,R0,LSL #0  //R8中的值,跟傳遞進來的DisEnableBit(被放在R0中)相或。{}
 __asm STMDB SP!,{R8}        //將設置好的SPSR寄存器,壓回堆棧

 DisEnableBit=0;            //防止編譯器警告。請不要刪除該語句。如果刪除該語句,編譯器可能會刪除某些語句
                            //從而導致程序運行錯誤
}
//////////////////////////////////End of function//////////////////////////////////////////////



/**********************************************************************************************
功能:使能中斷。
入口參數1:EnabledBit。即CPSR中對應的I位和Q位。
           頭文件中有定義,#define OS_I_Bit 0x80 #define OS_F_Bit 0x40
		   關IRQ中斷時,使用OS_I_Bit,關FIQ中斷時,使用OS_F_Bit。
		   兩個都關時,將兩者按位或,即 OS_I_Bit | OS_F_Bit
返回:無。
使用資源:使用軟中斷號1。
備注:使用了內嵌的ARM指令,該函數所在的文件必須設置為ARM模式。
**********************************************************************************************/
void EnableInterrupt(uint32 EnableBit) __swi(1)
{
 __asm LDMIA SP!,{R8}  //堆棧中保存的是SPSR寄存器(參看SWI_VEC.s文件),將其彈出至R8中
 __asm MVN R0,R0       //EnableBit(被放在R0中)取反
 __asm AND R8,R8,R0    //R8中的值,跟R0相與{} 
 __asm STMDB SP!,{R8}  //將設置好的SPSR寄存器,壓回堆棧
 

 EnableBit=0;            //防止編譯器警告。請不要刪除該語句

}
//////////////////////////////////End of function//////////////////////////////////////////////



/**********************************************************************************************
功能:啟動操作系統。
入口參數1:AddrOfSystemIdle。必須設置為系統空閑任務的入口地址。系統啟動后,從系統空閑任務開始運行。
入口參數2:Mode。系統空閑任務代碼的模式。可以選擇ARM_MODE或者THUMB_MODE。
返回:無。
使用資源:使用軟中斷號2。
備注:使用了內嵌的ARM指令,該函數所在的文件必須設置為ARM模式。系統啟動后,進入系統空閑任務。
**********************************************************************************************/
void OSStart(uint32 AddrOfSystemIdle,uint32 Mode) __swi(2)
{
 __asm ADD SP,SP,#20     //{}調整SP,使其指向返回地址的前一個字
 __asm STMDB SP,{R0}    //將入口地址壓入堆棧中的返回地址處
 
 __asm SUB SP,SP,#20    //{}將堆棧指針調回
 
 __asm LDMIA SP!,{R8}   //將SPSR彈出,放入R8中

 Mode|=~(0x20);         //將傳遞進來的Mode其它位設置為1,只保留T位
 
 __asm ORR R8,R8,#0x20  //將SPSR中的T位設置為1{}
 __asm AND R8,R8,R1     //將SPSR的值與Mode相與。從而T位跟Mode的T位相同{}
 
 __asm STMDB SP!,{R8}   //將SPSR壓回棧中
 
 
 OSCurrentPcb=&OSSystemIdlePcb;   //當前任務為系統空閑任務

 AddrOfSystemIdle=0;              //防止編譯器警告。請不要刪除該語句

}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:保存堆棧指針。堆棧指針被保存在當前任務的TaskSP成員中。
入口參數1:sp。當前任務堆棧指針的地址值。
返回:無。
備注:sp由R0寄存器傳入。
**********************************************************************************************/
void OSSaveSP(uint32 sp)
{
 OSCurrentPcb->TaskSP=sp;  //保存當前堆棧指針
}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:恢復堆棧指針。將當前任務的堆棧指針恢復。
入口參數1:無。
返回:堆棧指針的地址值。被保存在R0中。
備注:無。
**********************************************************************************************/
uint32 OSResumeSP(void)
{
 return OSCurrentPcb->TaskSP;    //將堆棧指針的地址值返回
}
//////////////////////////////////End of function//////////////////////////////////////////////

/**********************************************************************************************
功能:設置堆棧。任務創建時,要設置好其堆棧,使其看起來,就像任務剛被切換的任務一樣。
入口參數1:StackAddr。32位的堆棧入口地址值,堆棧是往下生長的,所以入口地址應該是堆棧區的最高地址。
入口參數2:TaskEntryAddr。32位的任務入口地址值。
入口參數3:Mode。被創建任務代碼的模式。可選擇為OS_ARM_MODE或者OS_THUMB_MODE。
返回:32位的堆棧地址。被壓入堆棧后,堆棧指針會更新。
使用資源:使用軟中斷號4。
備注:無。
**********************************************************************************************/
uint32 OSSetStack(uint32 StackAddr,uint32 TaskEntryAddr,uint32 Mode) __swi(4)
{
#define PushedBytes (16*4)    //壓入了16個字,共64字節
 //R0中保存的是堆棧入口地址
 __asm MOV R12,R0        //{}StackAddr傳進時,被放在了R0中。將R0轉存至R12中。
 __asm STMDB R12!,{R3}    //入口地址被TaskEntryAddr被編譯器轉移至R3中。將R3壓棧
 __asm MOV R8,#0         //{}R8清零
 __asm STMDB R12!,{R8}   //該位置保存的是R3。將其清0。
 __asm STMDB R12!,{R8}   //該位置保存的是R2。將其清0。
 __asm STMDB R12!,{R8}   //該位置保存的是R1。將其清0。
 __asm STMDB R12!,{R8}   //該位置保存的是R0。將其清0。
 
 __asm LDMIA SP,{R8}     //將剛壓入的SPSR(見SWI_VEC.S文件)出棧至R8中。


 Mode|=~(0x20);          //將Mode的其它位置1,只保留T位。
 __asm ORR R8,R8,#0x20   //將SPSR中的T位置1。
 __asm AND R8,R8,R2      //將SPSR的值與Mode相與。從而T位跟Mode的T位相同{}
 
 __asm STMDB R12!,{R8}   //將SPSR壓棧。任務被調度時,SPSR將被返回至CPSR。 
 
 __asm MOV R8,#0         //R8清0{}
 
 __asm STMDB R12!,{R8}  //該位置保存的是用戶模式下的R14。將其清0。
 
 __asm STMDB R12!,{R8}  //該位置保存的是R12。將其清0。
 __asm STMDB R12!,{R8}  //該位置保存的是R11。將其清0。
 __asm STMDB R12!,{R8}  //該位置保存的是R10。將其清0。
 __asm STMDB R12!,{R8}  //該位置保存的是9。將其清0。
 __asm STMDB R12!,{R8}  //該位置保存的是R8。將其清0。
 __asm STMDB R12!,{R8}  //該位置保存的是R7。將其清0。
 __asm STMDB R12!,{R8}  //該位置保存的是R6。將其清0。
 __asm STMDB R12!,{R8}  //該位置保存的是R5。將其清0。
 __asm STMDB R12!,{R8}  //該位置保存的是R4。將其清0。

 TaskEntryAddr=0;       //防止編譯器警告。請不要刪除該語句。

 return StackAddr-PushedBytes;   //返回堆棧指針
}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:切換任務。任務被切換到優先級最高的就緒態任務。
入口參數:無。
返回:無。
使用資源:使用軟中斷號3。
備注:該函數為任務切換函數,修改這里的代碼是要注意,可能會導致跑飛。
**********************************************************************************************/
void OSTaskSwitch(void) __swi(3)
{
//將用戶模式下的堆棧地址裝入到R8中
 __asm MOV R8,SP         //{}特權模式下的堆棧指針暫時放到R8{}
 __asm STMDB R8!,{R13}^  //將用戶模式下的堆棧指針R13放入到特權模式下的堆棧中{}
 __asm NOP               //插入一個NOP指令,在訪問用戶模式下的寄存器后,后面不能緊跟訪問備份寄存器的指令,所以插入一個NOP指令{}
 __asm MOV SP,R8         //剛剛是借用R8來訪問堆棧的,R8被更新后,應該將其寫回SP中{}
  
 __asm LDMIA SP!,{R8}    //將剛壓入的用戶堆棧地址彈出至R8
  
  
 __asm ADD SP,SP,#20   //{}調整SP的值,使SP指向堆棧內的返回地址。堆棧的結構:返回地址,R12,R8,R3,SPSR,R14。當前的SP指向R14
                       //調整后,SP指向返回地址 
  
 __asm LDMDA SP!,{R12}  //{}將返回地址彈出至R12
 
 __asm STMDB R8!,{R12}  //將返回地址壓入用戶棧

 __asm STMDB R8!,{R0-R3} //將R0-R3壓入用戶棧

 __asm LDMDA SP!,{R3}    //彈出R12放入到R3中

 __asm LDMDA SP!,{R2}    //彈出R8放入到R2中

 __asm SUB SP,SP,#4      //跳過被壓入的R3,這里未用到{}
 
 __asm LDMDA SP!,{R1}   //彈出SPSR放入到R1中

 __asm MOV R0,R8     //R8是堆棧地址,轉存到R0{}

 __asm STMDB R0!,{R1} //{}R1在SPSR中,將其壓入用戶堆棧中


 __asm STMDB R0!,{R14}^  //將用戶模式下的R14壓入用戶堆棧中
 __asm MOV R8,R2         //R2中保存的是R8,將其放入R8中{}
 __asm MOV R12,R3        //R3中保存的是R12,將其放入R12{}
 __asm STMDB R0!,{R4-R12} //將R4-R12壓入用戶堆棧中


 __asm BL OSSaveSP   //保存堆棧指針{}

  if(TimeOfTaskStart<T0VAL)   //T0VAL是計數器0的值。T0VAL的值是減小的。如果T0VAL大于上一次的值,則說明已經溢出
   {
    OSCurrentPcb->RunTimeInThisRefreshPeriod+=TimeOfTaskStart+MaxOfTimer0+1-T0VAL;  //計算時間差
   }
  else  //否則
   {
    OSCurrentPcb->RunTimeInThisRefreshPeriod+=TimeOfTaskStart-T0VAL;   //計算時間差

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美私人免费视频| 久久成人免费日本黄色| 国产日产欧美一区| 久久你懂得1024| 精品国产不卡一区二区三区| 日韩三级电影网址| 精品精品欲导航| 26uuu亚洲综合色| 久久久.com| 欧美国产丝袜视频| 亚洲黄网站在线观看| 亚洲成a人片综合在线| 视频一区在线视频| 久久99热狠狠色一区二区| 精东粉嫩av免费一区二区三区| 免费久久99精品国产| 久久99精品久久久久| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲一区二区三区四区在线观看| 亚洲蜜桃精久久久久久久| 一区二区日韩电影| 久久精品国产一区二区| 国产suv精品一区二区6| 色综合网站在线| 欧美久久一区二区| 久久欧美中文字幕| 一区二区三区在线视频观看 | 国产亚洲人成网站| 亚洲免费观看高清| 日韩av一区二区三区四区| 国产999精品久久久久久绿帽| 色狠狠综合天天综合综合| 日韩欧美在线综合网| 亚洲精品中文字幕在线观看| 蜜桃久久久久久久| 91片在线免费观看| 久久久亚洲精品一区二区三区| 亚洲色图色小说| 久久se这里有精品| 欧美亚洲国产一区二区三区 | 欧美日韩不卡一区二区| 久久女同精品一区二区| 亚洲一本大道在线| 成人午夜免费电影| 欧美变态tickle挠乳网站| 亚洲天天做日日做天天谢日日欢 | 欧美一区二区精品在线| 综合自拍亚洲综合图不卡区| 老司机午夜精品| 色屁屁一区二区| 国产日产精品1区| 久久99久久99小草精品免视看| 欧美自拍丝袜亚洲| 亚洲丝袜精品丝袜在线| 国产成人超碰人人澡人人澡| 欧美一区二区三区公司| 亚洲一级二级在线| 色偷偷成人一区二区三区91 | 青青草成人在线观看| 91高清视频在线| 亚洲日本va午夜在线影院| 国产电影一区二区三区| 久久香蕉国产线看观看99| 日本不卡不码高清免费观看| 欧美色男人天堂| 亚洲激情自拍偷拍| 91黄色免费网站| 一区二区三区小说| 色成人在线视频| 一区二区三区四区高清精品免费观看 | 一区二区三区欧美| 成人激情校园春色| 一区精品在线播放| av一二三不卡影片| 一区在线中文字幕| 色94色欧美sute亚洲线路二| 亚洲精品久久久蜜桃| 日本二三区不卡| 亚洲综合丝袜美腿| 69久久夜色精品国产69蝌蚪网| 日韩不卡免费视频| 精品国产免费视频| 国产.欧美.日韩| 国产精品久久久久影院老司 | 欧美美女直播网站| 亚洲成在人线免费| 日韩一区二区电影在线| 国产伦精品一区二区三区视频青涩| 精品久久国产字幕高潮| 国产99久久久精品| 亚洲女厕所小便bbb| 欧美丰满高潮xxxx喷水动漫| 蜜臂av日日欢夜夜爽一区| 亚洲精品一区二区三区四区高清 | 在线不卡a资源高清| 久久精品久久精品| 国产精品久久久久久久久免费樱桃 | 国产精品久久一卡二卡| 91福利精品第一导航| 久久成人免费日本黄色| 国产精品国产三级国产有无不卡 | 国产乱码精品一区二区三区av| 欧美高清一级片在线观看| 91福利在线播放| 黄色成人免费在线| 一区二区视频在线看| 日韩免费看网站| 色综合久久综合网| 国产在线不卡一区| 亚洲一线二线三线久久久| 精品第一国产综合精品aⅴ| 99re6这里只有精品视频在线观看| 亚洲成人免费看| 国产精品国产三级国产有无不卡 | 国产日韩精品一区二区三区 | 91蝌蚪porny| 久久精品国产久精国产| 亚洲免费看黄网站| 2019国产精品| 69成人精品免费视频| 99久久精品国产导航| 精品一区二区综合| 亚洲综合清纯丝袜自拍| 国产精品福利电影一区二区三区四区| 欧美日韩视频一区二区| 99麻豆久久久国产精品免费| 麻豆精品新av中文字幕| 亚洲国产乱码最新视频| 成人免费一区二区三区视频 | 理论电影国产精品| 亚洲高清在线精品| 亚洲激情自拍偷拍| 中文字幕乱码亚洲精品一区| 日韩小视频在线观看专区| 欧美日韩在线免费视频| 色综合天天综合色综合av| 国产91清纯白嫩初高中在线观看 | 亚洲综合免费观看高清在线观看| 久久九九99视频| 精品国产乱码久久久久久浪潮 | 久久久精品日韩欧美| 日韩视频免费观看高清完整版| 在线观看不卡视频| 色综合久久88色综合天天免费| 不卡大黄网站免费看| 99久久精品国产麻豆演员表| 成人丝袜高跟foot| 国产不卡在线一区| 懂色av一区二区三区免费看| 国产xxx精品视频大全| 国产成人精品免费| 成人动漫视频在线| 99精品视频一区二区三区| 99麻豆久久久国产精品免费 | 国内久久精品视频| 麻豆91精品视频| 国产在线国偷精品免费看| 国产乱人伦偷精品视频免下载| 九色综合国产一区二区三区| 激情欧美日韩一区二区| 国产成人av一区二区| 成人黄页毛片网站| 91污片在线观看| 欧美日本在线播放| 日韩一区二区三区在线视频| 26uuu亚洲| 国产精品福利一区二区三区| 亚洲色图在线视频| 亚洲第一会所有码转帖| 美日韩一区二区| 成人天堂资源www在线| 在线观看网站黄不卡| 欧美电影在线免费观看| 精品国产电影一区二区| 国产精品欧美一级免费| 亚洲一二三级电影| 久久99久国产精品黄毛片色诱| 懂色一区二区三区免费观看| 色伊人久久综合中文字幕| 日韩一区二区三区四区五区六区| 国产无人区一区二区三区| 一区二区三区四区蜜桃| 黑人精品欧美一区二区蜜桃| 91同城在线观看| 欧美一二三区精品| 亚洲少妇最新在线视频| 久久成人免费电影| 一本色道久久综合狠狠躁的推荐| 欧美精品免费视频| 国产精品乱子久久久久| 日韩国产精品91| 99久久精品99国产精品| 日韩欧美国产1| 亚洲另类在线一区| 国产成人免费在线观看不卡| 制服丝袜中文字幕亚洲| 亚洲三级免费电影| 国产一区二区三区电影在线观看 | 久久91精品国产91久久小草| 99久久精品99国产精品|