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

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

?? arm_00_os_core.c

?? uCOS在LPC213X上的移植。適合ARM嵌入式系統(tǒng)初學者。
?? C
?? 第 1 頁 / 共 4 頁
字號:
 OSEnterCritical();  //進入臨界段 
 TempPcb=OSReadyList;   //從就緒表表頭開始查找
 while(TempPcb->Next)   //直到結束
  {
   if(TempPcb==pcb)  //如果找到,
    {
     DeleteFromReadyList(pcb);  //將其從就緒表中刪除
     InsertToSuspendList(pcb);  //插入掛起列表
     OSExitCritical();         //退出臨界段
     if(pcb==OSCurrentPcb)   //如果要掛起的是自己
      {
       OSTaskSwitch();    //則需要運行任務切換
      }
     return 0;         //返回0,表示成功
    }
   TempPcb=TempPcb->Next;
  }
 return NO_SUCH_A_TASK;   //如果沒找到,則返回錯誤
}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:發(fā)送一則消息
入口參數(shù)1:pcb。消息的接收者。指向任務的pcb的指針。
入口參數(shù)2:pMsg。消息指針。指向消息結構體的指針。
返回:消息是否發(fā)送成功。0:發(fā)送成功;錯誤代碼 NO_SUCH_A_TASK:沒有這個任務;
**********************************************************************************************/
uint32 OSSendMsg(OSpcb * pcb,OSMsg * pMsg)
{
 OSpcb * TempPcb;
 
 OSEnterCritical();    //進入臨界段
 pMsg->Sender=OSCurrentPcb;  //消息的發(fā)送者
 switch(pcb->Status)   //判斷任務所處的狀態(tài)
  {
   case OSInReadyStatus:  //如果任務處于就緒態(tài)
    {
     TempPcb=OSReadyList;   //在就緒表中查找
     while(TempPcb->Next)   //搜索整個就緒表
      {
       if(pcb==TempPcb)     //如果找到
        {
    	 pcb->Msg=pMsg;     //將消息放入任務的消息指針中
         OSExitCritical();  //退出臨界段
         return 0;		    //返回0,發(fā)送消息成功
        }
       TempPcb=TempPcb->Next;      //TempPcb移動到下一個
      }
     //如果在就緒表中找不到該任務,則
     OSExitCritical();       //退出臨界段
     return NO_SUCH_A_TASK;  //返回錯誤代號:沒有這樣的任務。     
    }

   case OSInDelayStatus:  //如果任務處于延時態(tài)
    {
     TempPcb=OSDelayList;  //在延時態(tài)表中查找
     while(TempPcb->Next)  //搜索整個延時表
      {
       if(pcb==TempPcb)    //如果找到
        {
         pcb->Msg=pMsg;  //將消息放入任務的消息指針中
         pcb->Delay=0;   //取消任務的延時
         DeleteFromDelayList(pcb);  //將任務從延時列表中刪除
         InsertToReadyList(pcb);    //將任務插入到就緒表中
         OSExitCritical();          //退出臨界段
         OSTaskSwitch();            //有任務被喚醒,需要任務切換
         return 0;                  //返回0,表示發(fā)送消息成功
        }
       TempPcb=TempPcb->Next;      //TempPcb移動到下一個
      }
    //如果在延時表中找不到該任務,則
    OSExitCritical();   //退出臨界段
    return NO_SUCH_A_TASK;  //返回錯誤代號:沒有這樣的任務。	 
   }
	
   case OSInSuspendStatus:  //如果任務處于掛起態(tài)
    {
     TempPcb=OSSuspendList;      //在掛起態(tài)表中查找
     while(TempPcb->Next)        //搜索整個掛起態(tài)表
      {	  
       if(pcb==TempPcb)         //如果找到
        {
         pcb->Msg=pMsg;   //將消息放入任務的消息指針中
         DeleteFromSuspendList(pcb);   //將任務從掛起態(tài)列表中刪除
         InsertToReadyList(pcb);	    //將任務插入到就緒表中
         OSExitCritical();     //退出臨界段
         OSTaskSwitch();       //有任務被喚醒,需要任務切換
         return 0;             //返回0,表示消息發(fā)送成功
        }
       TempPcb=TempPcb->Next;      //TempPcb移動到下一個
      }
     //如果在掛起態(tài)表中找不到該任務,則
     OSExitCritical();   //退出臨界段
     return NO_SUCH_A_TASK;  //返回錯誤代號:沒有這樣的任務。
    }
	
   default:   //如果任務處于其它狀態(tài)
    {
     OSExitCritical();   //退出臨界段
     return NO_SUCH_A_TASK;  //返回錯誤代號:沒有這樣的任務。
    }
  }
}
//////////////////////////////////End of function//////////////////////////////////////////////

/**********************************************************************************************
功能:定時器0初始化。用來產(chǎn)生10mS的時鐘節(jié)拍。并將其分配為FIQ中斷
入口參數(shù):無。
返回:無。
備注:無。
**********************************************************************************************/
void Timer0Init(void)
{
 T0CTCR=0;   //設置T0為計數(shù)器模式
 T0TCR=1;    //使能T0
 T0PR=3839;  //T0預分頻器設置為3839,所以T0的計數(shù)時鐘為11059200*5/(3839+1)=14400Hz
 T0MR0=MaxOfTimer0;    //匹配寄存器設置為1/100秒觸發(fā)中斷一次。MaxOfTimer0=14400/100-1。										
 T0MCR&=~0x04;
 T0MCR|=0x00000003;     //MR0匹配時,發(fā)生中斷,并且復位T0
 CopyOfVICIntEnable |= (1<<TIMER0);   //打開TIMER0中斷
 VICIntSelect |=(1<<TIMER0);        //將定時器0分配為FIQ中斷
}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:系統(tǒng)時鐘節(jié)拍初始化。用來產(chǎn)生10mS的時鐘節(jié)拍。
入口參數(shù):無。
返回:無。
備注:無。
**********************************************************************************************/
void OSTickInit(void)
{
 Timer0Init();   //調用函數(shù)Timer0Init()設置時鐘節(jié)拍
}
//////////////////////////////////End of function//////////////////////////////////////////////



/**********************************************************************************************
顯示ARM_00_OS的數(shù)組
**********************************************************************************************/
const uint8 ARM_00_OS_LOGO[7][78]={
"   __      _____    __      __       _____     _____         ____       __   ",
"  //\\\\    ||~~~\\\\  ||\\\\    //||     //~~~\\\\   //~~~\\\\      //~~~~\\\\   //~~\\\\ ",
" //  \\\\   ||    || || \\\\  // ||    ||    /|| ||    /||    ||      || ||      ",
"||____||  ||===//  ||  \\\\//  ||    ||   / || ||   / ||    ||      ||  \\\\___  ",
"||====||  || \\\\    ||   ~~   ||    ||  /  || ||  /  ||    ||      ||    ~~~\\\\",
"||    ||  ||  \\\\   ||        || ___ \\\\/__//   \\\\/__//  ___ \\\\____//   \\\\___//",
"~~    ~~  ~~   ~~  ~~        ~~ ~~~   ~~~       ~~~    ~~~   ~~~~       ~~~  "
};
///////////////////////////////////////////////////////////////////////////////////////////////


/**********************************************************************************************
功能:操作系統(tǒng)初始化。
入口參數(shù):無。
返回:無。
備注:任務調度前,必須調用該函數(shù)初始化好一些參數(shù)
**********************************************************************************************/
void OSInit(void)
{
 uint32 i;
 const uint8 Title1[]={"SystemIdle"};    //系統(tǒng)空閑任務的標題

 CopyOfVICIntEnable=0;  //VICIntEnable備份被設置為0 
// CopyOfFIQEN=0;  //FIQEN備份被設置為0
// CopyOfIRQEN=0;  //IRQEN備份被設置為0
 OSEnCrCount=0;  //進入臨界段次數(shù)為0

 prints("",1);
 prints("The MCU type is: LPC",0);  //顯示CPU信息
 print_uint32(CPU_TYPE);
 prints("",1);
 prints("",1);

 OSMemoryInit();   //內存初始化
 OSMemoryTest();   //內存測試

 OSDeviceBottom.Next=0;    //設備列表表底初始化
 OSDeviceBottom.User=0;
 OSDeviceBottom.RequestCount=0;
 OSDeviceBottom.DeviceID=0;
 OSDeviceList=&OSDeviceBottom;   //設備列表初始化指向低部
 
 
//系統(tǒng)空閑任務(即就緒列表底部)初始化
//系統(tǒng)空閑任務的優(yōu)先級最低,無其它任務運行時,就運行系統(tǒng)空閑任務
//注意,永遠不要掛起系統(tǒng)空閑任務,否則會出錯
  
 OSSystemIdlePcb.Prior=&OSSystemIdlePcb;  //系統(tǒng)初始化,現(xiàn)在只有系統(tǒng)空閑任務
 OSSystemIdlePcb.Next=0;                  //系統(tǒng)空閑任務沒有后一個任務
 OSSystemIdlePcb.Priority=~0;             //系統(tǒng)空閑任務的優(yōu)先級最低(即0xFFFFFFFF)
 OSSystemIdlePcb.Status=OSInReadyStatus;  //系統(tǒng)空閑任務永遠處于就緒態(tài)
 OSSystemIdlePcb.Delay=0;                 //系統(tǒng)空閑任務永遠不得延時
 OSSystemIdlePcb.PID=(uint32)&OSSystemIdlePcb;    //系統(tǒng)空閑任務的PID
 OSSystemIdlePcb.StackLength=0;           //系統(tǒng)空閑任務的堆棧長度設置為0字節(jié),因為空閑任務并未使用緩沖池
 OSSystemIdlePcb.TotalRunTime=0;          //系統(tǒng)空閑任務的總運行時間初始化為0
 OSSystemIdlePcb.RunTimeInThisRefreshPeriod=0;      //系統(tǒng)空閑任務的當前運行時間初始化為0
 OSSystemIdlePcb.Msg=0;                   //初始化無接收消息
 OSSystemIdlePcb.WaitFor=0;               //初始化無等待資源
 for(i=0;i<15;i++)      //設置標題
  {
   OSSystemIdlePcb.Title[i]=Title1[i];
   if(Title1[i]==0)break;
  }
 for(;i<15;i++)    //不足的補空格
  {
   OSSystemIdlePcb.Title[i]=' ';
  }
  
 OSSystemIdlePcb.Title[15]=0;
 TaskAmount=1;               //任務總數(shù)為1,即只有一個系統(tǒng)空閑任務
 OSReadyList=&OSReadyListBottom;     //就緒任務表的起始設置為OSSReadyListBottom,現(xiàn)在只有一個任務
 
 
 //掛起態(tài)任務列表底部初始化
 //該底部是一個短的Pcb,即只有Prior,Next,Delay,Priority,PID這幾個參數(shù)
 //該底部沒有實際的任務對應,只是一個空表,方便任務喚醒時查找任務使用
 //永遠不要將掛起態(tài)列表底部投入到就緒表中,否則會出錯
 OSSuspendListBottom.Prior=(OSpcb *)&OSSuspendListBottom; //現(xiàn)在只有一個掛起任務,所以前趨指向自己 
 OSSuspendListBottom.Next=(OSpcb *)0;        //掛起態(tài)任務列表底部沒有下一個任務
 OSSuspendListBottom.PID=0;         //PID為0
 OSSuspendListBottom.Priority=~0;   //優(yōu)先級最低
 OSSuspendListBottom.Delay=0;       //不得延時
 
 OSSuspendList=(OSpcb *)&OSSuspendListBottom; //掛起列表的起始為列表低部,因為現(xiàn)在只有底部一個
 
 
 //延時態(tài)任務列表底部初始化
 //該底部是一個短的Pcb,即只有Prior,Next,Delay,Priority,PID這幾個參數(shù)
 //該底部沒有實際的任務對應,只是一個空表,方便任務喚醒時查找任務使用
 //永遠不要將延時態(tài)列表底部投入到就緒表中,否則會出錯
 OSDelayListBottom.Prior=(OSpcb *)&OSSuspendListBottom; //現(xiàn)在只有一個延時態(tài)任務,所以前趨指向自己 
 OSDelayListBottom.Next=(OSpcb *)0;        //延時態(tài)任務列表底部沒有下一個任務
 OSDelayListBottom.PID=0;         //PID為0
 OSDelayListBottom.Priority=~0;   //優(yōu)先級最低
 OSDelayListBottom.Delay=0;       //不得延時
 
 OSDelayList=(OSpcb *)&OSDelayListBottom; //掛起列表的起始為列表低部,因為現(xiàn)在只有底部一個
 
 prints("",1);
 prints("Welcome to",1);
 for(i=0;i<7;i++)              //顯示LOGO
  {
   prints(ARM_00_OS_LOGO[i],1);
  }
 prints("",1);

 prints("Date created: ",0);   //顯示創(chuàng)建日期
 prints(__DATE__,1);
 prints("Time created: ",0);   //顯示創(chuàng)建時間
 prints(__TIME__,1);
 prints("    Designer: Computer00",1);
 prints("     My Blog: Http://computer00.21ic.org",1);
}
//////////////////////////////////End of function//////////////////////////////////////////////

/**********************************************************************************************
功能:釋放所占用的資源。
入口參數(shù):pcb。任務的進程控制塊地址。
返回:無。
**********************************************************************************************/
void OSFreeResource(OSpcb * pcb)
{
 OSdevice * pDevice;
 pDevice=OSDeviceList;  //從設備列表頭部開始
 while(pDevice->Next)   //直到設備列表的表尾
  {
   if(pDevice->User==pcb)  //如果該設備被該任務使用,
    {
     OSFreeDevice((uint32)pDevice);   //則釋放它
    }
  }
}
//////////////////////////////////End of function//////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久草在线在线精品观看| 日韩精品专区在线影院观看| 欧洲av一区二区嗯嗯嗯啊| 欧美日韩一区二区在线观看视频| 7777精品久久久大香线蕉| 欧美成人vps| 亚洲欧洲日韩av| 五月天激情综合| 国产a视频精品免费观看| 在线亚洲高清视频| 欧美成人精精品一区二区频| 中文字幕精品—区二区四季| 亚洲在线成人精品| 久久精品国产一区二区三| 成人性生交大片免费| 欧美日韩一区三区四区| 久久久亚洲精品石原莉奈| 一区二区成人在线视频| 国内精品国产成人国产三级粉色 | 色老头久久综合| 日韩一本二本av| ...xxx性欧美| 久久国产精品露脸对白| 色偷偷久久人人79超碰人人澡| 日韩欧美美女一区二区三区| 亚洲色大成网站www久久九九| 日本不卡1234视频| 91浏览器打开| 精品国产制服丝袜高跟| 一区二区三区在线观看视频| 国产精品一级片| 欧美人体做爰大胆视频| 国产精品久久久久婷婷| 美腿丝袜亚洲一区| 91电影在线观看| 国产日韩欧美一区二区三区乱码| 亚洲va欧美va人人爽午夜| 粉嫩av一区二区三区粉嫩| 欧美一区二区三区色| 亚洲色欲色欲www| 韩国一区二区三区| 宅男噜噜噜66一区二区66| 17c精品麻豆一区二区免费| 韩国女主播一区二区三区| 欧美性一二三区| 国产精品美女一区二区在线观看| 美女免费视频一区| 91豆麻精品91久久久久久| 欧美激情一区二区三区蜜桃视频 | 日本高清不卡视频| 中文字幕国产一区| 韩国av一区二区三区| 91精品婷婷国产综合久久性色| 中文字幕五月欧美| 国产精品伊人色| 日韩三级精品电影久久久| 亚洲va欧美va天堂v国产综合| 一本到高清视频免费精品| 中文字幕免费不卡| 国产成人精品影视| 精品福利一二区| 蜜桃视频一区二区| 91麻豆精品国产91久久久资源速度| 中文字幕视频一区二区三区久| 国产99精品国产| 久久久亚洲精品石原莉奈| 免费成人美女在线观看.| 4438x成人网最大色成网站| 亚洲第一av色| 欧美日韩一区三区| 亚洲午夜视频在线观看| 91国产福利在线| 一区二区在线免费观看| 色综合一区二区| 亚洲精选免费视频| 91久久免费观看| 亚洲欧洲美洲综合色网| av网站免费线看精品| 亚洲人成网站影音先锋播放| 91小视频在线观看| 亚洲人xxxx| 91电影在线观看| 亚洲二区在线观看| 欧美高清一级片在线| 三级欧美在线一区| 日韩欧美国产小视频| 麻豆91小视频| 久久久久久免费毛片精品| 国产精品一区免费在线观看| 亚洲国产激情av| 一本到一区二区三区| 亚洲夂夂婷婷色拍ww47| 欧美久久久久久蜜桃| 麻豆成人av在线| 国产亚洲精品久| 91在线无精精品入口| 亚洲影院理伦片| 欧美一级生活片| 国产自产v一区二区三区c| 国产日韩欧美a| 一本久久精品一区二区| 日韩精品一级中文字幕精品视频免费观看| 欧美裸体一区二区三区| 老司机免费视频一区二区三区| 久久综合久久久久88| 不卡一区二区三区四区| 亚洲自拍偷拍av| 精品欧美一区二区久久| 国产99久久久精品| 一区二区高清在线| 欧美xxxx老人做受| 99精品欧美一区二区三区综合在线| 亚洲国产cao| 国产亚洲综合色| 一本大道av一区二区在线播放| 首页国产丝袜综合| 国产欧美日韩卡一| 欧美日韩国产三级| 国产很黄免费观看久久| 一区二区三区欧美日| 欧美成人精品高清在线播放| 99天天综合性| 毛片av一区二区| 日韩伦理av电影| 日韩欧美一区二区不卡| 99热这里都是精品| 免费高清不卡av| 日韩一区二区中文字幕| 日韩国产成人精品| 国产欧美一区二区精品性色超碰 | 国产亚洲精久久久久久| 91视视频在线观看入口直接观看www | 在线一区二区三区| 奇米影视7777精品一区二区| 久久久国产一区二区三区四区小说| 色天使久久综合网天天| 日本欧美一区二区三区| 国产精品美女www爽爽爽| 欧美在线观看一区二区| 精品一二线国产| 亚洲国产日韩av| 国产午夜精品久久| 欧美日韩精品福利| 丁香一区二区三区| 亚洲乱码中文字幕| 久久久久99精品一区| 91精品91久久久中77777| 国产在线一区二区| 亚洲另类中文字| 3atv一区二区三区| 色就色 综合激情| 国产一区二区在线免费观看| 亚洲综合色婷婷| 久久久国产一区二区三区四区小说 | 一本久久精品一区二区| 久久精品国产澳门| 午夜精品国产更新| 国产精品福利一区二区| 欧美一区二区三区日韩视频| 91女人视频在线观看| 肉丝袜脚交视频一区二区| 日韩理论片中文av| 久久香蕉国产线看观看99| 欧美日韩不卡一区| aaa欧美大片| 极品少妇一区二区| 亚洲午夜精品在线| 中文字幕一区二区视频| 精品精品国产高清a毛片牛牛| 欧美日韩一区二区不卡| 波多野结衣91| 久久国产精品72免费观看| 亚洲mv大片欧洲mv大片精品| 亚洲欧洲www| 久久精品网站免费观看| 欧美一区二区三区免费大片| 色狠狠av一区二区三区| www.亚洲色图.com| 国产在线精品一区二区 | 久久超碰97中文字幕| 日本亚洲一区二区| 亚洲成av人片在www色猫咪| 亚洲私人影院在线观看| 中文字幕免费不卡在线| 日韩一区中文字幕| 欧美高清在线一区二区| 精品日韩在线一区| 日韩一区二区三区四区五区六区 | 亚洲国产日产av| 中文一区二区在线观看| 国产精品久久看| 国产片一区二区三区| 亚洲精品一线二线三线无人区| 欧美伦理影视网| 日韩一区二区三免费高清| 91精品国产色综合久久久蜜香臀| 欧美日韩不卡在线| 欧美精品久久99| 精品毛片乱码1区2区3区| 日韩女同互慰一区二区|