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

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

?? arm_00_ostaskmanager.c

?? 一個(gè)基于arm的
?? C
字號(hào):
/**********************************************************************************************
  ARM_00_OSTaskManager.c file
   
  作者:Computer-lov
  建立日期:2006-5-13
  修改日期:2006-5-15
  版本:V1.0
  版權(quán)所有,盜版必究。
  任何技術(shù)問(wèn)題可到我的博客上留言:    http://computer00.21ic.org
  Copyright(C) Computer-lov 2006-2016
  All rights reserved
**********************************************************************************************/


#include <ADuC7026.H>
#include "my_type.h"

#include "ARM_00_OS_TaskSwitch.H"
#include "ARM_00_OS_Core.H"
#include "UART.H"
#include "KEYS.H"
#include "Task.h"
#include "ADC.H"

/**********************************************************************************************
功能:顯示任務(wù)的PID號(hào)。
入口參數(shù)1:pcb。要顯示的任務(wù)的進(jìn)程控制塊地址。
返回:無(wú)。
**********************************************************************************************/
void DisplayPID(OSpcb * pcb)
{
 print_uint32(pcb->PID);  //顯示任務(wù)ID號(hào)(PID)
 send_a_byte(' ');
}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:顯示任務(wù)的CPU使用率。
入口參數(shù)1:pcb。要顯示的任務(wù)的進(jìn)程控制塊地址。
返回:無(wú)。
**********************************************************************************************/
void DisplayCPU(OSpcb * pcb)
{
 uint32 CpuUsedRatio;

 CpuUsedRatio=((pcb->RunTimeInThisRefreshPeriod)*100+TotalTime/2)/TotalTime;  //計(jì)算CPU使用率。加TotalTime/2是為了四舍無(wú)入
 pcb->TotalRunTime+=pcb->RunTimeInThisRefreshPeriod;  //累加任務(wù)的CPU使用總時(shí)間
 pcb->RunTimeInThisRefreshPeriod=0;   //清本次統(tǒng)計(jì)的時(shí)間
 if(CpuUsedRatio>=100)  //如果統(tǒng)計(jì)的結(jié)果大于100
  {
   CpuUsedRatio=99;  //結(jié)果為99
  }
 send_a_byte((CpuUsedRatio/10)+'0');  //顯示結(jié)果
 send_a_byte((CpuUsedRatio%10)+'0');
 send_a_byte('%');
 send_a_byte(' ');
 send_a_byte(' ');
}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:顯示任務(wù)使用CPU的總時(shí)間。
入口參數(shù)1:pcb。要顯示的任務(wù)的進(jìn)程控制塊地址。
返回:無(wú)。
**********************************************************************************************/
void DisplayCPUTime(OSpcb * pcb)
{
 uint32 Time;   //用來(lái)保存時(shí)間
 uint8 H,M,S;   //用來(lái)保存時(shí),分,秒
 
 Time=(uint32)((pcb->TotalRunTime)/((MaxOfTimer0+1)*100));  //計(jì)算總時(shí)間。結(jié)果為多少秒。
 S=Time%60;   //計(jì)算秒
 Time/=60;
 M=Time%(60);  //計(jì)算分
 Time/=60;
 H=Time%(24);  //計(jì)算時(shí)
 
 send_a_byte((H/10)+'0'); //顯示時(shí)
 send_a_byte((H%10)+'0');
 send_a_byte(':');
 send_a_byte((M/10)+'0'); //顯示分
 send_a_byte((M%10)+'0');
 send_a_byte(':');
 send_a_byte((S/10)+'0'); //顯示秒
 send_a_byte((S%10)+'0');
 send_a_byte(' ');
 send_a_byte(' ');
}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:顯示內(nèi)存使用量
入口參數(shù)1:pcb。要顯示的任務(wù)的進(jìn)程控制塊地址。
返回:無(wú)。
**********************************************************************************************/
void DispalyMemroyUsed(OSpcb * pcb)
{
 print_uint32(pcb->StackLength);   //顯示內(nèi)存使用量
 send_a_byte('B');               //顯示單位
 send_a_byte(' ');
 send_a_byte(' ');
}
//////////////////////////////////End of function//////////////////////////////////////////////


/**********************************************************************************************
功能:顯示任務(wù)所處的狀態(tài)。
入口參數(shù)1:pcb。要顯示的任務(wù)的進(jìn)程控制塊地址。
返回:無(wú)。
**********************************************************************************************/
void DispalyStatus(OSpcb * pcb)
{
 switch(pcb->Status)    //根據(jù)狀態(tài)來(lái)顯示
  {
   case OSInReadyStatus:      prints("Ready  ",0);break;  //就緒態(tài)
   case OSInDelayStatus:      prints("Delay  ",0);break;  //延時(shí)態(tài)
   case OSInSuspendStatus:    prints("Suspend",0);break;  //掛起態(tài)
   default:break;
  }
}
//////////////////////////////////End of function//////////////////////////////////////////////



#define REF_VOL  2.5

//////////////////////////////顯示內(nèi)核電壓////////////////////////////////////
void DisplayCoreVoltage(void)
{
 uint16 value;
 uint32 result;
 uint8 s_result[10];

 prints("Core voltage: ",0);
 value=2*read_ADC(0x13);	  //通道號(hào)為0x13的電壓為1/2電源電壓
 result=REF_VOL*10000;		  //換算成電壓,結(jié)果為多少mV的10倍
 result=result*value/4095;
 s_result[9]=0;				  //將結(jié)果轉(zhuǎn)換成字符串
 s_result[8]=' ';
 s_result[7]='V';
 s_result[6]='m';
 s_result[5]='0'+result%10;
 result/=10;
 s_result[4]='.';
 s_result[3]='0'+result%10;
 result/=10;
 s_result[2]='0'+result%10;
 result/=10;
 s_result[1]='0'+result%10;
 result/=10;
 s_result[0]='0'+result%10;
 prints("    ",0);
 prints(s_result,0);		 //顯示電壓
 prints("  ",0);
}
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////顯示內(nèi)核溫度////////////////////////////////
void DisplayCoreTemperature(void)
{
 uint16 value;
 sint32 result;
 uint8 s_result[10];

 prints("Core temperature: ",0);
 value=read_ADC(0x10);		   //通道號(hào)為0x10的是溫度傳感器電壓
 result=REF_VOL*10000;		   //換算成電壓,結(jié)果為多少mV的10倍
 result=result*value/4095;
 result=((7800-result)*10/13)+250;	 //溫度是25℃時(shí),輸出電壓為780mV,每升高1℃,輸出電壓降低1.3mV
                                     //計(jì)算結(jié)果為多少度的10倍
 if(result<0)				   //如果溫度小于0度
  {
   s_result[0]='-';			//顯示負(fù)號(hào)
   result*=-1;				//將結(jié)果換成正的
  }
 else
  {
   s_result[0]=' ';		   //不顯示負(fù)號(hào)
  }
 s_result[6]=0;			   //將溫度值轉(zhuǎn)換成字符串,供顯示用
 s_result[5]='0'+result%10;
 result/=10;
 s_result[4]='.';
 s_result[3]='0'+result%10;
 result/=10;
 s_result[2]='0'+result%10;
 result/=10;
 s_result[1]='0'+result%10;
 prints(s_result,0);		//顯示溫度結(jié)果
 prints("℃",1);
}
//////////////////////////////////////////////////////////////////////////////


/**********************************************************************************************
功能:任務(wù)管理器。
入口參數(shù):無(wú)。
返回:無(wú)。
備注:優(yōu)先級(jí)被設(shè)置為1,處于高的優(yōu)先級(jí)。
**********************************************************************************************/
void OSTaskManager(void)
{
 OSpcb * pcb;    //
 uint32 TempTime;    //TempTime用來(lái)保存 在顯示任務(wù)管理器信息所花費(fèi)的時(shí)間
 uint32 DelayCount=RefreshPeriod;   //延時(shí)多少個(gè)時(shí)鐘節(jié)拍刷新一次任務(wù)管理器
 uint32 * p;     //
 uint32 i;       //
 uint32 CpuUsedRatio;   //保存CPU使用率
 uint32 nBytes;         //保存申請(qǐng)內(nèi)存的字節(jié)數(shù)
 
 uint32 PrinterDeviceAddr;   //打印機(jī)設(shè)備的入口地址
 
 PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID);  //獲取打印機(jī)設(shè)備的入口地址
 OSRequestDevice(PrinterDeviceAddr,0);   //申請(qǐng)使用打印機(jī)
 
 prints("",1);                   //顯示任務(wù)啟動(dòng)
 prints(OSCurrentPcb->Title,0);
 prints(" Start.",1);
 
 OSFreeDevice(PrinterDeviceAddr);   //釋放打印機(jī)
 
 ADC_init();   //ADC初始化。用來(lái)檢測(cè)內(nèi)核電壓以及溫度

 while(1)
  {
   OSTaskDelay(DelayCount);    //延時(shí)DelayCount個(gè)時(shí)鐘節(jié)拍
   
   pcb=OSCurrentPcb;       //當(dāng)前運(yùn)行的任務(wù)。即任務(wù)管理器本身
   TempTime=pcb->RunTimeInThisRefreshPeriod;   //保存這時(shí)的時(shí)間
   
   OSRequestDevice(PrinterDeviceAddr,0);   //申請(qǐng)使用打印機(jī)
   
   prints("",1);       //換行
   prints("",1);
   prints("TaskName              PID  CPU   CPUTime    MemoryUsed   Status",1);   //顯示表頭
   prints("---------------------------------------------------------------",1);
   
   nBytes=OSSizePerBlock*(((TaskAmount+1)*sizeof(p)+OSSizePerBlock-1)/OSSizePerBlock);  //計(jì)算需要申請(qǐng)多少字節(jié)內(nèi)存
   
   p=(uint32 *)OSMalloc(nBytes);  //申請(qǐng)一塊內(nèi)存,用來(lái)保存所有任務(wù)的pcb指針。供下面顯示用
   OSCurrentPcb->StackLength+=nBytes;   //申請(qǐng)內(nèi)存后,調(diào)節(jié)任務(wù)管理器的內(nèi)存使用長(zhǎng)度

   i=0;
   
   prints(pcb->Title,0);   //顯示任務(wù)名字
   DisplayPID(pcb);         //顯示任務(wù)的的PID
   TempTime=pcb->RunTimeInThisRefreshPeriod-TempTime;  //計(jì)算出前面顯示花費(fèi)的時(shí)間
   DisplayCPU(pcb);        //顯示任務(wù)管理器所使用的CPU使用率
   DisplayCPUTime(pcb);    //顯示任務(wù)管理器所使用的CPU總時(shí)間
   DispalyMemroyUsed(pcb);  //顯示任務(wù)管理器所使用的內(nèi)存
   prints("Running",0);     //顯示任務(wù)管理器的狀態(tài)為運(yùn)行狀態(tài)
   prints("",1);           //換行
   
   OSEnterCritical();   //進(jìn)入臨界段
   
   pcb=OSReadyList->Next;   //pcb保存就緒表的下一個(gè)。就緒表的第一個(gè)為當(dāng)前運(yùn)行的任務(wù),即任務(wù)管理器
   while((pcb->Next)!=(OSpcb *)0)   //遍歷整個(gè)就緒表
    {
     p[i++]=(uint32)pcb;    //保存就緒表的pcb
     pcb=pcb->Next;         //移向就緒表的下一個(gè)
    }
   p[i++]=(uint32)pcb;     //最后一個(gè)為空閑任務(wù)的pcb。
   
   
   //計(jì)算CPU使用率并保存至CpuUsedRatio。CPU使用率是100%減掉空閑任務(wù)的使用率
   CpuUsedRatio=100-((pcb->RunTimeInThisRefreshPeriod)*100+TotalTime/2)/TotalTime;
   pcb=OSDelayList;   //延時(shí)態(tài)表
   while((pcb->Next)!=(OSpcb *)0)  //遍歷整個(gè)延時(shí)態(tài)表
    {
     p[i++]=(uint32)pcb;  //保存延時(shí)態(tài)表的pcb
     pcb=pcb->Next;      // 移向下一個(gè)
    }
   pcb=OSSuspendList;  //掛起態(tài)表
   while((pcb->Next)!=(OSpcb *)0)   //遍歷整個(gè)掛起態(tài)表
    {
     p[i++]=(uint32)pcb;   //保存掛起態(tài)pcb
     pcb=pcb->Next;       //移向下一個(gè)
    }
   p[i]=0;        //結(jié)束
   OSExitCritical();   //退出臨界段
   i=0;   //準(zhǔn)備顯示任務(wù)信息
   while(p[i]!=0)   //直到結(jié)束為止
    {
     prints(((OSpcb *)(p[i]))->Title,0);   //顯示任務(wù)名
     DisplayPID((OSpcb *)(p[i]));          //顯示任務(wù)ID
     DisplayCPU((OSpcb *)(p[i]));          //顯示任務(wù)CPU使用率
     DisplayCPUTime((OSpcb *)(p[i]));      //顯示任務(wù)使用CPU的總時(shí)間
     DispalyMemroyUsed((OSpcb *)(p[i]));   //顯示任務(wù)使用的內(nèi)存量
     DispalyStatus((OSpcb *)(p[i]));       //顯示任務(wù)當(dāng)前所處的狀態(tài)
     prints("",1);                         //換行
     i++;                                  //移到下一個(gè)
    }
   
   prints("",1);                  //顯示CPU使用率
   prints("CPU used ratio: ",0);
   if(CpuUsedRatio>=100)   //如果CPU使用率為100%,
    {
     prints("100%",1);  //則顯示100%
    }
   else
    {
     send_a_byte(CpuUsedRatio/10+'0');  //顯示十位
     send_a_byte(CpuUsedRatio%10+'0');  //顯示個(gè)位
     prints("%",1);
    }
   prints("Total memory: ",0);   //顯示總內(nèi)存量
   print_uint32(OSGetMemoryPoolSize());
   prints("B   Memory used: ",0);   //顯示內(nèi)存使用量
   i=OSMemoryStatistic();    //獲取內(nèi)存使用量
   print_uint32(i);
   prints("B   Memory used ratio: ",0);  //顯示內(nèi)存使用率
   i=i*100/OSGetMemoryPoolSize();    //計(jì)算內(nèi)存使用率
   send_a_byte(i/10+'0');
   send_a_byte(i%10+'0');
   prints("%",1);
   
   DisplayCoreVoltage();   //顯示內(nèi)核電壓
   DisplayCoreTemperature();   //顯示內(nèi)核溫度
   prints("",1);
   
   
   OSFreeDevice(PrinterDeviceAddr);  //釋放打印機(jī)使用權(quán)
   
   OSFree((uint32)p,nBytes);   //釋放p的內(nèi)存
   OSCurrentPcb->StackLength-=nBytes;   //調(diào)整任務(wù)管理器的內(nèi)存使用數(shù)量
  
   TempTime+=OSCurrentPcb->RunTimeInThisRefreshPeriod;  //計(jì)算上面顯示所花費(fèi)的時(shí)間
   DelayCount=RefreshPeriod-(TempTime)/(MaxOfTimer0+1);  //計(jì)算下一次統(tǒng)計(jì)資源,應(yīng)該需要多少個(gè)時(shí)鐘節(jié)拍                                                            //因?yàn)轱@示信息時(shí)要花費(fèi)時(shí)間,應(yīng)該將其減去
  }
}
//////////////////////////////////End of function//////////////////////////////////////////////

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产人久久人人人人爽| 亚洲国产乱码最新视频| 91福利视频久久久久| 另类中文字幕网| 中文字幕一区二区三区在线不卡 | 国产精品网曝门| 蜜臀va亚洲va欧美va天堂| 黑人精品欧美一区二区蜜桃| 成人免费一区二区三区在线观看| 日韩欧美中文字幕精品| 一本到不卡免费一区二区| 国产精品一区二区在线播放| 日韩高清不卡在线| 伊人夜夜躁av伊人久久| 国产午夜久久久久| 欧美一级淫片007| 欧美无人高清视频在线观看| av午夜一区麻豆| 国产一区二区三区在线观看免费| 日本不卡一区二区| 一区二区三区四区在线| 日韩美女视频一区二区 | 国产精品视频一区二区三区不卡| 欧美大片在线观看一区二区| 欧美日韩一区成人| 色综合久久综合| 99视频有精品| thepron国产精品| 国产河南妇女毛片精品久久久| 免费成人你懂的| 蜜桃精品在线观看| 蜜桃一区二区三区在线| 欧美a级理论片| 热久久免费视频| 日本午夜一区二区| 日韩av网站在线观看| 免费成人在线视频观看| 蜜桃精品在线观看| 久久电影网电视剧免费观看| 久久精品国产一区二区三| 日本欧美一区二区在线观看| 日本午夜一区二区| 免费看精品久久片| 奇米精品一区二区三区在线观看| 免费成人美女在线观看.| 美国精品在线观看| 麻豆91精品91久久久的内涵| 久久99最新地址| 国产高清久久久| 成人小视频在线| 色综合一区二区| 欧洲人成人精品| 91精品免费在线观看| 精品国产网站在线观看| 日本一区二区三区久久久久久久久不| 国产女人aaa级久久久级| 国产精品毛片大码女人| 亚洲人亚洲人成电影网站色| 一区二区三区在线不卡| 青青草97国产精品免费观看无弹窗版| 久久超碰97中文字幕| 国产不卡在线视频| 色悠悠亚洲一区二区| 69堂国产成人免费视频| 欧美成人vr18sexvr| 国产欧美精品日韩区二区麻豆天美| 国产精品久久久久一区| 亚洲成av人片在线| 国模娜娜一区二区三区| 91丨九色丨尤物| 91精品国产91久久久久久最新毛片| 久久免费的精品国产v∧| 国产精品美女久久久久久久网站| 夜夜爽夜夜爽精品视频| 久久精品国产999大香线蕉| 成人午夜激情在线| 在线观看成人免费视频| 久久蜜桃av一区二区天堂| 一区二区三区视频在线看| 蜜臀va亚洲va欧美va天堂| 播五月开心婷婷综合| 欧美肥妇free| 欧美国产精品v| 午夜精品一区二区三区免费视频| 国产麻豆精品视频| 欧美日韩国产综合草草| 国产清纯白嫩初高生在线观看91 | 欧美日韩二区三区| 久久亚洲精品小早川怜子| 有码一区二区三区| 国产在线麻豆精品观看| 一本久久精品一区二区| 日韩色在线观看| 一区二区高清在线| 国产**成人网毛片九色| 日韩区在线观看| 亚洲日本va午夜在线影院| 国内精品视频一区二区三区八戒| 91国产丝袜在线播放| 久久精品夜色噜噜亚洲a∨| 日日骚欧美日韩| 97精品国产露脸对白| 久久免费美女视频| 日本欧美一区二区三区| 一本高清dvd不卡在线观看| 久久久久久久网| 免费av网站大全久久| 日本电影亚洲天堂一区| 中文字幕精品综合| 久久99国产精品久久99| 欧美男生操女生| 一区二区三区欧美久久| av电影在线观看一区| 欧美激情综合在线| 国内精品伊人久久久久影院对白| 7777精品伊人久久久大香线蕉超级流畅 | 中文字幕精品综合| 国产主播一区二区| 91精品国产欧美日韩| 一级女性全黄久久生活片免费| 成人免费黄色大片| 国产婷婷色一区二区三区四区| 激情五月播播久久久精品| 欧美喷潮久久久xxxxx| 一个色综合网站| 欧洲视频一区二区| 亚洲综合色噜噜狠狠| 91社区在线播放| 亚洲欧洲制服丝袜| 色婷婷久久99综合精品jk白丝| 国产精品久久一级| 成人深夜视频在线观看| 国产精品理论在线观看| 国产成人av一区二区三区在线观看| 日韩欧美国产1| 裸体歌舞表演一区二区| 精品久久久三级丝袜| 看电视剧不卡顿的网站| 日韩美女一区二区三区四区| 久久福利资源站| 久久久久久久综合日本| 成人va在线观看| 一区在线中文字幕| 色噜噜狠狠色综合中国| 亚洲在线观看免费视频| 欧美日韩精品一区二区三区四区 | 亚洲第一成年网| 欧美日韩精品系列| 欧美a级理论片| 久久综合九色综合欧美亚洲| 国产高清亚洲一区| 亚洲丝袜美腿综合| 欧美日韩一区精品| 麻豆精品国产传媒mv男同| 久久亚洲综合色| av福利精品导航| 亚洲不卡在线观看| 精品国免费一区二区三区| 成人自拍视频在线| 曰韩精品一区二区| 日韩欧美激情在线| 国产成人在线网站| 亚洲精品视频在线观看免费| 欧美日韩国产电影| 国产精品资源在线| 日韩理论片一区二区| 欧美日韩免费一区二区三区视频 | 一本大道av一区二区在线播放| 亚洲h在线观看| 精品成人一区二区三区| av电影一区二区| 日韩激情av在线| 国产喷白浆一区二区三区| 色8久久人人97超碰香蕉987| 首页国产欧美久久| 久久精品亚洲乱码伦伦中文| 在线视频欧美精品| 激情综合色播五月| 亚洲日本韩国一区| 日韩女优av电影| 99国内精品久久| 日本中文在线一区| 中文字幕免费在线观看视频一区| 欧美日韩一区二区三区在线| 国产精品亚洲综合一区在线观看| 樱桃国产成人精品视频| 久久综合九色综合97_久久久| 色丁香久综合在线久综合在线观看| 激情另类小说区图片区视频区| 亚洲欧美日韩在线播放| 欧美精品一区二区三区很污很色的| 91视频国产观看| 国产一区二区伦理| 亚洲mv在线观看| 1024精品合集| 国产午夜精品美女毛片视频| 欧美一区二区三区系列电影| 99re视频这里只有精品| 国产成人免费视频一区| 日韩成人午夜电影|