⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stat_s.cpp

📁 一本叫自己动手写嵌入式操作系统的书的源代码,作者是蓝枫叶,详细介绍了如何写一个嵌入式操作系统,而不是操作系统
💻 CPP
字号:
//***********************************************************************/
//    Author                    : Garry
//    Original Date             : Oct,22 2006
//    Module Name               : STAT_S.CPP
//    Module Funciton           : 
//                                Countains CPU overload ratio statistics related
//                                data structures and routines.
//    Last modified Author      :
//    Last modified Date        :
//    Last modified Content     :
//                                1.
//                                2.
//    Lines number              :
//***********************************************************************/

#include "..\INCLUDE\StdAfx.h"
#include "..\INCLUDE\STAT_S.H"
#include "..\INCLUDE\STATCPU.H"
#include "..\INCLUDE\L_STDIO.H"

__KERNEL_THREAD_OBJECT*  lpStatKernelThread = NULL;  //Used to save statistics kernel
                                                     //thread's object.

//
//The following routine is used to print out all devices information
//in system.
//
static VOID ShowDevList()
{
	__DEVICE_OBJECT*   lpDevObject = IOManager.lpDeviceRoot;
	BYTE strInfo[80];
	
	PrintLine("    Device Name    Attribute    BlockSize    RdSize/WrSize");
	while(lpDevObject)
	{
		sprintf(strInfo,"    %11s   0x%8X    %9d    %d/%d",
			lpDevObject->DevName,
			lpDevObject->dwAttribute,
			lpDevObject->dwBlockSize,
			lpDevObject->dwMaxReadSize,
			lpDevObject->dwMaxWriteSize);
		PrintLine(strInfo);
		lpDevObject = lpDevObject->lpNext;
	}
}

//
//This routine is used to print out CPU statistics information.
//
static VOID ShowStatInfo()  //Display the statistics information.
{
	__THREAD_STAT_OBJECT* lpStatObj = &StatCpuObject.IdleThreadStatObj;
	char Buff[MAX_BUFFER_SIZE];

	//Print table header.
	PrintLine("      Thread Name  Thread ID  1s usage  60s usage  5m usage");
	PrintLine("    -------------  ---------  --------  ---------  --------");
	//For each kernel thread,print out statistics information.
	do{
		sprintf(Buff,"    %13s  %9X  %6d.%d  %7d.%d  %6d.%d",
			lpStatObj->lpKernelThread->KernelThreadName,
			lpStatObj->lpKernelThread->dwThreadID,
			lpStatObj->wCurrPeriodRatio / 10,
			lpStatObj->wCurrPeriodRatio % 10,
			lpStatObj->wOneMinuteRatio  / 10,
			lpStatObj->wOneMinuteRatio  % 10,
			lpStatObj->wMaxStatRatio    / 10,
			lpStatObj->wMaxStatRatio    % 10
			//lpStatObj->TotalCpuCycle.dwHighPart,
			//lpStatObj->TotalCpuCycle.dwLowPart
			);
		PrintLine(Buff);

		lpStatObj = lpStatObj->lpNext;
	}while(lpStatObj != &StatCpuObject.IdleThreadStatObj);
}

//
//Entry point of the statistics kernel thread.
//
DWORD StatThreadRoutine(LPVOID lpData)
{
	__TIMER_OBJECT*           lpTimer  = NULL;
	__KERNEL_THREAD_MESSAGE   msg;

	//Set a timer,to calculate statistics information periodic.
	lpTimer = (__TIMER_OBJECT*)System.SetTimer((__COMMON_OBJECT*)&System,
		KernelThreadManager.lpCurrentKernelThread,
		1024,
		1000,
		NULL,
		NULL,
		TIMER_FLAGS_ALWAYS);

	while(TRUE)
	{
		if(GetMessage(&msg)) //Get message to process.
		{
			switch(msg.wCommand)
			{
			case KERNEL_MESSAGE_TIMER:
				StatCpuObject.DoStat();  //Do statistics.
				break;
			case STAT_MSG_SHOWSTATINFO:
				ShowStatInfo();
				break;
			case STAT_MSG_LISTDEV:  //List the device information.
				ShowDevList();
				break;
			case STAT_MSG_TERMINAL:  //Should exit.
				goto __EXIT;
			default:
				break;
			}
		}
	}

__EXIT:
	//Cancel the timer first.
	System.CancelTimer((__COMMON_OBJECT*)&System,
		(__COMMON_OBJECT*)lpTimer);
	return 0L;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -