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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? arm_00_os_core.c

?? uCOS在LPC213X上的移植。適合ARM嵌入式系統(tǒng)初學(xué)者。
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):


/**********************************************************************************************
功能:刪除一個(gè)任務(wù)。
入口參數(shù)1:pcb。要?jiǎng)h除的任務(wù)的pcb。
返回:32位無(wú)符號(hào)整型。0表示刪除成功。非零表示刪除失敗,返回錯(cuò)誤代號(hào)。
備注:如果任務(wù)自己申請(qǐng)了內(nèi)存,一定要任務(wù)自己先釋放內(nèi)存,否則任務(wù)被刪除后,內(nèi)存沒(méi)有釋放,會(huì)導(dǎo)致內(nèi)存泄漏。
**********************************************************************************************/
uint32 OSTaskKill(OSpcb * pcb)
{
 OSpcb * TempPcb;
 OSEnterCritical();     //進(jìn)入臨界段
 switch(pcb->Status)    //根據(jù)狀態(tài)不同,做不同的處理
  {
   case OSInReadyStatus:  //如果任務(wù)處于就緒態(tài)
    {
     TempPcb=OSReadyList;   //從就緒表中查找
     while(TempPcb->Next)   //搜索整個(gè)就緒表
      {
       if(pcb==TempPcb)     //如果搜索到
        {
         OSFreeResource(pcb);    //釋放資源
         DeleteFromReadyList(pcb);   //將其從就緒態(tài)表中刪除
         OSFree((uint32)pcb,pcb->StackLength);   //釋放任務(wù)所占內(nèi)存
         TaskAmount--;                           //任務(wù)數(shù)減1
         OSExitCritical();                       //退出臨界段
         if(pcb==OSCurrentPcb)                   //如果刪除的是正在運(yùn)行的任務(wù)
          {
           OSTaskSwitch();                       //則執(zhí)行任務(wù)切換 
          }
         return 0;          //返回0,表示刪除任務(wù)成功
        }
       TempPcb=TempPcb->Next;    //TempPcb移動(dòng)到下一個(gè)
      }
     //如果在就緒表中找不到該任務(wù),則  
     OSExitCritical();       //退出臨界段
     return NO_SUCH_A_TASK;  //返回出錯(cuò)代碼,沒(méi)有這樣的任務(wù)
    }
	
   case OSInDelayStatus:     //如果任務(wù)處于延時(shí)態(tài)
    {
     TempPcb=OSDelayList;    //從延時(shí)態(tài)列表中搜索
     while(TempPcb->Next)    //搜索整個(gè)延時(shí)列表
      {
       if(pcb==TempPcb)      //如果搜索到
        {
         OSFreeResource(pcb);    //釋放資源
         DeleteFromDelayList(pcb);   //將其從延時(shí)態(tài)表中刪除
         OSFree((uint32)pcb,pcb->StackLength);   //釋放任務(wù)所占的內(nèi)存
         TaskAmount--;                           //任務(wù)數(shù)減1
         OSExitCritical();                       //退出臨界段
         return 0;                        //返回刪除成功
        }
       TempPcb=TempPcb->Next;      //TempPcb移動(dòng)到下一個(gè)
      }
     //如果在延時(shí)態(tài)表中找不到該任務(wù),則
     OSExitCritical();       //退出臨界段
     return NO_SUCH_A_TASK;  //返回出錯(cuò)代碼,沒(méi)有這樣的任務(wù)
    }
	
   case OSInSuspendStatus:   //如果任務(wù)處于掛起態(tài)
    {
     TempPcb=OSSuspendList;    //從掛起態(tài)表中搜索
     while(TempPcb->Next)      //搜索整個(gè)掛起態(tài)列表
      {
       if(pcb==TempPcb)        //如果搜索到
        {
         OSFreeResource(pcb);    //釋放資源
         DeleteFromSuspendList(pcb);   //將起從掛起態(tài)列表中刪除
         OSFree((uint32)pcb,pcb->StackLength);   //釋放任務(wù)所占的內(nèi)存
         TaskAmount--;                        //任務(wù)數(shù)減1
         OSExitCritical();                    //退出臨界段
         return 0;                        //返回刪除成功		
        }
       TempPcb=TempPcb->Next;      //TempPcb移動(dòng)到下一個(gè)
      }
     //如果在掛起態(tài)表中找不到該任務(wù),則
     OSExitCritical();       //退出臨界段
     return NO_SUCH_A_TASK;  //返回出錯(cuò)代碼,沒(méi)有這樣的任務(wù)
   }
	
   default:    //如果要?jiǎng)h除的任務(wù)不在這三種狀態(tài)中
    {
     OSExitCritical();     //退出臨界段
     return NO_SUCH_A_TASK;  //返回出錯(cuò)代碼,沒(méi)有這樣的任務(wù)
    }
  }
}
///////////////////////////////////////////////////////////////////////////////////////////////

/**********************************************************************************************
功能:添加一個(gè)設(shè)備。
入口參數(shù)1:DeviceID。要添加設(shè)備的唯一的ID號(hào)。根據(jù)一個(gè)設(shè)備的ID號(hào),即可查找到該設(shè)備的信息的入口地址。
返回:32位無(wú)符號(hào)整型。0表示添加失敗。非0為指向設(shè)備的指針的值。
/*********************************************************************************************/
uint32 OSAddDevice(uint32 DeviceID)
{
 OSdevice * TempDevice;

 OSEnterCritical();   //進(jìn)入臨界段
 TempDevice=(OSdevice *)OSMalloc(sizeof(OSdevice));   //申請(qǐng)內(nèi)存
 if(TempDevice==(OSdevice *)0)    //如果申請(qǐng)內(nèi)存失敗
  {
   OSExitCritical();   //退出臨界段,返回0。表示添加失敗失敗
   return 0;
  }
 //將新建的設(shè)備插入到設(shè)備列表的頭部
 TempDevice->Next=OSDeviceList;   //被添加的設(shè)備的后趨設(shè)為OSDeviceList
 TempDevice->User=(OSpcb *)0;     //新建的設(shè)備初始化為沒(méi)有被使用
 TempDevice->RequestCount=0;      //新建的設(shè)備申請(qǐng)使用次數(shù)為0
 TempDevice->DeviceID=DeviceID;   //設(shè)置被添加設(shè)備的ID號(hào)
 OSDeviceList=TempDevice;         //修改OSDeviceList,使其指向表頭
 OSExitCritical();                //退出臨界段
 return (uint32)(TempDevice);     //返回被添加的設(shè)備的地址
}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:刪除一個(gè)設(shè)備。
入口參數(shù)1:DeviceID。要?jiǎng)h除的設(shè)備的ID號(hào)。
返回:32位無(wú)符號(hào)整型。返回0,刪除成功。非零(錯(cuò)誤代號(hào)),刪除錯(cuò)誤。
**********************************************************************************************/
uint32 OSDeleteDevice(uint32 DeviceID)
{
 OSdevice * TempDevice;
 
 OSEnterCritical();        //進(jìn)入臨界段
 TempDevice=OSDeviceList;   //查找設(shè)備列表
 if(OSDeviceList->DeviceID==DeviceID)  //如果要被刪除的設(shè)備在表中第一項(xiàng)
  {
   OSDeviceList=OSDeviceList->Next;   //設(shè)備列表指向下一個(gè)
   OSFree((uint32)TempDevice,sizeof(OSdevice));  //釋放內(nèi)存
   OSExitCritical();   //退出臨界段
   return 0;       //返回0,刪除成功
  }

 while(TempDevice->Next)    //搜索設(shè)備列表中其它設(shè)備
  {
   if(TempDevice->Next->DeviceID==DeviceID)   //如果找到
    {
     TempDevice->Next=TempDevice->Next->Next;   //將其中設(shè)備列表中刪除
     OSFree((uint32)(TempDevice->Next),sizeof(OSdevice));   //釋放內(nèi)存
     OSExitCritical();    //退出臨界段
     return 0;         //返回0,表示刪除成功
    }
   TempDevice=TempDevice->Next;   //移到下一個(gè)
  }
 OSExitCritical();   //如果設(shè)備列表搜索完,仍未找到設(shè)備,則返回錯(cuò)誤代號(hào):沒(méi)有這個(gè)設(shè)備
 return NO_SUCH_A_DEVICE;
}
//////////////////////////////////End of function//////////////////////////////////////////////

/**********************************************************************************************
功能:根據(jù)設(shè)備的ID號(hào),獲取設(shè)備信息的入口地址。
入口參數(shù)1:DeviceID。設(shè)備的ID號(hào)。
返回:設(shè)備信息的入口地址
**********************************************************************************************/
uint32 OSGetDeviceAddr(uint32 DeviceID)
{
 OSdevice * TempDevice;
 
 OSEnterCritical();  //進(jìn)入臨界段
 TempDevice=OSDeviceList;   //從表頭開(kāi)始
 while(TempDevice->Next)   //直至表尾
  {
   if(TempDevice->DeviceID==DeviceID)   //如果找到設(shè)備
    {
     OSExitCritical();   //退出臨界段
     return (uint32)TempDevice;   //返回設(shè)備信息的入口地址
    }
   TempDevice=TempDevice->Next;   //移向下一個(gè)
  }
 OSExitCritical();   //退出臨界段
 return 0;    //返回0,表示獲取失敗
}
//////////////////////////////////End of function//////////////////////////////////////////////

/**********************************************************************************************
功能:申請(qǐng)使用一個(gè)設(shè)備。
入口參數(shù)1:DeviceAddr。設(shè)備信息的入口地址。
入口參數(shù)2:DelayTicks。等待的時(shí)鐘節(jié)拍數(shù)。為0時(shí),永久等待。
返回:32位無(wú)符號(hào)整型。返回0,表示申請(qǐng)失敗,超時(shí)。返回1申請(qǐng)成功。
備注:如果一個(gè)設(shè)備被一個(gè)任務(wù)使用后,它將一直被占用,直到該設(shè)備被釋放為止
**********************************************************************************************/
uint32 OSRequestDevice(uint32 DeviceAddr,uint32 DelayTicks)
{
 OSEnterCritical();  //進(jìn)入臨界段
 if(((OSdevice *)DeviceAddr)->User==0)   //如果該設(shè)備未使用
  {
   ((OSdevice *)DeviceAddr)->User=OSCurrentPcb;  //則使用該設(shè)備
   OSExitCritical();   //退出臨界段
   return 1;   //返回1,申請(qǐng)成功
  }
 else  //如果設(shè)備已被使用,
  {
   ((OSdevice *)DeviceAddr)->RequestCount++;    //則將請(qǐng)求的次數(shù)加1
   OSCurrentPcb->WaitFor=((OSdevice *)DeviceAddr)->DeviceID;   //設(shè)置任務(wù)等待的原因
   if(DelayTicks)   //如果延時(shí)的時(shí)鐘節(jié)拍數(shù)非0,
    {
     OSExitCritical();  //退出臨界段,
     OSTaskDelay(DelayTicks);  //延遲DelayTicks個(gè)時(shí)鐘節(jié)拍
     if(OSCurrentPcb->Delay)   //如果任務(wù)延遲時(shí)間未到就被喚醒,則說(shuō)明等待成功
      {
       OSEnterCritical();      //進(jìn)入臨界段
       OSCurrentPcb->Delay=0;  //將剩余的延遲時(shí)間設(shè)置為0
       OSExitCritical();       //退出臨界段
       return 1;               //返回1,表示成功
      }
     else
      {
       return 0;    //返回0,表示等待超時(shí)
      }
    }
   else   //如果DelayTicks為0,表示任務(wù)一直等待
    {
     OSExitCritical();    //退出臨界段
     OSTaskSuspend(OSCurrentPcb);   //將任務(wù)掛起
     return 1;      //被喚醒后,返回1。等待成功。
    }
  }
}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:釋放一個(gè)設(shè)備的使用權(quán)。
入口參數(shù)1:DeviceAddr。設(shè)備信息的入口地址。
返回:無(wú)。
備注:設(shè)備被使用后,要調(diào)用該函數(shù)釋放設(shè)備。否則其它任務(wù)不能使用該設(shè)備。
**********************************************************************************************/
void OSFreeDevice(uint32 DeviceAddr)
{
 OSpcb * TempPcb;
 
 OSEnterCritical();    //進(jìn)入臨界段
 if(((OSdevice *)DeviceAddr)->RequestCount)   //如果有任務(wù)在等待使用該設(shè)備
  {
   ((OSdevice *)DeviceAddr)->RequestCount--;  //請(qǐng)求次數(shù)減1
   TempPcb=OSSuspendList;     //查找掛起態(tài)表,看是否有請(qǐng)求該設(shè)備的任務(wù)
   while(TempPcb->Next)    //直到掛起列表的尾部
    {
     if(TempPcb->WaitFor==((OSdevice *)DeviceAddr)->DeviceID)   //如果找到等待該設(shè)備的任務(wù)
      {
       ((OSdevice *)DeviceAddr)->User=TempPcb;   //將設(shè)備的使用權(quán)給該任務(wù)
       TempPcb->WaitFor=0;             //清除該任務(wù)等待的原因
       DeleteFromSuspendList(TempPcb);  //將其從掛起態(tài)列表中刪除
       InsertToReadyList(TempPcb);     //插入到就緒表中
       OSExitCritical();               //退出臨界段
       OSTaskSwitch();           //任務(wù)切換
       return;              //返回
      }
     TempPcb=TempPcb->Next;  //移到下一個(gè)
    }
   TempPcb=OSDelayList;   //查找延時(shí)表
   while(TempPcb->Next)   //直到延時(shí)表的尾部
    {
     if(TempPcb->WaitFor==((OSdevice *)DeviceAddr)->DeviceID)   //如果找到等待該設(shè)備的任務(wù)
      {
       ((OSdevice *)DeviceAddr)->User=TempPcb;   //將該設(shè)備使用權(quán)給該任務(wù)
       TempPcb->WaitFor=0;          //清除等待原因
       DeleteFromDelayList(TempPcb);   //將其從延時(shí)表中刪除
       InsertToReadyList(TempPcb);    //插入到就緒表中
       OSExitCritical();         //退出臨界段
       OSTaskSwitch();        //任務(wù)切換
       return;         //返回
      }
     TempPcb=TempPcb->Next;  //移到下一個(gè)
    }
  }
 //如果沒(méi)有其它任務(wù)申請(qǐng)使用該設(shè)備,則
 ((OSdevice *)DeviceAddr)->User=(OSpcb *)0;   //該設(shè)備無(wú)任務(wù)使用
 OSExitCritical();   //退出臨界段
 return;  //返回
}
//////////////////////////////////End of function//////////////////////////////////////////////

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利小视频| 国产一区二区三区四区五区美女 | 日韩精品福利网| 1区2区3区国产精品| 国产三级精品三级| 久久九九影视网| 国产偷国产偷亚洲高清人白洁| 日韩女优av电影在线观看| 欧美日韩一级黄| 欧美丰满少妇xxxxx高潮对白| 色欧美日韩亚洲| 欧美三级电影网站| 欧美综合天天夜夜久久| 欧美专区日韩专区| 欧美日韩一级黄| 日韩欧美在线综合网| 精品久久人人做人人爰| 久久久.com| 亚洲摸摸操操av| 亚洲成av人**亚洲成av**| 亚洲一区电影777| 奇米四色…亚洲| 国产成人综合自拍| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 日韩一级免费一区| 精品999在线播放| 中文字幕电影一区| 亚洲电影视频在线| 国产资源在线一区| 一本色道久久综合狠狠躁的推荐 | 久久久久久久国产精品影院| 国产婷婷一区二区| 一区二区三区毛片| 精品一区二区三区av| proumb性欧美在线观看| 欧美在线视频日韩| 2023国产精品自拍| 亚洲专区一二三| 精品一区二区免费看| 一本大道久久精品懂色aⅴ| 日韩色视频在线观看| 国产午夜三级一区二区三| 一级中文字幕一区二区| 国产一区视频网站| 欧美日韩亚洲丝袜制服| 精品久久久久一区| 亚洲国产日日夜夜| 成人美女视频在线看| 欧美一区二区不卡视频| 亚洲欧美日韩国产综合在线| 麻豆精品一区二区综合av| 99久久久无码国产精品| 精品国产免费人成电影在线观看四季| 国产精品美女久久久久av爽李琼 | 久久人人97超碰com| 夜夜爽夜夜爽精品视频| 风间由美一区二区av101 | 蜜桃一区二区三区在线观看| 99精品视频在线播放观看| 精品国产123| 天天综合色天天综合| 色综合亚洲欧洲| 国产精品久久久久久久久快鸭| 日本欧美久久久久免费播放网| 色狠狠色狠狠综合| 亚洲欧洲日韩一区二区三区| 国产精品亚洲专一区二区三区 | 成人免费va视频| 欧美成人精品福利| 五月婷婷综合网| 欧美性猛片aaaaaaa做受| 久久一日本道色综合| 久久成人av少妇免费| 日韩写真欧美这视频| 无码av中文一区二区三区桃花岛| 日韩欧美在线不卡| 亚洲成人av一区| 欧美三级视频在线观看| 亚洲最快最全在线视频| 99精品久久只有精品| 中文字幕一区三区| 99久久国产综合精品麻豆| 自拍偷拍国产亚洲| 日本道精品一区二区三区| 亚洲精品日日夜夜| 欧美日韩在线播| 日av在线不卡| 久久综合色婷婷| 成人午夜在线视频| 亚洲女人****多毛耸耸8| 国产在线一区二区| 国产经典欧美精品| 91黄视频在线| 在线观看av一区| 日韩一区二区麻豆国产| 日韩三级中文字幕| 性做久久久久久久免费看| 亚洲美女精品一区| 国产精品色哟哟| 中文字幕一区日韩精品欧美| 精品国产露脸精彩对白| 色综合久久综合| 亚洲图片欧美综合| 欧美日韩五月天| 亚洲男同性视频| 成人一区在线看| 精品久久久久久亚洲综合网| 99精品视频在线播放观看| 激情图片小说一区| 五月婷婷另类国产| 蜜臀av一区二区在线观看| 国产精品国产三级国产三级人妇| 成人免费福利片| 欧美精品123区| 蜜桃精品视频在线| 欧美日韩在线播放一区| 欧美日韩成人在线一区| 日韩一区二区在线免费观看| 久久精品夜色噜噜亚洲a∨| 亚洲免费看黄网站| 美国精品在线观看| 中文av一区特黄| 欧美四级电影网| 日韩精品专区在线| 色一情一伦一子一伦一区| 一区二区三区四区精品在线视频| 国产精品三级av| 久久国产精品露脸对白| 老司机精品视频导航| 久久精品国产在热久久| 国产在线不卡一卡二卡三卡四卡| 日本高清不卡aⅴ免费网站| 在线观看日韩电影| 日韩不卡一区二区三区| 国产精品人人做人人爽人人添| 欧美精品一区二区三区在线| 91精品国产综合久久精品| 精品国产一区二区亚洲人成毛片| 91激情在线视频| 日本乱码高清不卡字幕| 高清国产一区二区三区| 国产精品久久久久9999吃药| 久久在线观看免费| 这里只有精品免费| 久久一夜天堂av一区二区三区| 欧美va亚洲va在线观看蝴蝶网| 日本精品视频一区二区三区| 激情另类小说区图片区视频区| 亚洲成人精品一区| 一区二区三区四区激情| 亚洲.国产.中文慕字在线| 欧美日韩免费观看一区二区三区| 中文字幕精品综合| 久久久影视传媒| 久久久国产精华| 精品久久久久久久久久久久久久久 | 亚洲三级在线看| 亚洲激情六月丁香| 国产美女在线精品| 国产精品一区2区| 久久精品国产成人一区二区三区| 久久精品男人天堂av| 337p粉嫩大胆色噜噜噜噜亚洲| www成人在线观看| 中文字幕在线观看一区二区| 一区二区在线观看av| 蜜桃久久久久久久| 成人激情黄色小说| 色综合天天视频在线观看| 成人av网站在线| 久久久亚洲综合| 国产精品久久久久久久久果冻传媒| 精品国产一区二区亚洲人成毛片 | 91行情网站电视在线观看高清版| 中文字幕一区二区三区不卡在线 | 在线播放中文一区| 欧美一区二区三区四区在线观看 | 国产高清在线观看免费不卡| 国产一区二区三区香蕉| 国产成人精品免费在线| 97久久精品人人做人人爽| 99久久婷婷国产| 欧美日韩一区二区三区四区五区| 欧美性欧美巨大黑白大战| 日韩精品一区二区三区视频在线观看| 精品国产区一区| 日韩一区在线播放| 亚洲一区二区三区在线看| 久久精品国产亚洲a| av亚洲产国偷v产偷v自拍| 欧美日韩一区在线观看| 久久欧美一区二区| 亚洲欧美偷拍卡通变态| 亚洲va国产天堂va久久en| 国内精品视频666| 91女人视频在线观看| 91精品国产一区二区| 国产精品色在线| 麻豆91在线播放免费| av亚洲产国偷v产偷v自拍|