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

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

?? arm_00_ostaskmanager.c

?? uCOS在LPC213X上的移植。適合ARM嵌入式系統(tǒng)初學(xué)者。
?? C
字號(hào):
/**********************************************************************************************
本程序只供學(xué)習(xí)使用,不得用于其它任何用途,否則后果自負(fù)。

  ARM_OS_main.c file

  LPC213x上的操作系統(tǒng)——ARM_OS

  作者:heciang
  聯(lián)系電話:13811129591
  QQ:176780142
  Email:heciang@126.com
  建立日期:2006-5-1
  修改日期:2006-5-15
  最后修改時(shí)間:2006-08-25
  版本:V1.0
 
  Copyright(C) Computer-lov 2006-2016
  All rights reserved
**********************************************************************************************/


#include "CPU.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)-0x40000000);  //顯示任務(wù)ID號(hào)(PID)。
                                       //由于LPC213X系列的RAM起始地址在0x40000000,減掉顯示時(shí)會(huì)比較短
									   //當(dāng)然,不減也無所謂。
 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.475  /*LPC213X 開發(fā)板上參考電壓為1K電阻跟3K電阻分壓3.3V所得,為2.475V*/

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

 prints("ADC3 voltage: ",0);
 value=read_ADC(3);	          //通道ADC3的電壓
 result=REF_VOL*10000;		  //換算成電壓,結(jié)果為多少mV的10倍
 result=result*value/1023;
 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,1);		 //顯示電壓
}
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////顯示內(nèi)核溫度////////////////////////////////
void DisplayCoreTemperature(void)
{
 prints("Core temperature: ",0);
 prints("Sorry! LPC213x MCU have no Temperature Sensor!",1);
 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一区二区三区免费野_久草精品视频
激情成人综合网| 成人免费的视频| 亚洲欧美一区二区在线观看| 欧美妇女性影城| 不卡的av在线| 国产一区欧美一区| 日韩1区2区日韩1区2区| 一区二区三区四区不卡在线| 国产欧美精品一区二区色综合朱莉 | 懂色av一区二区夜夜嗨| 婷婷开心激情综合| 夜夜嗨av一区二区三区中文字幕| 久久你懂得1024| 日韩欧美在线网站| 欧美精品 日韩| 欧美日韩一区二区三区免费看| 夫妻av一区二区| 国产在线国偷精品免费看| 日韩精品色哟哟| 一区二区免费在线| 亚洲欧美日韩国产综合| 中文一区二区在线观看| 国产日韩精品一区| 国产色综合久久| 久久久久久久久久久99999| 日韩欧美国产一二三区| 欧美影院一区二区三区| www.欧美日韩| 91尤物视频在线观看| a4yy欧美一区二区三区| 国产mv日韩mv欧美| 成人中文字幕合集| 国产精品自拍一区| 国产91在线|亚洲| 国产成人综合视频| 成人av在线网| www.亚洲国产| 色久综合一二码| 欧美日韩在线播| 欧美精品粉嫩高潮一区二区| 欧美一区二区三区视频免费| 日韩欧美中文字幕一区| 亚洲精品一区二区三区影院| 2欧美一区二区三区在线观看视频| 亚州成人在线电影| 亚洲一二三区不卡| 奇米色一区二区| 老色鬼精品视频在线观看播放| 久久福利视频一区二区| 国产成人精品一区二| 99久久精品久久久久久清纯| 欧洲一区二区av| 91精品国产综合久久久蜜臀粉嫩| 日韩一区二区在线免费观看| 2020国产精品自拍| 日韩精品电影一区亚洲| 国产在线一区二区| 成年人国产精品| 欧美中文字幕不卡| 91精品国产福利在线观看| 久久九九99视频| 亚洲视频中文字幕| 天天综合网天天综合色| 久草在线在线精品观看| 99天天综合性| 欧美剧在线免费观看网站| 久久久久久99精品| 一区二区三区四区国产精品| 美国毛片一区二区三区| 99久久精品免费看| 欧美一区二区三区在线观看视频| 久久亚洲综合色| 亚洲午夜在线电影| 国产酒店精品激情| 色噜噜狠狠成人网p站| 精品美女被调教视频大全网站| 国产农村妇女毛片精品久久麻豆 | 久久嫩草精品久久久精品一| 亚洲欧洲另类国产综合| 三级一区在线视频先锋| 高清不卡一二三区| 91精品免费在线观看| 中文字幕一区在线观看视频| 日本人妖一区二区| www.日本不卡| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 精品国产一二三| 亚洲三级电影全部在线观看高清| 久久se精品一区二区| 一本一道综合狠狠老| 欧美成人vr18sexvr| 亚洲一线二线三线视频| 国产不卡在线视频| 日韩一级免费一区| 亚洲伊人色欲综合网| 成人听书哪个软件好| 日韩免费观看高清完整版| 亚洲精品国产一区二区精华液 | www.66久久| 欧美精品一区二区在线播放 | 国产成人av电影在线观看| 欧美日韩一区国产| 亚洲码国产岛国毛片在线| 国产精品一区二区在线观看网站| 在线播放91灌醉迷j高跟美女 | 久久久久久亚洲综合| 欧美aⅴ一区二区三区视频| 91久久久免费一区二区| 国产精品免费av| 91精品国产综合久久香蕉麻豆| 国产精品久久久久久久蜜臀 | 狠狠色丁香婷婷综合久久片| 欧美日韩一卡二卡| 一区二区三区四区不卡视频| 波多野结衣在线aⅴ中文字幕不卡| 精品国产91久久久久久久妲己| 亚洲一区影音先锋| 91色porny| 日韩美女精品在线| www.99精品| 综合色天天鬼久久鬼色| 不卡的电视剧免费网站有什么| 久久免费看少妇高潮| 久久精品国产第一区二区三区| 欧美精三区欧美精三区| 午夜视频在线观看一区| 欧美性色黄大片| 丝袜诱惑亚洲看片| 欧美日韩在线三级| 日韩专区中文字幕一区二区| 欧美日韩高清影院| 日韩高清中文字幕一区| 9191久久久久久久久久久| 午夜精品福利一区二区蜜股av| 欧美日韩一区视频| 日本亚洲一区二区| 欧美成人免费网站| 国产传媒久久文化传媒| 国产精品久久综合| 99久久久精品| 亚洲国产精品尤物yw在线观看| 欧美视频中文一区二区三区在线观看 | 欧美亚洲日本一区| 日韩电影在线免费| 精品国产91洋老外米糕| 国产69精品久久99不卡| 自拍av一区二区三区| 欧美色大人视频| 奇米色777欧美一区二区| 久久男人中文字幕资源站| 不卡一区在线观看| 亚洲午夜一二三区视频| 欧美一区二区三区白人| 国产一区二区三区黄视频 | 在线电影一区二区三区| 麻豆成人综合网| 国产亚洲人成网站| 一本色道a无线码一区v| 视频精品一区二区| 国产日韩欧美不卡在线| 色哟哟精品一区| 免费成人在线影院| 国产欧美日韩综合| 欧美网站一区二区| 激情综合色综合久久综合| 精品中文av资源站在线观看| 中文字幕欧美日本乱码一线二线| 日本道在线观看一区二区| 麻豆成人av在线| 国产精品成人一区二区艾草| 欧美群妇大交群中文字幕| 国产一区二区三区四区五区美女| 亚洲日韩欧美一区二区在线| 日韩午夜在线影院| 成人av电影在线网| 免费人成精品欧美精品| 国产精品乱人伦中文| 日韩一区二区影院| 99久久er热在这里只有精品15| 天天色综合成人网| 国产精品久久三| 欧美刺激午夜性久久久久久久| 懂色中文一区二区在线播放| 亚洲成人免费影院| 国产亚洲精品7777| 91精品国产色综合久久ai换脸| 成a人片国产精品| 狠狠色综合日日| 午夜久久电影网| 中文字幕一区二区在线播放| 日韩美女视频在线| 91官网在线观看| 国产激情精品久久久第一区二区 | 欧美日本不卡视频| 99久久综合国产精品| 免费成人你懂的| 亚洲国产精品麻豆| 中文子幕无线码一区tr| 日韩精品一区二区三区swag| 色婷婷av一区二区三区软件|