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

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

?? arm_00_ostaskmanager.bak

?? 一個(gè)基于arm的
?? BAK
字號(hào):
/**********************************************************************************************
  ARM_00_OSTaskManager.c file
   
  作者:Computer-lov
  建立日期:2006-5-13
  修改日期:2006-5-15
  版本:V1.0
  版權(quán)所有,盜版必究。
  任何技術(shù)問題可到我的博客上留言:    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)程控制塊地址。
返回:無。
**********************************************************************************************/
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)程控制塊地址。
返回:無。
**********************************************************************************************/
void DisplayCPU(OSpcb * pcb)
{
 uint32 CpuUsedRatio;

 CpuUsedRatio=((pcb->RunTimeInThisRefreshPeriod)*100+TotalTime/2)/TotalTime;  //計(jì)算CPU使用率。加TotalTime/2是為了四舍無入
 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)程控制塊地址。
返回:無。
**********************************************************************************************/
void DisplayCPUTime(OSpcb * pcb)
{
 uint32 Time;   //用來保存時(shí)間
 uint8 H,M,S;   //用來保存時(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)程控制塊地址。
返回:無。
**********************************************************************************************/
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)程控制塊地址。
返回:無。
**********************************************************************************************/
void DispalyStatus(OSpcb * pcb)
{
 switch(pcb->Status)    //根據(jù)狀態(tà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/4096;
 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/4096;
 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ù):無。
返回:無。
備注:優(yōu)先級(jí)被設(shè)置為1,處于高的優(yōu)先級(jí)。
**********************************************************************************************/
void OSTaskManager(void)
{
 OSpcb * pcb;    //
 uint32 TempTime;    //TempTime用來保存 在顯示任務(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初始化。用來檢測(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)存,用來保存所有任務(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//////////////////////////////////////////////

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品日韩一本| 欧美一区二区二区| 免费人成精品欧美精品| 国产目拍亚洲精品99久久精品| 91久久奴性调教| 国产成人精品综合在线观看| 亚洲电影一级片| 亚洲天堂av一区| 国产午夜精品一区二区| 日韩一区二区在线看| 一本色道久久综合精品竹菊| 国产毛片精品视频| 日韩国产欧美在线观看| 樱花影视一区二区| 亚洲婷婷在线视频| 国产欧美精品一区二区色综合朱莉 | 99re在线精品| 国产高清精品网站| 精品一区二区三区视频在线观看| 亚洲综合丝袜美腿| 一区二区视频免费在线观看| 日本一区二区免费在线| 久久综合色鬼综合色| 制服丝袜亚洲播放| 欧美日韩亚洲综合一区二区三区| 91在线小视频| 成人av在线影院| 成人av在线影院| 成人黄色777网| 国产精品一卡二卡在线观看| 精品一区二区三区日韩| 精品在线播放免费| 极品少妇一区二区三区精品视频| 日韩电影一区二区三区四区| 偷窥少妇高潮呻吟av久久免费| 一个色综合网站| 亚洲靠逼com| 一区二区三区不卡在线观看 | 国产精品国产三级国产aⅴ中文| 国产亚洲精品精华液| 久久这里只有精品首页| 精品盗摄一区二区三区| 精品动漫一区二区三区在线观看| 欧美α欧美αv大片| 欧美mv和日韩mv的网站| 2019国产精品| 国产亚洲欧美色| 亚洲国产精品成人综合色在线婷婷 | 日韩午夜精品视频| 欧美刺激脚交jootjob| 精品久久久久久久久久久院品网| 欧美精品一区二区久久婷婷| 久久老女人爱爱| 国产女同性恋一区二区| 亚洲天堂成人网| 艳妇臀荡乳欲伦亚洲一区| 午夜精品久久久久久| 秋霞午夜av一区二区三区| 国产一区二区在线看| 国产成人亚洲综合a∨婷婷| 成人黄色小视频在线观看| 91丨国产丨九色丨pron| 欧美在线综合视频| 欧美一区二区三区视频在线观看 | 国产精品国产自产拍在线| 亚洲视频一二区| 日韩在线观看一区二区| 国模大尺度一区二区三区| 成人av中文字幕| 欧美日韩国产成人在线免费| 日韩欧美国产1| 亚洲国产精品精华液2区45| 一区二区三区精品视频在线| 青娱乐精品视频| 成人涩涩免费视频| 欧洲国产伦久久久久久久| 精品奇米国产一区二区三区| ●精品国产综合乱码久久久久 | 久久91精品久久久久久秒播| 波波电影院一区二区三区| 欧美色综合久久| 久久综合久久综合久久| 亚洲免费在线视频一区 二区| 日韩福利电影在线| 成人精品免费网站| 9191精品国产综合久久久久久 | 亚洲视频在线一区观看| 美女视频一区在线观看| 99久久伊人久久99| 欧美一卡2卡三卡4卡5免费| 国产精品日韩精品欧美在线| 日韩不卡免费视频| 成a人片亚洲日本久久| 欧美一级欧美一级在线播放| 亚洲欧美日韩小说| 蜜臀91精品一区二区三区 | 日韩欧美一级在线播放| 中文字幕一区二区视频| 精品在线观看免费| 欧洲国内综合视频| 国产欧美在线观看一区| 亚洲bt欧美bt精品| 99综合电影在线视频| 欧美一区二区日韩| 亚洲国产精品久久人人爱蜜臀| 国产电影一区在线| 欧美一区二区三级| 亚洲成a人v欧美综合天堂| 岛国一区二区在线观看| 日韩一区二区三区av| 亚洲一区二区三区国产| 大尺度一区二区| 久久久三级国产网站| 奇米四色…亚洲| 欧美二区三区的天堂| 亚洲免费电影在线| 成人网在线播放| 国产欧美精品一区aⅴ影院 | 开心九九激情九九欧美日韩精美视频电影 | 中文字幕一区二区三区在线观看| 精品一区二区三区av| 日韩亚洲欧美一区二区三区| 亚洲一线二线三线视频| 一道本成人在线| 亚洲欧美在线aaa| 成人动漫视频在线| 国产欧美一区二区精品久导航| 国产在线麻豆精品观看| 日韩欧美专区在线| 青青草国产精品亚洲专区无| 91麻豆精品国产无毒不卡在线观看| 亚洲精品国产精品乱码不99 | 国产一区二区三区日韩| 精品国产伦一区二区三区观看体验| 日本亚洲三级在线| 日韩一级片在线观看| 日本美女一区二区| 日韩免费观看高清完整版| 久久精品国产一区二区三区免费看| 日韩写真欧美这视频| 免费人成在线不卡| 精品国内片67194| 国产一区二区三区在线观看免费视频| 欧美r级电影在线观看| 国产自产视频一区二区三区| 国产亚洲女人久久久久毛片| 高清不卡在线观看av| 国产精品福利影院| 色悠悠亚洲一区二区| 一个色综合av| 欧美一区二区在线免费观看| 国产麻豆视频精品| 国产精品久久久久久久久免费丝袜| av成人免费在线| 夜色激情一区二区| 欧美一区二区黄| 国产九九视频一区二区三区| 国产精品成人一区二区三区夜夜夜| 99re亚洲国产精品| 午夜婷婷国产麻豆精品| 精品三级在线观看| www.66久久| 亚洲永久精品国产| 精品嫩草影院久久| 99国产精品久久久| 日韩中文字幕一区二区三区| 欧美精品一区二区三区在线| 成人深夜视频在线观看| 亚洲综合精品久久| 亚洲精品一线二线三线| 91视视频在线直接观看在线看网页在线看| 一区二区三区av电影 | 久久久99精品久久| 99久精品国产| 日本在线不卡视频一二三区| 国产欧美日本一区二区三区| 欧美日韩一区国产| 韩国欧美国产一区| 亚洲啪啪综合av一区二区三区| 欧美一区二区久久久| gogo大胆日本视频一区| 人人精品人人爱| 亚洲欧美日韩中文播放| 日韩欧美中文字幕制服| 91麻豆精品视频| 久久91精品久久久久久秒播| 亚洲永久精品国产| 国产日韩欧美不卡在线| 欧美区视频在线观看| 成人手机电影网| 麻豆精品精品国产自在97香蕉| 亚洲色图.com| 欧美白人最猛性xxxxx69交| 91高清在线观看| 国产精品69毛片高清亚洲| 日韩电影在线免费观看| 一区二区三区加勒比av| 国产午夜精品久久| 日韩精品一区二区三区swag | 日韩欧美国产电影|