Esempio n. 1
0
/*
=================
Sys_GetProcessorFeatures
=================
*/
int Sys_GetProcessorFeatures( void )
{
	int features = 0;
	//cpuFeatures_t features = (cpuFeatures_t)0;
	CPUINFO cpuinfo;
	
	GetCPUInfo( &cpuinfo, CI_FALSE );

	if( HasCPUID() )              features |= CF_RDTSC;
	if( HasMMX( &cpuinfo ) )      features |= CF_MMX;
	if( HasMMXExt( &cpuinfo ) )   features |= CF_MMX_EXT;
	if( Has3DNow( &cpuinfo ) )    features |= CF_3DNOW;
	if( Has3DNowExt( &cpuinfo ) ) features |= CF_3DNOW_EXT;
	if( HasSSE( &cpuinfo ) )      features |= CF_SSE;
	if( HasSSE2( &cpuinfo ) )     features |= CF_SSE2;
	if( HasSSE3( &cpuinfo ) )     features |= CF_SSE3;
	if( HasSSSE3( &cpuinfo ) )    features |= CF_SSSE3;
	if( HasSSE4_1( &cpuinfo ) )   features |= CF_SSE4_1;
	if( HasSSE4_2( &cpuinfo ) )   features |= CF_SSE4_2;
	if( HasHTT( &cpuinfo ) )      features |= CF_HasHTT;
	if( HasSerial( &cpuinfo ) )   features |= CF_HasSerial;
	if( Is64Bit( &cpuinfo ) )     features |= CF_Is64Bit;

	return features;
}
Esempio n. 2
0
STCltHardwareInfo& CSystemInfo::GetHardwareInfo()
{
	GetCPUInfo();
	GetMainboardInfo();
	GetMemoryInfo();
	GetHarddiskInfo();
	GetSoundCardInfo();
	GetGraphicsInfo();
	GetNICInfo();
	GetCameraInfo();

	return m_stCltHardInfo;
}
Esempio n. 3
0
File: main.c Progetto: michalsc/AROS
int main()
{
    APTR ProcessorBase;
    IPTR args[6] = { 0, 0, 0, 0, 0, 0 };
    struct RDArgs *rda;
    int max_cpus = 0;
    int max_iter = 0;
    int req_width = 0, req_height = 0;
    char tmpbuf[200];
    int explicit_mode = 0;
    struct MsgPort *timerPort = CreateMsgPort();
    struct timerequest *tr = CreateIORequest(timerPort, sizeof(struct timerequest));
    struct TimerBase *TimerBase = NULL;
    struct timeval start_time;
    struct timeval now;

    struct Window *displayWin;
    struct BitMap *outputBMap = NULL;

    IPTR coreCount = 1;
    struct TagItem tags[] =
        {
            {GCIT_NumberOfProcessors, (IPTR)&coreCount},
            {0, (IPTR)NULL}};

    ProcessorBase = OpenResource(PROCESSORNAME);
    if (!ProcessorBase)
        return 0;

    KernelBase = OpenResource("kernel.resource");
    if (!KernelBase)
        return 0;

    if (timerPort)
    {
        FreeSignal(timerPort->mp_SigBit);
        timerPort->mp_SigBit = -1;
        timerPort->mp_Flags = PA_IGNORE;
    }

    if (tr)
    {
        if (!OpenDevice("timer.device", UNIT_VBLANK, (struct IORequest *)tr, 0))
        {
            TimerBase = (struct TimerBase *)tr->tr_node.io_Device;
        }
    } else return 0;

    GetCPUInfo(tags);

    D(bug("[SMP-Smallpt] %s: detected %d CPU cores\n", __func__, coreCount);)
Esempio n. 4
0
/***********************************************************************************************
 功能:初始化延时模块
 形参:0
 返回:0
 详解:此函数用于初始化延时模块,使用函数时必须调用。否则会造成延时函数出错
			 在使用uCOS时 必须在OSInit();之后调用DelayInit(); 以启动OS节拍
************************************************************************************************/
void DelayInit()//SYSCLK默认等于核心频率为48MHz 频率在MDK启动文件中设置 CLOCK_SETUP 宏
{
	SysTick->CTRL|=0x04;							//设置系统滴答时钟源为系统内核频率
	GetCPUInfo();  							//计算系统时钟
	fac_us=CPUInfo.CoreClock/1000000;
#ifdef SYSTEM_SUPPORT_OS					//如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
	SysTick->CTRL|=1<<1;   						//开启SYSTICK中断
	SysTick->LOAD=CPUInfo.CoreClock/OS_TICKS_PER_SEC; 	//每1/OS_TICKS_PER_SEC秒中断一次	
	OS_ReloadValue=SysTick->LOAD;                     //记录使用UCOS时的延时值
	SysTick->CTRL|=1<<0;   														//开启SYSTICK 
#else
	fac_ms=(uint32_t)fac_us*1000;
#endif
}
Esempio n. 5
0
static inline ULONG GetPVR(void)
{
    struct Library *ProcessorBase = OpenResource(PROCESSORNAME);
    ULONG pvr = 0;

    if (ProcessorBase) {
        struct TagItem tags[] = {
            { GCIT_Model, (IPTR)&pvr },
            { TAG_END }
        };
        GetCPUInfo(tags);
    }

    return pvr;
}
Esempio n. 6
0
void * CaptureCPUUsage(void * arg) {
	CPU_USAGE cu;
	double u;
	
	cu.cpu_total = 0;
	cu.cpu_usage = 0;
		
	GetCPUInfo(&cu);
	usleep(500000);
		
	struct timeb ts;
		
	while (1) {
		u = GetCPUInfo(&cu);
		
		ftime(&ts);	
		
		fprintf(ofsCPU, "%.3lf %.2lf\n", ts.time + ts.millitm / (double) 1000.0f, u);
		if (exitFlag) break;
		usleep(500000);		
	}
	
	return 0;
}
Esempio n. 7
0
void BSP_Configuration (void)
{
	GetCPUInfo ();	
	BSP_PowerInit ();
	BSP_PowerDown ();
	BSP_PowerUp ();	
	_BSP_NvicInit ();	
	UART_Configuration ();
	DisplayCPUInfo ();	
	/* SSD1906驱动初始化 使其初始化为RGB模式 */
	ILI_Configuration ();
	LIG_Configuration ();
	SSD1906_Configurationg ();
	STK_Configuration ();
	/* 继电器配置成断开连接 */
	RL_Configuration ();
	if(UM_GET_SYSTEMPARA&PARA_BEEP_MASK){
		API_GUI_OpenSpeak ();
		speak_jif = jiffies+30;
	}
	/* AD7687初始化配置 SPI模式,SCK与WV_Configuration共用,FTM初始化,采用中断方式采集 */
	AD7687_Configuration ();
	/* 波形发生器初始化配置,配置ML2035和AD5453,采用模拟SPI,在使用时,将SCK初始化为IO模式,在恢复SPI */
	WV_Configuration ();
	/* ADG409模拟开关芯片配置,通道一 */
	ADG_Configuration ();
	/* RTC初始化 */
	RTC_Init ();
	/* BAT电量初始化 */
	BSP_BatterCheckInit ();
	RF_Init ();
	//SN74121_Init ();
	//STK_Configuration ();
	STK_delay10ms(50);
	GUI_Get_Keymsg ();
	WDOG_Init (60000);
}
Esempio n. 8
0
File: uart.c Progetto: oldjohnh/car
/***********************************************************************************************
 功能:初始化串口
 形参:UART_InitStruct UART初始化结构
 返回:0
 详解:0
************************************************************************************************/
void UART_Init(UART_InitTypeDef* UART_InitStruct)
{
  UART_Type* UARTx = NULL;
	PORT_Type *UART_PORT = NULL;
  uint16_t sbr;
	uint8_t brfa; 
	uint32_t clock;
	UART_MapTypeDef *pUART_Map = NULL;
	pUART_Map = (UART_MapTypeDef*)&(UART_InitStruct->UARTxMAP);
  //检测参数
	assert_param(IS_UART_MAP(UART_InitStruct->UARTxMAP));
	//找出对应的UART端口
	switch(pUART_Map->UART_Index)
	{
			case 0:
					SIM->SCGC4|=SIM_SCGC4_UART0_MASK;
					UARTx = UART0;
					break;
			case 1:
					SIM->SCGC4|=SIM_SCGC4_UART1_MASK;
					UARTx = UART1;
					break;
			case 2:
					SIM->SCGC4|=SIM_SCGC4_UART2_MASK;
					UARTx = UART2;
					break;
			case 3:
					SIM->SCGC4|=SIM_SCGC4_UART3_MASK;
					UARTx = UART3;
					break;
			case 4:
					SIM->SCGC1|=SIM_SCGC1_UART4_MASK;
					UARTx = UART4;
					break;
			case 5:
					SIM->SCGC1|=SIM_SCGC1_UART5_MASK;
					UARTx = UART5;
					break;
			default:
					UARTx = NULL;
					break;
	}
	 //找出 PORT端口 并使能时钟
	switch(pUART_Map->UART_GPIO_Index )
	{
		case 0:
			SIM->SCGC5|=SIM_SCGC5_PORTA_MASK;
			UART_PORT = PORTA;
			break;
		case 1:
			SIM->SCGC5|=SIM_SCGC5_PORTB_MASK;
			UART_PORT = PORTB;
			break;
		case 2:
			SIM->SCGC5|=SIM_SCGC5_PORTC_MASK;
			UART_PORT = PORTC;
			break;
		case 3:
			SIM->SCGC5|=SIM_SCGC5_PORTD_MASK;
			UART_PORT = PORTD;
			break;
		case 4:
			SIM->SCGC5|=SIM_SCGC5_PORTE_MASK;
			UART_PORT = PORTE;
			break;
		case 5:
			SIM->SCGC5|=SIM_SCGC5_PORTE_MASK;
			UART_PORT = PORTE;
			break;
		default:
			break;
	}
	//配置对应引脚为串口模式
	UART_PORT->PCR[pUART_Map->UART_RX_Pin_Index] &= ~PORT_PCR_MUX_MASK;
	UART_PORT->PCR[pUART_Map->UART_RX_Pin_Index] |= PORT_PCR_MUX(pUART_Map->UART_Alt_Index);
	UART_PORT->PCR[pUART_Map->UART_TX_Pin_Index] &= ~PORT_PCR_MUX_MASK;
	UART_PORT->PCR[pUART_Map->UART_TX_Pin_Index] |= PORT_PCR_MUX(pUART_Map->UART_Alt_Index);
	//配置传输频率
	GetCPUInfo();  //计算系统时钟
  clock = CPUInfo.BusClock;
	if((uint32_t)UARTx == UART0_BASE||(uint32_t)UARTx == UART1_BASE) 
	{
		clock = CPUInfo.CoreClock; //UART0 UART1使用CoreClock
	}
	sbr = (uint16_t)((clock)/((UART_InitStruct->UART_BaudRate)*16));
	brfa = ((clock*2)/(UART_InitStruct->UART_BaudRate)-(sbr*32));
	UARTx->BDH |= ((sbr>>8)&UART_BDH_SBR_MASK);//设置高5位的数据
	UARTx->BDL = (sbr&UART_BDL_SBR_MASK);//设置低8位数据
	UARTx->C4 |= brfa&(UART_BDL_SBR_MASK>>3);//设置小数位
	//配置uart控制寄存器,实现基本的八位传输功能
  UARTx->C2 &= ~(UART_C2_RE_MASK|UART_C2_TE_MASK);	 //禁止发送接受
	UARTx->C1 &= ~UART_C1_M_MASK;                      //配置数据位数为8位
	UARTx->C1 &= ~(UART_C1_PE_MASK);                   //配置为无奇偶校检位
	UARTx->S2 &= ~UART_S2_MSBF_MASK;                   //配置为最低位优先传输
	//使能接收器与发送器
	UARTx->C2|=(UART_C2_RE_MASK|UART_C2_TE_MASK);	 //开启数据发送接受,参见手册1221页
	//记录最大缓冲区数
	UART_TxIntStruct1.MaxBufferSize = MAX_TX_BUF_SIZE;
}
Esempio n. 9
0
bool CProtocolDemo::ChangeValue(CPointDemoBase *pPoint)
{
    switch(pPoint->m_nFunction)
    {
    //cpu
    case 10://CPU 占用率
        GetCPUInfo(pPoint);
        break;
    //内存 主存 虚存
    case 20://物理内存总数
        GetMemoryInfo(pPoint);
        break;
    case 22://物理内存空闲
        GetMemoryInfo(pPoint);
        break;
    case 24://物理内存使用
        GetMemoryInfo(pPoint);
        break;
    case 26://虚内存总数
        GetMemoryInfo(pPoint);
        break;
    case 28://虚内存空闲
        GetMemoryInfo(pPoint);
        break;
    case 30://虚内存占用
        GetMemoryInfo(pPoint);
        break;
    case 32://文件页总数
        GetMemoryInfo(pPoint);
        break;
    case 34://文件页空闲
        GetMemoryInfo(pPoint);
        break;
    case 36://文件页占用
        GetMemoryInfo(pPoint);
        break;
    case 38://内存占用率
        GetMemoryInfo(pPoint);
//        (2)   内存使用率
//          这里需要从/proc/meminfo文件中提取两个数据,当前内存的使用量(cmem)以及内存总量(amem)。
//          内存使用百分比   =   100   *   (cmem   /   umem)
        break;
    case 40://当前程序占用空间
        GetMemoryInfo(pPoint);
        break;
    case 42://内存使用峰值
        GetMemoryInfo(pPoint);
        break;
    case 44://占用的虚拟内存大小
        GetMemoryInfo(pPoint);
        break;
    case 46://占用的虚拟内存峰值
        GetMemoryInfo(pPoint);
        break;

    //时间 当前时间,系统启动时间,程序运行时间
    case 50://windows系统已经运行时间
//        fValue=GetTimeInfo(pPoint->m_nFunction);
        GetTimeInfo(pPoint);
        break;
    case 52://程序启动时间 秒
//        fValue=GetTimeInfo(pPoint->m_nFunction);
        GetTimeInfo(pPoint);
        break;
    case 54://程序运行时间 秒
//        fValue=GetTimeInfo(pPoint->m_nFunction);
        GetTimeInfo(pPoint);
        break;
    case 56://内核时间
//        fValue=GetTimeInfo(pPoint->m_nFunction);
//        GetTimeInfo(pPoint->m_nFunction);
        GetTimeInfo(pPoint);
        break;
    case 58://用户时间
//        fValue=GetTimeInfo(pPoint->m_nFunction);
//        GetTimeInfo(pPoint->m_nFunction);
        GetTimeInfo(pPoint);
        break;

        //磁盘空间 a b  c d e f g   占用/总/空闲
    case 60:
//        fValue=GetDiskInfo(pPoint->m_nPara1,pPoint->m_nPara2);
        break;

    //各种随机数据
    case 70://常量   参数为:70 常量值
        GetRand(pPoint);
        break;
    case 72://一定范围内的随机量 参数为:72 最大值 最小值
        GetRand(pPoint);
        break;
    case 74://单调增加 参数为:74 初值  终值 步长(<0 为单调递减)
        GetRand(pPoint);
        break;
    case 76://正弦变量 参数为:76 基值 幅值 步长(角度)
        GetRand(pPoint);
        break;
    case 78://方波  参数为:78 高值,低值(扫描周期就是方波长度)
        GetRand(pPoint);
        break;
    case 80://遥信量 参数为:80 (扫描周期就是变位周期)
        GetRand(pPoint);
        break;
    case 82://遥信量  参数为:82每次变位的可能性(0-100)
        GetRand(pPoint);
        break;
    default:
        Q_ASSERT(false);//"未定义的取值方式\n"
        break;
    }
    return true;
}