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

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

?? arm_00_os_core.c

?? 一個基于arm的
?? C
?? 第 1 頁 / 共 4 頁
字號:
   return CAN_NOT_BE_SUSPENDED;  //則返回 該任務不能被掛起
  }

 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//////////////////////////////////////////////


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

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

/**********************************************************************************************
功能:定時器0初始化。用來產生10mS的時鐘節拍。并將其分配為FIQ中斷
入口參數:無。
返回:無。
備注:無。
**********************************************************************************************/
void Timer0Init(void)
{
 T0LD=MaxOfTimer0;    // 1/100秒中斷一次										
 T0CON=0xC8;       // Enable Timer0; Periodic mode; FCoreClock/256=163200Hz
 CopyOfFIQEN |=TIMER0;   //TIMER0中斷分配為FIQ
}
//////////////////////////////////End of function//////////////////////////////////////////////


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



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


/**********************************************************************************************
功能:操作系統初始化。
入口參數:無。
返回:無。
備注:任務調度前,必須調用該函數初始化好一些參數
**********************************************************************************************/
void OSInit(void)
{
 uint32 i;
 const uint8 Title1[]={"SystemIdle"};    //系統空閑任務的標題
 
 CopyOfFIQEN=0;  //FIQEN備份被設置為0
 CopyOfIRQEN=0;  //IRQEN備份被設置為0
 OSEnCrCount=0;  //進入臨界段次數為0
 
 OSMemoryInit();   //內存初始化
 OSMemoryTest();   //內存測試

 OSDeviceBottom.Next=0;    //設備列表表底初始化
 OSDeviceBottom.User=0;
 OSDeviceBottom.RequestCount=0;
 OSDeviceBottom.DeviceID=0;
 OSDeviceList=&OSDeviceBottom;   //設備列表初始化指向低部
 
 
//系統空閑任務(即就緒列表底部)初始化
//系統空閑任務的優先級最低,無其它任務運行時,就運行系統空閑任務
//注意,永遠不要掛起系統空閑任務,否則會出錯
  
 OSSystemIdlePcb.Prior=&OSSystemIdlePcb;  //系統初始化,現在只有系統空閑任務
 OSSystemIdlePcb.Next=0;                  //系統空閑任務沒有后一個任務
 OSSystemIdlePcb.Priority=~0;             //系統空閑任務的優先級最低(即0xFFFFFFFF)
 OSSystemIdlePcb.Status=OSInReadyStatus;  //系統空閑任務永遠處于就緒態
 OSSystemIdlePcb.Delay=0;                 //系統空閑任務永遠不得延時
 OSSystemIdlePcb.PID=(uint32)&OSSystemIdlePcb;    //系統空閑任務的PID
 OSSystemIdlePcb.StackLength=0;           //系統空閑任務的堆棧長度設置為0字節,因為空閑任務并未使用緩沖池
 OSSystemIdlePcb.TotalRunTime=0;          //系統空閑任務的總運行時間初始化為0
 OSSystemIdlePcb.RunTimeInThisRefreshPeriod=0;      //系統空閑任務的當前運行時間初始化為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;               //任務總數為1,即只有一個系統空閑任務
 OSReadyList=&OSReadyListBottom;     //就緒任務表的起始設置為OSSReadyListBottom,現在只有一個任務
 
 
 //掛起態任務列表底部初始化
 //該底部是一個短的Pcb,即只有Prior,Next,Delay,Priority,PID這幾個參數
 //該底部沒有實際的任務對應,只是一個空表,方便任務喚醒時查找任務使用
 //永遠不要將掛起態列表底部投入到就緒表中,否則會出錯
 OSSuspendListBottom.Prior=(OSpcb *)&OSSuspendListBottom; //現在只有一個掛起任務,所以前趨指向自己 
 OSSuspendListBottom.Next=(OSpcb *)0;        //掛起態任務列表底部沒有下一個任務
 OSSuspendListBottom.PID=0;         //PID為0
 OSSuspendListBottom.Priority=~0;   //優先級最低
 OSSuspendListBottom.Delay=0;       //不得延時
 
 OSSuspendList=(OSpcb *)&OSSuspendListBottom; //掛起列表的起始為列表低部,因為現在只有底部一個
 
 
 //延時態任務列表底部初始化
 //該底部是一個短的Pcb,即只有Prior,Next,Delay,Priority,PID這幾個參數
 //該底部沒有實際的任務對應,只是一個空表,方便任務喚醒時查找任務使用
 //永遠不要將延時態列表底部投入到就緒表中,否則會出錯
 OSDelayListBottom.Prior=(OSpcb *)&OSSuspendListBottom; //現在只有一個延時態任務,所以前趨指向自己 
 OSDelayListBottom.Next=(OSpcb *)0;        //延時態任務列表底部沒有下一個任務
 OSDelayListBottom.PID=0;         //PID為0
 OSDelayListBottom.Priority=~0;   //優先級最低
 OSDelayListBottom.Delay=0;       //不得延時
 
 OSDelayList=(OSpcb *)&OSDelayListBottom; //掛起列表的起始為列表低部,因為現在只有底部一個
 
 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);   //顯示創建日期
 prints(__DATE__,1);
 prints("Time created: ",0);   //顯示創建時間
 prints(__TIME__,1);
 prints("    Designer: Computer00",1);
 prints("     My Blog: Http://computer00.21ic.org",1);
}
//////////////////////////////////End of function//////////////////////////////////////////////

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



/**********************************************************************************************
功能:刪除一個任務。
入口參數1:pcb。要刪除的任務的pcb。
返回:32位無符號整型。0表示刪除成功。非零表示刪除失敗,返回錯誤代號。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱子伦一区| 最新久久zyz资源站| 国产精品嫩草影院com| 一区二区三区加勒比av| 久久99精品国产.久久久久久| 91色在线porny| 久久久久久久久久看片| 日本中文在线一区| 色综合久久久久综合体| 国产欧美日韩综合| 麻豆精品在线播放| 欧美高清www午色夜在线视频| 亚洲视频一二区| 成人深夜在线观看| 久久女同精品一区二区| 秋霞电影一区二区| 欧美日韩国产电影| 亚洲制服丝袜av| 欧美亚洲另类激情小说| 亚洲激情第一区| 国产a久久麻豆| 国产亚洲成av人在线观看导航 | **性色生活片久久毛片| 极品少妇xxxx精品少妇| 日韩三级高清在线| 日本aⅴ亚洲精品中文乱码| 欧美专区日韩专区| 亚洲一区二区美女| 欧美三级中文字幕在线观看| 亚洲欧洲综合另类| 91国偷自产一区二区三区成为亚洲经典 | 日产国产欧美视频一区精品| 欧美视频完全免费看| 蜜臀av国产精品久久久久| 欧美日本国产视频| 欧美成人性福生活免费看| 欧美va亚洲va国产综合| 久久99国产精品免费| 欧美成人三级在线| 国产一区久久久| 国产欧美日韩在线观看| 成人一区二区三区中文字幕| 欧美国产一区视频在线观看| 成人动漫av在线| 一卡二卡三卡日韩欧美| 欧美日韩一区二区三区不卡| 亚洲自拍偷拍网站| 美女免费视频一区二区| 91精品综合久久久久久| 日本一不卡视频| 精品盗摄一区二区三区| 国产激情偷乱视频一区二区三区 | 国产精品538一区二区在线| 国产精品午夜在线观看| 94-欧美-setu| 日韩综合小视频| 精品国一区二区三区| 粉嫩蜜臀av国产精品网站| 中文字幕人成不卡一区| 欧美日韩三级视频| 国产在线精品一区二区不卡了| 国产欧美一区二区精品性色 | 一区二区久久久久久| 91精品婷婷国产综合久久性色| 黄色日韩三级电影| 亚洲欧美一区二区三区国产精品| 欧美吻胸吃奶大尺度电影| 看国产成人h片视频| 日韩一区欧美小说| 欧美一区二区三区精品| 不卡一区二区中文字幕| 五月天国产精品| 国产欧美一区二区三区网站 | 亚洲国产一区二区视频| 日韩欧美一区中文| 99精品国产99久久久久久白柏 | 成人激情免费网站| 日本特黄久久久高潮| 国产精品乱码人人做人人爱| 91麻豆精品国产91久久久久久 | 91精品国产91久久综合桃花| 国产成人综合精品三级| 午夜久久久久久久久| 国产精品福利一区| 精品久久久久久久人人人人传媒| 99精品欧美一区| 国产精一区二区三区| 天涯成人国产亚洲精品一区av| 中日韩av电影| 久久久午夜精品理论片中文字幕| 欧美日韩国产综合一区二区| 成人午夜在线视频| 激情久久五月天| 日本一不卡视频| 性久久久久久久久| 一级中文字幕一区二区| 中文字幕亚洲电影| 国产亚洲精久久久久久| 欧美电视剧免费观看| 欧美酷刑日本凌虐凌虐| 日本精品一级二级| 94-欧美-setu| 色综合天天综合网天天狠天天| 国产精品亚洲成人| 国产毛片一区二区| 国产麻豆精品theporn| 日韩在线a电影| 偷拍一区二区三区| 亚洲高清免费视频| 视频在线观看一区二区三区| 伊人婷婷欧美激情| 亚洲精品高清在线观看| 一区二区三区不卡在线观看 | 中文字幕av在线一区二区三区| 日韩欧美另类在线| 精品福利视频一区二区三区| 精品欧美乱码久久久久久| 日韩一级片网站| 精品久久久久久久久久久院品网| 日韩三级免费观看| 久久综合色一综合色88| 久久这里只有精品6| 国产女人水真多18毛片18精品视频| 久久午夜免费电影| 欧美国产激情一区二区三区蜜月| 久久久精品黄色| 中文字幕在线一区免费| 一级日本不卡的影视| 夜色激情一区二区| 免费高清不卡av| 国产69精品久久久久毛片| 国产91精品免费| 日本精品一区二区三区高清 | 久久蜜桃香蕉精品一区二区三区| 欧美电影免费观看高清完整版| 久久久久久久久久久久久夜| 国产精品美女久久久久久久久| 日韩毛片一二三区| 日韩av一区二区三区四区| 激情久久久久久久久久久久久久久久| 国产成人精品一区二| 在线亚洲+欧美+日本专区| 91精品国产色综合久久ai换脸| 精品久久久久久久久久久院品网 | 色8久久精品久久久久久蜜| 欧美日韩精品一二三区| 精品国产成人系列| 亚洲视频一二区| 麻豆极品一区二区三区| 91视视频在线观看入口直接观看www| 欧美最新大片在线看| 2020国产精品自拍| 一区二区三区在线免费观看| 蜜桃视频一区二区| 一道本成人在线| 久久蜜桃av一区精品变态类天堂| 亚洲女同女同女同女同女同69| 日本欧美在线观看| 成人综合日日夜夜| 日韩视频在线观看一区二区| 国产精品入口麻豆九色| 日韩影院在线观看| 97超碰欧美中文字幕| 日韩欧美色综合网站| 一区二区三区日韩在线观看| 韩国女主播成人在线观看| 欧美在线不卡视频| 国产日产欧美一区| 日韩高清不卡一区| 色天使色偷偷av一区二区| 久久精品视频在线免费观看| 日韩精品亚洲一区二区三区免费| 国产·精品毛片| 日韩欧美一二三四区| 亚洲18女电影在线观看| 91丝袜国产在线播放| 国产亚洲人成网站| 青青草精品视频| 欧美性大战久久久久久久 | 91影院在线观看| 久久久精品蜜桃| 久久精品国产澳门| 欧美二区三区的天堂| 亚洲最大成人综合| 91尤物视频在线观看| 国产精品天干天干在观线| 久久精品国产澳门| 精品日产卡一卡二卡麻豆| 亚洲国产成人av| 欧美日韩综合在线免费观看| 日韩一区有码在线| 白白色 亚洲乱淫| 国产农村妇女精品| 成人综合在线网站| 欧美激情一区在线| av成人老司机| 亚洲图片欧美激情| 在线观看亚洲a| 午夜成人免费视频| 日韩欧美国产午夜精品|