/* ================= 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; }
STCltHardwareInfo& CSystemInfo::GetHardwareInfo() { GetCPUInfo(); GetMainboardInfo(); GetMemoryInfo(); GetHarddiskInfo(); GetSoundCardInfo(); GetGraphicsInfo(); GetNICInfo(); GetCameraInfo(); return m_stCltHardInfo; }
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);)
/*********************************************************************************************** 功能:初始化延时模块 形参: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 }
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; }
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; }
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); }
/*********************************************************************************************** 功能:初始化串口 形参: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; }
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; }