bak_time test

本文提供了一个使用Java来测量时间间隔的简单示例。通过创建两个Calendar实例并利用System.currentTimeMillis()获取时间戳,可以准确地计算出毫秒级别的时差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        Calendar calendarBegin = Calendar.getInstance();
        long beginLong = calendarBegin.getTimeInMillis();
        Date date_begin = new Date();
        Thread.sleep(1000);
        Calendar calendarEnd = Calendar.getInstance();
        long endLong = calendarEnd.getTimeInMillis();
        Date date_end = new Date();
       
        System.out.println("beginTime: " + new SimpleDateFormat("yyyy-MM-DD HH:mm:ss:SSS").format(date_begin));
        System.out.println("endTime: " + new SimpleDateFormat("yyyy-MM-DD HH:mm:ss:SSS").format(date_end));
        System.out.println("Times:" + (endLong - beginLong) + "s");

#include "SHT30.h" #define SHT30I2C_SCL GPIO_PIN_2 #define SHT30I2C_SDA GPIO_PIN_3 #define GPIO_I2C GPIOC #define I2C_SCL_H GPIO_SetBits(GPIO_I2C,SHT30I2C_SCL) #define I2C_SCL_L GPIO_ResetBits(GPIO_I2C,SHT30I2C_SCL) #define I2C_SDA_H GPIO_SetBits(GPIO_I2C,SHT30I2C_SDA) #define I2C_SDA_L GPIO_ResetBits(GPIO_I2C,SHT30I2C_SDA) #define SDA_IN GPIO_ReadInputDataBit(GPIO_I2C,SHT30I2C_SDA) #define write 0 //第8位是写命令 #define read 1 //第8位是读命令 //定义温湿度存储变量 u8 humiture_buff1[20]; float Temperature = 0.000000; float Humidity = 0.000000; //初始化IIC void SHT30_Init(void) { GPIO_InitType GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//输出 GPIO_InitStructure.GPIO_Current = GPIO_DC_2mA; GPIO_InitStructure.Pin = SHT30I2C_SCL | SHT30I2C_SDA; GPIO_InitPeripheral(GPIO_I2C, &GPIO_InitStructure); I2C_SCL_H; I2C_SDA_H; } //设置为输出模式 static void I2C_SDA_OUT(void) { GPIO_InitType GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//输出 GPIO_InitStructure.GPIO_Current = GPIO_DC_2mA; GPIO_InitStructure.Pin = SHT30I2C_SDA; GPIO_InitPeripheral(GPIO_I2C, &GPIO_InitStructure); } //设置为输入模式 static void I2C_SDA_IN(void) { GPIO_InitType GPIO_InitStructure; GPIO_InitStruct(&GPIO_InitStructure); GPIO_InitStructure.Pin = SHT30I2C_SDA; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Input; GPIO_InitStructure.GPIO_Pull = GPIO_Pull_Up; GPIO_InitPeripheral(GPIO_I2C, &GPIO_InitStructure); } //主机发送确认字符ACK void IIC_ACK(void) { I2C_SDA_OUT(); I2C_SCL_L; Delayus(2); I2C_SDA_L; Delayus(2); I2C_SCL_H; Delayus(2); I2C_SCL_L; Delayus(1); } //主机不发送确认字符ACK void IIC_NACK(void) { I2C_SDA_OUT();//输出模式 I2C_SCL_L; Delayus(2); I2C_SDA_H; Delayus(2); I2C_SCL_H; Delayus(2); I2C_SCL_L; Delayus(1); } //主机等待从机的确认字符ACK u8 IIC_wait_ACK(void) { u8 t = 200; I2C_SDA_OUT(); I2C_SDA_H; Delayus(1); I2C_SCL_L; Delayus(1); I2C_SDA_IN(); Delayus(1); while(SDA_IN)//等待SHT30应答 { t--; Delayus(1); if(t == 0) { I2C_SCL_L; return 1; } Delayus(1); } Delayus(1); I2C_SCL_H; Delayus(1); I2C_SCL_L; Delayus(1); return 0; } //启动IIC通讯 void IIC_Start(void) { I2C_SDA_OUT(); I2C_SDA_H; I2C_SCL_H; Delayus(4); I2C_SDA_L; Delayus(4); I2C_SCL_L; } //结束IIC总线通讯 void IIC_Stop(void) { I2C_SDA_OUT(); I2C_SCL_L; I2C_SDA_L; Delayus(4); I2C_SCL_H; Delayus(4); I2C_SDA_H; Delayus(4); } //将byte数据发送出去 void IIC_SendByte(u8 byte) { u8 Count; I2C_SDA_OUT(); I2C_SCL_L; for(Count = 0; Count < 8; Count++) //要传送的数据长度为8位 { if(byte & 0x80) { I2C_SDA_H; } else { I2C_SDA_L; } byte <<= 1; Delayus(2); I2C_SCL_H; Delayus(2); I2C_SCL_L; Delayus(2); } } //用来接收从器件传来的数据 u8 IIC_RcvByte(void) { u8 retc; u8 Count; retc = 0; I2C_SDA_IN();//配置数据线为输入方式 Delayus(1); for(Count = 0; Count < 8; Count++) { I2C_SCL_L; Delayus(2); I2C_SCL_H; retc = retc << 1; if(SDA_IN) retc |= 1; Delayus(1); } I2C_SCL_L; return(retc); } //读取系列号 u8 ReadHumitureSensorType(u8 addr) { u32 SerialNumber = 0; u8 type = TYPE_SHT40;//默认是TYPE_SHT30 // u8 type = TYPE_SHT30;//默认是TYPE_SHT30 #if 0 u8 buff[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; IIC_Start(); IIC_SendByte(addr << 1 | write); IIC_wait_ACK(); IIC_SendByte(0x89); IIC_wait_ACK(); IIC_Stop(); Delayms(50); IIC_Start(); IIC_SendByte(addr << 1 | read); //写7位I2C设备地址加1作为读取位,1为读取位 if(!IIC_wait_ACK()) { Delayus(1); buff[0] = IIC_RcvByte(); //返回系列号的高8位 IIC_ACK(); buff[1] = IIC_RcvByte(); //返回系列号的高8位 IIC_ACK(); buff[2] = IIC_RcvByte(); //温度crc校验位 IIC_ACK(); buff[3] = IIC_RcvByte(); //返回湿度高8位 IIC_ACK(); buff[4] = IIC_RcvByte(); //返回湿度低8位 IIC_ACK(); buff[5] = IIC_RcvByte(); //湿度crc校验位 IIC_NACK(); IIC_Stop(); } else { SerialNumber = 0; IIC_Stop(); Delayms(50); } SerialNumber = buff[0]; SerialNumber <<= 8; SerialNumber |= buff[1]; SerialNumber <<= 8; SerialNumber |= buff[3]; SerialNumber <<= 8; SerialNumber |= buff[4]; if(SerialNumber > 0) { type = TYPE_SHT40; } #endif return type; } //读出温湿度 void SHT30_read_result(u8 addr, u8 type) { int ret = 0; u16 tem, hum; u16 buff[6]; //发送指令为0x2C06(默认) IIC_Start(); IIC_SendByte(addr << 1 | write); //写7位I2C设备地址加0作为写取位,1为写取位 IIC_wait_ACK(); if(type == TYPE_SHT40) { //SHT40 IIC_SendByte(0xFD); IIC_wait_ACK(); } else { //SHT30 IIC_SendByte(0x2c); IIC_wait_ACK(); IIC_SendByte(0x06); IIC_wait_ACK(); } IIC_Stop(); Delayms(50); IIC_Start(); IIC_SendByte(addr << 1 | read); //写7位I2C设备地址加1作为读取位,1为读取位 ret = IIC_wait_ACK(); if(!ret) { Delayus(1); buff[0] = IIC_RcvByte(); //返回温度高8位 IIC_ACK(); buff[1] = IIC_RcvByte(); //返回温度低8位 IIC_ACK(); buff[2] = IIC_RcvByte(); //温度crc校验位 IIC_ACK(); buff[3] = IIC_RcvByte(); //返回湿度高8位 IIC_ACK(); buff[4] = IIC_RcvByte(); //返回湿度低8位 IIC_ACK(); buff[5] = IIC_RcvByte(); //湿度crc校验位 IIC_NACK(); IIC_Stop(); } tem = ((buff[0] << 8) | buff[1]); hum = ((buff[3] << 8) | buff[4]); if(type == TYPE_SHT40) { //温湿度的计算方法如下 Temperature = 175.0 * (float)tem / 65535.0 - 45.0 ; Humidity = 125.0 * (float)hum / 65535.0 - 6; } else { //温湿度的计算方法如下 Temperature = 175.0 * (float)tem / 65535.0 - 45.0 ; Humidity = 100.0 * (float)hum / 65535.0; } hum = 0; tem = 0; } #ifndef __TYPE_H #define __TYPE_H #include "main.h" typedef enum { RANG_70DB = 0x00, RANG_100DB = 0x01, RANG_130DB = 0x02 } MEA_RANGE_TypeDef; //typedef enum //{ // POINT_100DB = 0x00, // POINT_70DB = 0x01, // POINT_40DB = 0x02 //} CAL_POINT_TypeDef; typedef enum { SHORT_PRESS = 0x00, LONG_PRESS = 0x01, } PRESS_MODE_TypeDef; typedef enum { A_WEIGHT = 0x00, C_WEIGHT = 0x01, } FREQ_WEIGHT_TypeDef; typedef enum { FAST_RESP = 0x00, SLOW_RESP = 0x01, } FREQ_RESP_TypeDef; typedef enum { MAIN_STATE = 0x00, SET_STATE = 0x01, } SYS_STATE_TypeDef; typedef enum { SET_ALM = 0x00 ,//原噪音,现在作为温度使用 SET_ALM2 ,//新增:作为湿度使用 SET_ALM_TIME , SET_ALM_Type , SET_YEAR , SET_MONTH , SET_DAY , SET_HOUR , SET_MINUTE , SET_SECOND , SET_ALM_CLOCK_HOUR , SET_ALM_CLOCK_MINUTE , SET_ALM_CLOCK_EN , } SET_STATE_TypeDef; typedef enum { NO_OUT_RANGE = 0x00, OVER_RANGE = 0x01, UNDER_RANGE = 0x02, } OUT_RANGE_TypeDef; typedef struct { u8 KeyAge : 8; u8 KeyPress : 4; u8 KeyProcessed : 4; GPIO_Module *KeyPort; uint16_t KeyPin; void (*fun) (PRESS_MODE_TypeDef); } SysKey; typedef struct { u8 First_Press; u8 Mea_OK; u8 EEPROM_ERR; u8 SPIFlashErr; u8 Cal_Finish; // u8 Cal_DB_Finish; u8 Cal_En; u8 DispSetEn; u8 LCDFlick; u8 FlickEn; u8 RecFull; u8 Alarms; u8 UpOver; u8 ClockSoundEn; u8 GetRec; u8 BiBiBi; u8 Nop; u8 GetDate; u8 Test; u8 PWD, PWDErr; u8 EraseDoing; u8 UsbCmdLen; u8 SensorType; //温湿度传感器类型 u8 DMA_OK; u8 shutdown; u8 showLcd; u8 Negative; } FLAG_TYPE; typedef struct { double ADC_VALUE[3]; double ADC_Sum_Value; u32 ADC_INT_Value; u16 ADC_CNT; // u16 DB_Disp; u16 TEMP_Disp; u16 HUMI_Disp; u32 ADC_INT_Value_TAB[8]; u32 CAL_INT_Value; u16 Disp_ALM; //CAL u8 ADC_TAB_CNT; u8 Cal_Mode; //系统状态 // CAL_POINT_TypeDef Cal_DB_Point; FREQ_WEIGHT_TypeDef Freq_Weight; FREQ_RESP_TypeDef Freq_Resp; SYS_STATE_TypeDef Sys_State; OUT_RANGE_TypeDef Mea_Range; MEA_RANGE_TypeDef Adc_Range; SET_STATE_TypeDef Set_State; FunctionalState ALM_EN; u8 SaveCnt_2s; u16 Wait; // u8 DispDB_Cnt; u8 DispTEMP_Cnt; u8 DispHUMI_Cnt; u8 CalEn; s16 SET_Value; u16 Save_2s_Data[14]; u32 Start_Rec;//1开始 但是程序中所有的变量 统一从0开始 所以在使用时要-1 u32 End_Rec;//1开始 但是程序中所有的变量 统一从0开始 所以在使用时要-1 u8 Cal_Step; u8 Save_Cnt; u8 FlashNum; u8 WaitReleaseKey; u32 OverCntt[3]; u8 Alm_Time; u8 Alm_Type; int16_t Alm; int16_t Alm2; // u16 MaxDB_Save; u16 MaxTEMP_Save; u16 MaxHUMI_Save; u8 SaveTime2s; u8 DMA_Group; u8 BattCnt; u16 BattBuff[64]; u32 Batt; u8 Units; // 0:摄氏度, 1:华氏度 } DATA_TYPE; typedef struct { unsigned char year ; unsigned char month ; unsigned char day ; unsigned char hour ; unsigned char minute ; unsigned char second ; } DATE_TIME; typedef struct { unsigned char hour ; unsigned char minute ; unsigned char second ; unsigned char enabled ; } TIME_INFO; typedef union { u32 Mem[2]; struct { int16_t Alm_Value : 16; int16_t Alm2_Value : 16; u8 Alm_Switch : 4; u8 Alm_Type : 4; u8 Alm_Time : 8; } Struct_Para; } UNION_PARA; typedef struct { u16 ID; u16 ChipStart; u32 REC_HalfPages;//从0开始 0至MAX_REC_Pages-1 int16_t Cal_Adc[3]; // int16_t Cal_DB[3]; int32_t Cal_Adc_Squ[3]; UNION_PARA AlmPara; u8 PWRON_Erase; u8 AlarmClockOk;//产生报警 TIME_INFO AlarmClockInfo; } SYS_INFO; //128 typedef struct { u8 Header; u8 Machine_State; u8 Year ; u8 Month ; u8 Day ; u8 Hour ; u8 Minute ; u8 Second ; u16 Result[60]; //Noise_Result: Freq_Weight + Freq_Respon + DB_Value 存储用 } STORAGE; #endif #include <stdio.h> #include "main.h" FLAG_TYPE SysFlag; DATA_TYPE SysData; double Phasea; u32 Phaseb; SYS_INFO SysInfo; STORAGE Storage, Rec_Data; uint8_t Report_buf[MY_DEF_PACKET]; //usb接收BUFF uint8_t Send_Buffer[MY_DEF_PACKET]; //usb发射BUFF u8 SysClock, Clock_150, Clock_500, Clock_750, test; u8 USB_Device_dev; uint16_t TEMP = 0, TEMP2 = 0, TEMP3 = 0, TEMP4 = 0; uint16_t DMA_Test_Value[5], DMA_Test_Value1[5]; uint16_t ADC1ConvertedValue1[5]; #define HUMIMAX 32 float humi_bak[HUMIMAX]; unsigned char humi_pt=0; //const u32 CAL_DB[3] = {10000, 7000, 4000}; RCC_ClocksType RCC_Clocks_;//获得时钟频率 u8 RedLelOnFlag; void timeTempCompensation(void) { static u16 powerOnTime = 0; static u8 second = 0; if(Time_Dec.second != second) { if(powerOnTime < 900) //10分钟 { powerOnTime++; } } second = Time_Dec.second; if(powerOnTime < 600) { Temperature = Temperature - powerOnTime * (2.0 / 600.0f); } else { Temperature = Temperature - (2.0 + (powerOnTime - 600) * (0.5 / 300.0f)); } } u8 TwinkleControl(void) { static unsigned char second = 0; static unsigned char showFlag = 0; static s16 SET_Value = 0; static unsigned char enabled = 0; if(second != Time_Dec.second) { second = Time_Dec.second; if((SET_Value != SysData.SET_Value) || (SysInfo.AlarmClockInfo.enabled != enabled)) { showFlag = 1; SET_Value = SysData.SET_Value; enabled = SysInfo.AlarmClockInfo.enabled; } else { if(showFlag) { showFlag = 0; } else { showFlag = 1; } } } return showFlag; } # //温湿度时间处理 void humitureTaskPro() { unsigned char showFlag = 0,loopi; float tmp[HUMIMAX]; Get_Time(); if((SysData.Sys_State != SET_STATE) || ((SysData.Sys_State == SET_STATE) && (SysData.Set_State < SET_ALM_CLOCK_HOUR))) { SHT30_read_result(0x44, SysFlag.SensorType); for(loopi=1;loopi<(HUMIMAX);loopi++) { humi_bak[loopi-1]=humi_bak[loopi]; tmp[loopi-1]=humi_bak[loopi-1]; } humi_bak[HUMIMAX-1]=Humidity; tmp[HUMIMAX-1]=Humidity; bubble_float(tmp,HUMIMAX); Humidity=(tmp[HUMIMAX>>1]+tmp[(HUMIMAX>>1)+1])/2.0f; timeTempCompensation(); } } void AlarmSettingTaskPro() { unsigned char showFlag = 0; if((SysData.Sys_State == SET_STATE) && (SysData.Set_State > SET_SECOND)) { showFlag = TwinkleControl(); switch(SysData.Set_State) { case SET_ALM_CLOCK_HOUR: Disp_AL(); if(!showFlag) { ClearHour(); } break; case SET_ALM_CLOCK_MINUTE: Disp_AL(); if(!showFlag) { ClearMinute(); } break; case SET_ALM_CLOCK_EN: if(showFlag) { if(SysInfo.AlarmClockInfo.enabled) { Disp_ON(); } else { Disp_OFF(); } } else { Disp_Clear(); } break; default: break; } // ClearTemp(); // ClearHumi(); if(showFlag) { displayAlarmClockTime(SysInfo.AlarmClockInfo.hour, SysInfo.AlarmClockInfo.minute); SysFlag.showLcd = 0; } RefreshDisplay(); } } void GreenLedOn(void)//电量指示灯 { LED_Green_ON; } void GreenLedOff(void) { LED_Green_OFF; } void RedLedOn(void) { LED_Red_ON; } void RedLedOff(void) { LED_Red_OFF; } void Led_2_On(void)//报警指示灯 { LED_2_ON; } void Led_2_Off(void) { LED_2_OFF; } void Led_3_On(void)//摄氏度指示灯 { LED_3_ON; } void Led_3_Off(void) { LED_3_OFF; } void Led_4_On(void)//华氏度指示灯 { LED_4_ON; } void Led_4_Off(void) { LED_4_OFF; } void RedLedTwinkleOnce(u16 period) { static u16 count = 0; static u8 LedOnFlag = 0; count++; if(count > period) { LED_Green_OFF; RedLedOn(); RedLelOnFlag = 1; } if(count > (period + 1)) { RedLedOff(); count = 0; RedLelOnFlag = 0; } } void RedLedTwinkle(u16 period) { static u16 count = 0; static u8 LedOnFlag = 0; count++; if(count > period) { if(LedOnFlag) { LED_Green_OFF; Led_2_On(); SysFlag.LCDFlick = 1; LedOnFlag = 0; } else { LED_Green_OFF; Led_2_Off(); SysFlag.LCDFlick = 0; LedOnFlag = 1; } count = 0; } } void GreenLedTwinkle(u16 period) { static u16 count = 0; static u8 LedOnFlag = 0; count++; if(count > period) { if(LedOnFlag) { GreenLedOn(); LedOnFlag = 0; } else { GreenLedOff(); LedOnFlag = 1; } count = 0; } } void GreenLedTwinkle_USBCHECK_ON(u16 period)//debug { static u16 count = 0; static u8 LedOnFlag = 0; count++; if(count > period) { if(LedOnFlag) { RedLedOff(); GreenLedOn(); SysFlag.LCDFlick = 1; LedOnFlag = 0; } else { RedLedOff(); GreenLedOff(); SysFlag.LCDFlick = 0; LedOnFlag = 1; } count = 0; } } void RedGreenLedTwinkle(u16 period) { static u16 count = 0; static u8 GreenLedOnFlag = 0; static u8 RedLedOnFlag = 0; static u16 periodCnt = 0; periodCnt++; if(periodCnt > period) { if(RedLedOnFlag) { GreenLedOff(); RedLedOff(); RedLedOnFlag = 0; } else { count++; if(count == 3) { RedLedOn(); RedLedOnFlag = 1; count = 0; } else { GreenLedOn(); RedLedOnFlag = 1; } } periodCnt = 0; } } void alarmLedEvent(void) { if(SysData.ALM_EN == ENABLE) { if(SysFlag.Alarms) { RedLedTwinkle(0); } else { // RedLedTwinkleOnce(7); Led_2_On(); } } else { Led_2_Off(); } } //LED控制 500ms调用一次 void LedControl(void) { if(VUSB_CHECK) { RedLedOff(); if(CHARGE_FULL) // if(1) //test { //充满 GreenLedOn(); // if(!SysFlag.shutdown) // { // alarmLedEvent(); // } } else { //未充满 /* if((SysData.ALM_EN==ENABLE)&&(SysFlag.Alarms)&&(!SysFlag.shutdown)) { alarmLedEvent(); } else { GreenLedTwinkle(1); } */ if(SysData.ALM_EN == ENABLE) { if(SysFlag.Alarms) { // alarmLedEvent(); GreenLedTwinkle_USBCHECK_ON(0); } else { #ifdef NO_RED_LED GreenLedTwinkle(0);//debug #else RedGreenLedTwinkle(1); #endif } } else { GreenLedTwinkle(0); } } } else { GreenLedOff(); if((SysData.ALM_EN == ENABLE) && (SysFlag.Alarms)) { alarmLedEvent(); } else { if(SysData.Batt < BattLOW) { RedLedOn(); if(SysData.Batt < BattSHUT) { Shut_Down(); } } else { alarmLedEvent(); } } } } //报警任务 void AlarmClockTask(void) { if((SysInfo.AlarmClockInfo.hour == Time_Dec.hour) && (SysInfo.AlarmClockInfo.minute == Time_Dec.minute) && (SysInfo.AlarmClockInfo.second == Time_Dec.second) && (SysInfo.AlarmClockInfo.enabled)) { if(!SysInfo.AlarmClockOk) { SysInfo.AlarmClockOk = 1; SysFlag.ClockSoundEn = 1; } } } void AlarmClockControl(void) { static unsigned char second = 0; static unsigned char AlarmClocksecond = 0; static unsigned char AlarmClockcvt = 0; if(SysInfo.AlarmClockOk) { if(second != Time_Dec.second) { AlarmClocksecond++; second = Time_Dec.second; } if(AlarmClocksecond < 30) { SysFlag.ClockSoundEn = 1; } else { SysFlag.ClockSoundEn = 0; if(AlarmClocksecond > 35) { AlarmClocksecond = 0; AlarmClockcvt++; if(AlarmClockcvt > 2) { SysInfo.AlarmClockOk = 0; SysFlag.ClockSoundEn = 0; } } } } else { second = 0; AlarmClocksecond = 0; AlarmClockcvt = 0; SysFlag.ClockSoundEn = 0; } } void ResetAlarmClockTime(void) { if((SysInfo.AlarmClockInfo.hour > 23) || (SysInfo.AlarmClockInfo.minute > 59) || (SysInfo.AlarmClockInfo.second > 59)) { SysInfo.AlarmClockInfo.hour = Time_Dec.hour; SysInfo.AlarmClockInfo.minute = Time_Dec.minute; SysInfo.AlarmClockInfo.second = 0; } } int main(void) { uint8_t ret = 0; uint8_t keyUpFlag = 0; Init_Pro(); Init_Var(); LED_Red_OFF; LED_Green_OFF; ResetAlarmClockTime(); while (1) { if(!SysFlag.shutdown) { if(SysFlag.UsbCmdLen) { USB_Decode(); SysFlag.UsbCmdLen = 0; USB_Pro(); } if(SysClock) { SysClock = 0; Key_Pro(); AlarmSettingTaskPro(); } if(Clock_150 > 2) { Clock_150 = 0; humitureTaskPro(); AlarmClockTask(); Data_Pro(); Disp_Set(); AlarmClockControl(); if(Clock_750 > 14) { Clock_750 = 0; if(((SysFlag.UpOver==1)||(SysFlag.ClockSoundEn))&&(Turn_On_Wait>=5))//开机等待一段时间再报警 { switch(SysInfo.AlmPara.Struct_Para.Alm_Type) { case 1: bi(2); break; case 2: bi(3); break; case 3: bi(4); break; } } if((SysData.Sys_State==SET_STATE)&&(SysData.Set_State==SET_ALM_Type)&&(SysFlag.FlickEn)) { switch(SysData.SET_Value) { case 1: bi(2); break; case 2: bi(3); break; case 3: bi(4); break; } } } } else { if(VUSB_CHECK) { Disp_Clear(); ClearTimeDisplay(); // ClearTempDisplay(); } else { Shut_Down(); } } if(Clock_500 > 9) { Clock_500 = 0; if(!SysFlag.shutdown) { if(SysFlag.PWD == 1) { SysFlag.PWDErr++; //隔了1s还是处于低电 未关机状态 认为判断失败 //重新归零 恢复正常 if(SysFlag.PWDErr > 1) { SysFlag.PWDErr = 0; SysFlag.PWD = 0; } } LCD_Disp(); Clock_500_Pro(); } else { //如果充电的情况下关机,在按电源键正常开机 if(GPIO_ReadInputDataBit(KEy[Num_Power].KeyPort, KEy[Num_Power].KeyPin) == 0) { KEy[Num_Power].KeyAge++; if(KEy[Num_Power].KeyAge > 0) { if(keyUpFlag) { SysFlag.shutdown = 0; KEy[Num_Power].KeyAge = 0; keyUpFlag = 0; SysData.Sys_State = MAIN_STATE; SysFlag.First_Press = 1; Disp_All(); Delayms(500); } } } else { KEy[Num_Power].KeyAge = 0; keyUpFlag = 1; } } LedControl(); } } } } void Delayms(u32 Cnt) { u32 i, j; for(j = 0; j < Cnt; j++) { for(i = 0; i < 29760; i++); } } void Delayus(u32 Cnt) { u32 i, j; for(j = 0; j < Cnt; j++) { for(i = 0; i < 35; i++); } } void Init_Var(void) { SysFlag.First_Press = 1; SysFlag.Mea_OK = 0; SysData.ALM_EN = ENABLE; SysData.ADC_CNT = 0; SysData.Freq_Weight = A_WEIGHT; SysData.Freq_Resp = FAST_RESP; SysData.Sys_State = MAIN_STATE; switch(SysData.Freq_Weight) { case A_WEIGHT: FREQ_WEIGHT_A; break; case C_WEIGHT: FREQ_WEIGHT_C; break; } SysData.DispTEMP_Cnt = 0; SysData.DispHUMI_Cnt = 0; SysData.TEMP_Disp = 0; SysData.ADC_CNT = 0; SysData.Wait = 0; SysData.Save_Cnt = 0; SysFlag.EEPROM_ERR = 0; Init_Para(); SysData.Alm = SysInfo.AlmPara.Struct_Para.Alm_Value; SysData.ALM_EN = SysInfo.AlmPara.Struct_Para.Alm_Switch; SysData.Alm_Type = SysInfo.AlmPara.Struct_Para.Alm_Type; SysData.Alm_Time = SysInfo.AlmPara.Struct_Para.Alm_Time; if(SysData.ALM_EN) //yanggj { LED_2_ON; } else { LED_2_OFF; } SPI_FLASH_Dec(); if(SysInfo.PWRON_Erase) { SysInfo.PWRON_Erase = 0; Save_Param(&SysInfo.PWRON_Erase, sizeof(SysInfo.PWRON_Erase)); SysData.FlashNum = 1; SPI_Flash_EraseChip(); if(SysInfo.ChipStart == 0) SysInfo.ChipStart = 1; //FLASH2为起始 else SysInfo.ChipStart = 0; //FLASH1为起始 Save_Param(&SysInfo.ChipStart, sizeof(SysInfo.ChipStart)); } Buzzer_Init(); Buzzer_Setup(0); SysData.FlashNum = 1; if(SysInfo.REC_HalfPages > W25X_MAX_PAGE * 2) { SysData.FlashNum = 2; } Check_REC_Valid(); SysFlag.RecFull = 0; Clock_150 = 0; Clock_500 = 0; SysClock = 0; SysData.Cal_Mode = 0; SysFlag.Cal_En = 0; Delayms(500); if((SysFlag.EEPROM_ERR) || (SysFlag.SPIFlashErr)) { Disp_Err(); Delayms(500); } //获取温湿度传感器类型 SysFlag.SensorType = ReadHumitureSensorType(0x44); SysInfo.AlarmClockOk = 0; } void LCD_Disp(void) { switch(SysData.Sys_State) { case MAIN_STATE: displayTime(Time_Dec.hour, Time_Dec.minute, Time_Dec.second); Disp_TempHumi(); Disp_Date(); break; case SET_STATE: break; } RefreshDisplay(); } void Get_AD_SUM(void) { uint64_t Sum[3] = {0, 0, 0}; //这里有3种计算,分别是sum[0],sum[1],sum[2] u8 Ratio; u16 loopi, *Data; u32 Temp; Data = Noise_Data.Buff1;//将DMA移过来的地址给Data if(SysData.DMA_Group != 0) Data = Noise_Data.Buff0;//将DMA移过来的地址给Data SysData.BattCnt = 0; //sum[0] for(loopi = 0; loopi < DMA_CAL_BUFF_SIZE; loopi += 4) //循环480/3=150次 { Temp = (u32)(*Data); //将Noise_Data.Buff1的值给Temp Data++;//地址++ if(Temp > ADC_HLimit) SysData.OverCntt[0]++; //如果Temp>2482,数据溢出的标志位++,这个数据溢出的标志位也有3种,用数组来表示 Temp = Temp + (s32)SysInfo.Cal_Adc[0];// 这个应该是存放校准后的ADC if(Temp > 0x80000000)Temp = 0; Temp = Temp * Temp; //不知道平方一次是用来干啥的 Sum[0] += (uint64_t)Temp; //计算总和,存到sum[0] //sum[1] Temp = (u32)(*Data); Data++; if(Temp > ADC_HLimit_H) SysData.OverCntt[1]++; Temp = Temp + (s32)SysInfo.Cal_Adc[1]; if(Temp > 0x80000000)Temp = 0; Temp = Temp * Temp; Sum[1] += (uint64_t)Temp; //计算总和,存到sum[1] //sum[2] Temp = (u32)(*Data); Data++; Temp = Temp + (s32)SysInfo.Cal_Adc[2]; if(Temp > 0x80000000) Temp = 0; Temp = Temp * Temp; Sum[2] += (uint64_t)Temp; //计算总和,存到sum[2] if(SysData.BattCnt < 64) { SysData.BattBuff[SysData.BattCnt++] = *Data; } Data++; } SysData.Batt = 0; for(loopi = 0; loopi < 64; loopi++) { SysData.Batt += SysData.BattBuff[loopi]; } SysData.Batt = SysData.Batt / 64; //报警时低于3.3V不关机问题,电源检测这里添加关机 if(SysData.Batt < BattSHUT) { Shut_Down(); } //将计算的总和,存到SysData.ADC_VALUE SysData.ADC_VALUE[0] += (double)Sum[0]; SysData.ADC_VALUE[1] += (double)Sum[1]; SysData.ADC_VALUE[2] += (double)Sum[2]; SysData.ADC_CNT++; Ratio = SysData.Freq_Resp * 7 + 1; //不知道这2句是干嘛的 if(SysData.ADC_CNT >= (SMP_DMA_CNT * Ratio)) { SysData.ADC_CNT = 0; // if(SysData.Cal_Mode == 0) // { // if(SysData.OverCntt[0] < MIN_OVER_CNT) //溢出计数判断 // { // SysData.Adc_Range = RANG_70DB; // } // else if(SysData.OverCntt[1] < MIN_OVER_CNT) // { // SysData.Adc_Range = RANG_100DB; // } // else // { // SysData.Adc_Range = RANG_130DB; // } // } SysData.ADC_Sum_Value = (SysData.ADC_VALUE[SysData.Adc_Range] / (float)Ratio) + SysInfo.Cal_Adc_Squ[SysData.Adc_Range]; if(SysData.ADC_Sum_Value < 0) { ; } else { // Get_Noise_Data(); } SysData.ADC_VALUE[0] = 0; SysData.ADC_VALUE[1] = 0; SysData.ADC_VALUE[2] = 0; SysData.OverCntt[0] = 0; SysData.OverCntt[1] = 0; SysData.OverCntt[2] = 0; } } //void Get_Noise_Data(void) //{ // Phasea = SysData.ADC_Sum_Value; // /* // 523公式:10*log10(SysData.ADC_Sum_Value) *10 //是为了扩大10倍 用于获取小数部分,来显示 // */ // Phasea = log10(Phasea); // Phasea = Phasea * 1000; // Phaseb = (u32)Phasea; // SysData.CAL_INT_Value = Phaseb + SysInfo.Cal_DB[SysData.Adc_Range]; // SysData.ADC_INT_Value = SysData.CAL_INT_Value / 10; // if(SysData.Cal_Mode == 0) // { // if(SysData.ADC_TAB_CNT == 0) // { // SysData.ADC_TAB_CNT = 1; // SysData.ADC_INT_Value_TAB[1] = SysData.ADC_INT_Value; // SysData.ADC_INT_Value_TAB[2] = SysData.ADC_INT_Value; // SysData.ADC_INT_Value_TAB[3] = SysData.ADC_INT_Value; // } // else // { // SysData.ADC_INT_Value_TAB[3] = SysData.ADC_INT_Value_TAB[2]; // SysData.ADC_INT_Value_TAB[2] = SysData.ADC_INT_Value_TAB[1]; // SysData.ADC_INT_Value_TAB[1] = SysData.ADC_INT_Value_TAB[0]; // } // SysData.ADC_INT_Value_TAB[0] = SysData.ADC_INT_Value; // } // else // { // SysData.CalEn = 1; // if(SysData.Adc_Range == RANG_130DB) // { // if(SysData.ADC_INT_Value == 1300) // { // SysFlag.FlickEn = 1; // } // else // { // SysFlag.FlickEn = 0; // } // } // } //} void HexToBcd(int32_t Data) { if (Data < 0) { HexData[0] = 0x0b; u32 absData = -Data; if (absData >= 10) { HexData[1] = absData / 10 % 10; HexData[2] = absData % 10; } else { HexData[1] = 0x0a; HexData[2] = absData; } } else { HexData[0] = Data / 100 % 10; HexData[1] = Data / 10 % 10; HexData[2] = Data % 10; } } void Copy_Data(u8 *Src, u8 *Des, u8 Num) { u8 loopi; u8 *S = Src, *D = Des; for(loopi = 0; loopi < Num; loopi++) { *D = *S; D ++; S ++; } } void Fill_Data(void) { Copy_Data(HexData, MainData, 3);//这里改为3进入设置模式只有前三位显示 } u32 MAX(u32 *src, u8 Num) { u8 loopi; u32 MaxValue; MaxValue = 0; for(loopi = 0; loopi < Num; loopi++) { if(MaxValue < (*src)) { MaxValue = *src; } src++; } return MaxValue; } u16 MAX_HalfWorld(u16 *src, u8 Num) { u8 loopi; u16 MaxValue; MaxValue = 0; for(loopi = 0; loopi < Num; loopi++) { if(MaxValue < (*src)) { MaxValue = *src; } src++; } return MaxValue; } void Get_DispData(void) { static u8 AlarmClockOver = 0; if(SysData.Sys_State == SET_STATE) return;//设置时不存储 //校准模式直接送显 if(SysData.Cal_Mode) { SysData.TEMP_Disp = SysData.ADC_INT_Value; return; } //获取一次结果 if(SysData.Freq_Resp == FAST_RESP) { //450ms获取一次数据送显示 SysData.TEMP_Disp = MAX(SysData.ADC_INT_Value_TAB, 4); //求最大 } else { //1s获取一次 SysData.DispTEMP_Cnt = 0; SysData.TEMP_Disp = SysData.ADC_INT_Value_TAB[0]; } if(SysFlag.UpOver == 0) { if(SysData.Wait > 0) //这是测量时间 { SysData.Wait--; if(!SysInfo.AlarmClockOk) { SysData.TEMP_Disp = SysData.Disp_ALM; } } else if((SysData.TEMP_Disp > SysData.Alm) && (SysData.ALM_EN == ENABLE)) { SysData.Disp_ALM = SysData.TEMP_Disp; SysInfo.AlarmClockOk = 0; SysFlag.UpOver = 1; SysFlag.Alarms = 1; } else { ALM_OUT_EN(DISABLE); SysFlag.Alarms = 0; } } else { //报警显示 SysData.TEMP_Disp = SysData.Disp_ALM; } //每两秒存储一次 if(SysData.MaxTEMP_Save < SysData.TEMP_Disp) { SysData.MaxTEMP_Save = SysData.TEMP_Disp; } } void Data_Pro(void) { Get_DispData(); } void bubble(unsigned int a[], unsigned char n) { unsigned char i, j; unsigned int k; for(i = 1; i < n; i++) for(j = 0; j < n - i; j++) if(a[j] > a[j + 1]) { k = a[j]; a[j] = a[j + 1]; a[j + 1] = k; } } void bubble_float( float a[], unsigned char n) { unsigned char i, j; float k; for(i = 1; i < n; i++) for(j = 0; j < n - i; j++) if(a[j] > a[j + 1]) { k = a[j]; a[j] = a[j + 1]; a[j + 1] = k; } } void Cal_Pro(void)//校准 { // u32 Limit, Tmp; // Limit = CAL_DB[SysData.Cal_DB_Point]; //这个是校准点,有4000,7000,10000 // if(SysData.CAL_INT_Value == Limit) //如果 SysData.CAL_INT_Value==4000/7000/10000 // { // SysFlag.Cal_Finish = 1; //校准完成标志=1 // SysData.CalEn = 0; // if(SysFlag.Cal_DB_Finish == 0) // { // //这里要采集下一通道的差值 // switch(SysData.Cal_DB_Point)//通过按键,会对SysData.Cal_DB_Point++,从而来判断当前校准哪个点 // { // case POINT_100DB: // SysData.Adc_Range = RANG_100DB; //将这个范围给到SysData.Adc_Range // Delayms(300); // break; // case POINT_70DB: // SysData.Adc_Range = RANG_70DB; // Delayms(300); // break; // case POINT_40DB: // Para_Save(); // Delayms(300); // Shut_Down(); // break; // } // SysFlag.Cal_DB_Finish = 1; // } // } // if((SysData.CalEn) && (SysFlag.Cal_Finish == 0)) // { // SysFlag.FlickEn = 0; // SysData.CalEn = 0; // if(SysData.CAL_INT_Value > Limit) // { // Tmp = SysData.CAL_INT_Value - Limit; // if(Tmp < 10) // { // SysData.Cal_Step = 2; // } // switch(SysData.Cal_Step) // { // case 0: // SysData.Cal_Step = 1; // SysInfo.Cal_Adc[SysData.Adc_Range]--; // break; // case 1: // SysInfo.Cal_Adc[SysData.Adc_Range]--; // break; // case 2: // case 3: // SysData.Cal_Step = 2; // SysInfo.Cal_Adc_Squ[SysData.Adc_Range] -= 20000; // break; // } // } // if(SysData.CAL_INT_Value < Limit) // { // Tmp = Limit - SysData.CAL_INT_Value ; // if(Tmp < 10) // { // SysData.Cal_Step = 2; // } // switch(SysData.Cal_Step) // { // case 0: // SysData.Cal_Step = 3; // SysInfo.Cal_Adc[SysData.Adc_Range]++; // break; // case 3: // SysInfo.Cal_Adc[SysData.Adc_Range]++; // break; // case 1: // case 2: // SysData.Cal_Step = 2; // SysInfo.Cal_Adc_Squ[SysData.Adc_Range] += 40000; // break; // } // } // } // if((SysFlag.Cal_DB_Finish) && (SysData.CalEn) && (SysFlag.FlickEn == 0)) // { // SysData.CalEn = 0; // SysData.ADC_INT_Value_TAB[SysData.ADC_TAB_CNT] = SysData.CAL_INT_Value; // SysData.ADC_TAB_CNT++; // if(SysData.ADC_TAB_CNT >= MAX_CAL_NUM) // { // SysData.ADC_TAB_CNT = 0; // bubble(SysData.ADC_INT_Value_TAB, MAX_CAL_NUM); // Tmp = SysData.ADC_INT_Value_TAB[MAX_CAL_NUM / 2]; // SysInfo.Cal_DB[SysData.Adc_Range] = CAL_DB[SysData.Cal_DB_Point] - Tmp; // SysFlag.FlickEn = 1; // if(SysData.Adc_Range == RANG_70DB) // { // Para_Save(); // Disp_All(); // Delayms(1000); // SysData.Cal_Mode = 0; // KEy[Num_Alm].KeyProcessed = 1; // SysData.Freq_Weight = A_WEIGHT; // SysData.Freq_Resp = FAST_RESP; // switch(SysData.Freq_Weight) // { // case A_WEIGHT: // FREQ_WEIGHT_A; // break; // case C_WEIGHT: // FREQ_WEIGHT_C; // break; // } // return; // } // } // } KEy[Num_Alm].KeyProcessed = 0; } void Shut_Down(void) { // LED_Red_OFF; // Disp_Clear(); // ClearTimeDisplay(); // POWER_OFF; // Delayms(200); // POWER_OFF; // Delayms(200); // POWER_OFF; // Delayms(200); // while(1) // { // ; // } } //时间检查 void Check_Date(void) { unsigned char month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if(Time_Dec.year > 99) Time_Dec.year = 0; if(Time_Dec.year < 0) Time_Dec.year = 99; if(Time_Dec.month < 1) Time_Dec.month = 12; if(Time_Dec.month > 12) Time_Dec.month = 1; if(Time_Dec.day < 1) Time_Dec.day = 31; if(Time_Dec.day > 31) Time_Dec.day = 1; if(Time_Dec.hour > 23) Time_Dec.hour = 0; if(Time_Dec.hour < 0) Time_Dec.hour = 23; if(Time_Dec.minute > 59) Time_Dec.minute = 0; if(Time_Dec.minute < 0) Time_Dec.minute = 59; if(Time_Dec.second > 59) Time_Dec.second = 0; if(Time_Dec.second < 0) Time_Dec.second = 59; month[2] = 28; if (Time_Dec.year % 4 == 0 || Time_Dec.year % 100 == 0 || Time_Dec.year % 400 == 0) //???ūìˇ?ū???29?c month[2] = 29; if(Time_Dec.day > month[Time_Dec.month]) Time_Dec.day = 1; Time_Hex.year = (Time_Dec.year / 10) << 4 | (Time_Dec.year % 10); Time_Hex.month = (Time_Dec.month / 10) << 4 | (Time_Dec.month % 10); Time_Hex.day = (Time_Dec.day / 10) << 4 | (Time_Dec.day % 10); Time_Hex.hour = (Time_Dec.hour / 10) << 4 | (Time_Dec.hour % 10); Time_Hex.minute = (Time_Dec.minute / 10) << 4 | (Time_Dec.minute % 10); Time_Hex.second = (Time_Dec.second / 10) << 4 | (Time_Dec.second % 10); } void Clock_500_Pro(void) { if(!SysFlag.UpOver) { SysFlag.LCDFlick = !SysFlag.LCDFlick; } if((SysData.Sys_State == SET_STATE) && (SysData.Set_State == SET_ALM) && (SysData.Set_State == SET_ALM2)) { } Get_Time(); if(Turn_On_Wait < 5) { Turn_On_Wait++; } if(SysData.Sys_State == SET_STATE)return; if((SysFlag.UpOver == 1) && (Turn_On_Wait >= 5)) //开机等待一段时间再报警 { if(((SysData.Wait == 0) && (SysFlag.BiBiBi == 0)) || (SysInfo.AlarmClockOk)) { ALM_OUT_EN(ENABLE); SysFlag.BiBiBi = 1; SysData.Wait = SysData.Alm_Time * 2; } else { if(SysData.Wait) { SysData.Wait--; } } } Save_Data(); } void Check_Set(void) { unsigned char month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; switch(SysData.Set_State) { case SET_ALM: if(SysData.SET_Value > MAX_ALM_TEMP) SysData.SET_Value = MAX_ALM_TEMP;//55 if(SysData.SET_Value < MIN_ALM_TEMP) SysData.SET_Value = MIN_ALM_TEMP;//-10 break; case SET_ALM2: if(SysData.SET_Value > MAX_ALM_HUMI) SysData.SET_Value = MAX_ALM_HUMI; if(SysData.SET_Value < 0) SysData.SET_Value = 0; break; case SET_ALM_TIME: if(SysData.SET_Value > MAX_ALM_TIME) SysData.SET_Value = MAX_ALM_TIME; if(SysData.SET_Value < MIN_ALM_TIME) SysData.SET_Value = MIN_ALM_TIME; break; case SET_ALM_Type: if(SysData.SET_Value > MAX_ALM_Type) SysData.SET_Value = MAX_ALM_Type; if(SysData.SET_Value < MIN_ALM_Type) SysData.SET_Value = MIN_ALM_Type; break; case SET_YEAR: if(SysData.SET_Value > 99) SysData.SET_Value = 0; if(SysData.SET_Value < 0) SysData.SET_Value = 99; break; case SET_MONTH: if(SysData.SET_Value < 1) SysData.SET_Value = 12; if(SysData.SET_Value > 12) SysData.SET_Value = 1; break; case SET_DAY: month[2] = 28; if ((Time_Set.year % 4 == 0 && Time_Set.year % 100 != 0) || (Time_Set.year % 400 == 0) ) month[2] = 29; if(SysData.SET_Value > month[Time_Set.month]) SysData.SET_Value = 1; if(SysData.SET_Value < 1) SysData.SET_Value = month[Time_Dec.month]; break; case SET_ALM_CLOCK_HOUR: case SET_HOUR: if(SysData.SET_Value > 23) SysData.SET_Value = 0; if(SysData.SET_Value < 0) SysData.SET_Value = 23; break; case SET_ALM_CLOCK_MINUTE: case SET_MINUTE: if(SysData.SET_Value > 59)SysData.SET_Value = 0; if(SysData.SET_Value < 0) SysData.SET_Value = 59; break; case SET_SECOND: if(SysData.SET_Value > 59) SysData.SET_Value = 0; if(SysData.SET_Value < 0) SysData.SET_Value = 59; break; case SET_ALM_CLOCK_EN: break; } } u32 HacedSendRec; void USB_Correspondence(void) //USB通信部份 { u16 Max_Sector = 23; //一天24个扇区 u16 Max_Read; u32 Read_Num; u8 *usb_p, Max_SendNum = 64, loopi; HacedSendRec = 0; //读取记录,把记录发送到PC if(SysFlag.GetRec == 1) { SysFlag.GetRec = 0; USB_Busy = 1; while(Max_Sector) { Max_SendNum = 64; Max_Read = 32; //一个扇区32组记录 Read_Num = SysData.Start_Rec ; SysData.Start_Rec += 32; usb_p = SPI_Rec_BUFF; if(SysData.Start_Rec > SysData.End_Rec) { Max_Read = (SysData.End_Rec - (SysData.Start_Rec - 32) + 1); Max_SendNum = Max_Read * 2; Max_Sector = 0;//下一步跳出while } while(Max_Read--)//读完32组 { SPI_Flash_ReadHalfPage(usb_p, Read_Num - 1); Read_Num++; usb_p += 128; } usb_p = SPI_Rec_BUFF; //一次把一个扇区 发送完 while(Max_SendNum--) { //发送64组数据 USBD_HID_SendReport(&USB_Device_dev, usb_p, MY_DEF_PACKET); usb_p += 64; HacedSendRec++; } } for(loopi = 0; loopi < 64; loopi++)SPI_Rec_BUFF[loopi] = 0xff; USBD_HID_SendReport(&USB_Device_dev, SPI_Rec_BUFF, MY_DEF_PACKET); USB_Busy = 0; Delayms(1500); } else if (SysFlag.GetDate == 1) //193 { SysFlag.GetDate = 0; USB_Busy = 1; Max_Sector = 193; SysData.Start_Rec = 1; usb_p = SPI_Rec_BUFF; while(Max_Sector--) { Max_SendNum = 64; Max_Read = 1365; Read_Num = SysData.Start_Rec; SysData.Start_Rec += 1365; if(SysData.Start_Rec > SysInfo.REC_HalfPages) { Max_Read = SysInfo.REC_HalfPages - (SysData.Start_Rec - 1365) + 1; Max_SendNum = (Max_Read * 3 - 1) / 64 + 1; Max_Sector = 0;//下一步跳出while } //1365 while(Max_Read--) { SPI_Flash_ReadDate(usb_p, Read_Num - 1); Read_Num++; usb_p += 3; } usb_p = SPI_Rec_BUFF; while(Max_SendNum--) { USBD_HID_SendReport(&USB_Device_dev, usb_p, MY_DEF_PACKET); usb_p += 64; } usb_p = SPI_Rec_BUFF; } while(SysData.Start_Rec <= SysInfo.REC_HalfPages) { SPI_Flash_ReadDate((u8 *)&SPI_Rec_BUFF, SysData.Start_Rec - 1); SysData.Start_Rec++; USBD_HID_SendReport(&USB_Device_dev, usb_p, 3); } for(loopi = 0; loopi < 64; loopi++)SPI_Rec_BUFF[loopi] = 0xff; USBD_HID_SendReport(&USB_Device_dev, SPI_Rec_BUFF, MY_DEF_PACKET);//选择日期框 USB_Busy = 0; Delayms(1500); } } void USB_Pro(void) { USB_Correspondence(); } void Save_Rec(void) { SysInfo.REC_HalfPages++; if(SysInfo.REC_HalfPages > MAX_REC_Pages) { //擦除前半个芯片 SysData.FlashNum = 1; SysFlag.EraseDoing = 1; SPI_Flash_EraseChip(); SysFlag.EraseDoing = 0; if(SysFlag.PWD) { SysInfo.PWRON_Erase = 1; Save_Param(&SysInfo.PWRON_Erase, sizeof(SysInfo.PWRON_Erase)); return; } if(SysInfo.ChipStart == 0) SysInfo.ChipStart = 1; //FLASH2为起始 else SysInfo.ChipStart = 0; //FLASH1为起始 Save_Param(&SysInfo.ChipStart, sizeof(SysInfo.ChipStart)); SysInfo.REC_HalfPages = MAX_PAGE + 1; } //一定要先保存页数,这样在写的时候断电,下次开机会自动跳到新的一页写,不会去覆盖未写完的那一页 Save_Param(&SysInfo.REC_HalfPages, sizeof(SysInfo.REC_HalfPages)); SPI_Flash_WriteHalfPage((u8 *)&Storage.Header, SysInfo.REC_HalfPages - 1); } void Check_Time(void) { if((Time_Bak.second == 59) && (Time_Dec.second == 0)) { if(Time_Bak.minute == Time_Dec.minute) { Get_Time(); return; } else if((Time_Bak.minute == 59) && (Time_Dec.minute == 0)) { if(Time_Bak.hour == Time_Dec.hour) { Get_Time(); return; } } } } void Save_Data(void) { Get_Time(); if(Time_Bak.second != Time_Dec.second) { Check_Time(); Time_Bak.year = Time_Dec.year ; Time_Bak.month = Time_Dec.month; Time_Bak.day = Time_Dec.day ; Time_Bak.hour = Time_Dec.hour ; Time_Bak.minute = Time_Dec.minute ; Time_Bak.second = Time_Dec.second ; SysData.SaveTime2s++; } else return; if(SysData.SaveTime2s < 2) { return; } SysData.SaveTime2s = 0; Storage.Result[SysData.Save_Cnt] = SysData.MaxTEMP_Save; SysData.MaxTEMP_Save = 0; if(SysData.Save_Cnt == 0) { //先获取时间 Storage.Header = 0XFD; Storage.Machine_State = 0; if(SysData.Freq_Weight == C_WEIGHT) { Storage.Machine_State |= 0X10; } if(SysData.Freq_Resp == FAST_RESP) { Storage.Machine_State |= 0X40; } Storage.Year = Time_Hex.year; Storage.Month = Time_Hex.month; Storage.Day = Time_Hex.day; Storage.Hour = Time_Hex.hour; Storage.Minute = Time_Hex.minute; Storage.Second = Time_Hex.second; } SysData.Save_Cnt++; if(SysData.Save_Cnt >= 60) { SysData.Save_Cnt = 0; if(SysFlag.PWD == 0) { Save_Rec(); } } } void USB_Decode(void) { uint8_t test_x1 = 0; uint8_t Buff_Test1[64]; switch(Report_buf[0]) { case 0xb4: SysFlag.GetDate = 1; break; case 0xA3: //读时间 Get_Time(); Send_Buffer[5] = Time_Hex.second; Send_Buffer[4] = Time_Hex.minute; Send_Buffer[3] = Time_Hex.hour; Send_Buffer[2] = Time_Hex.day; Send_Buffer[1] = Time_Hex.month; Send_Buffer[0] = Time_Hex.year; USBD_HID_SendReport (&USB_Device_dev, Send_Buffer, MY_DEF_PACKET); break; case 0xb3: Send_Buffer[0] = SysData.TEMP_Disp >> 8; Send_Buffer[1] = SysData.TEMP_Disp & 0x00ff; Send_Buffer[2] = 0;//这部分应改为温度 Send_Buffer[3] = SysData.HUMI_Disp >> 8; Send_Buffer[4] = SysData.HUMI_Disp & 0x00ff; Send_Buffer[5] = 0;//添加这部分为湿度 if(SysData.Freq_Resp == FAST_RESP) { Send_Buffer[2] |= 0x40; } Send_Buffer[2] |= 0x00;//默认范围30-130 Send_Buffer[3] = 0; USBD_HID_SendReport (&USB_Device_dev, Send_Buffer, MY_DEF_PACKET); break; case 0xb5://点击导入弹出的选项 Send_Buffer[0] = 0xfe; if(SysInfo.REC_HalfPages) { Send_Buffer[0] = 0xef; Send_Buffer[1] = SysInfo.REC_HalfPages >> 24; Send_Buffer[2] = (SysInfo.REC_HalfPages >> 16) & 0xff; Send_Buffer[3] = (SysInfo.REC_HalfPages >> 8) & 0xff; Send_Buffer[4] = SysInfo.REC_HalfPages & 0xff; } USBD_HID_SendReport (&USB_Device_dev, Send_Buffer, MY_DEF_PACKET); break; case 0xc4: //导入记录就等于0xc4 SysFlag.GetRec = 1; SysData.Start_Rec = (Report_buf[1] << 24) | (Report_buf[2] << 16) | (Report_buf[3] << 8 ) | Report_buf[4]; SysData.End_Rec = (Report_buf[5] << 24) | (Report_buf[6] << 16) | (Report_buf[7] << 8 ) | Report_buf[8]; if((SysData.End_Rec - SysData.Start_Rec) >= 720) { SysData.End_Rec = SysData.Start_Rec + 720 - 1; } Delayms(500); break; case 0x7c: Time_Hex.second = Report_buf[1]; Time_Hex.minute = Report_buf[2]; Time_Hex.hour = Report_buf[3]; Time_Hex.day = Report_buf[4]; Time_Hex.month = Report_buf[5]; Time_Hex.year = Report_buf[6]; Save_TimeDate(); break; case 0x56: break; } } void USBD_HID_SendReport (u8 *NoUse, u8 *Buff, u8 Num) { u32 loopi = 0; PrevXferComplete = 0; USB_SilWrite(EP1_IN, Buff, Num); _SetEPTxStatus(ENDP1, EP_TX_VALID); while(PrevXferComplete != 1 && loopi < 100) //10ms超时等待 { loopi++; Delayus(100); } } 现在要做的是把原来有关噪音的部分替换成温湿度的,还有usb部分
06-24
#! /bin/bash # This script is created by DQE Ghosty Liu 2020/08/10 # ### RW TEST PARAMETER ### PARTITION="sdb1" declare -i RW_count=1 declare -i RW_cycle=1 #(1 cycle = 128 MB) Check_Flag=1 #(1 = check disk scan result; 0 = not check disk scan result) Remove_Flag=1 #(1 = remove test file; 0 = not remove test file) ### PKTGEN TEST PARAMETER ### PAIRS="ens8f0-ens8f1-8 enp2s0f0-enp2s0f1-9 enp130s0f0-enp130s0f1-10 ens5f0-ens5f1-11 ens5f2-ens5f3-12" #(port-port-core) JUMBO=y declare -i TIME=30 ### STRESS TEST PARAMETER ### COMMAND="stress -c 4 -m 4 --vm-bytes 1024M -t 60" declare -i CYCLE=20 #(1 cycle = 3 seconds) ### PING TEST PARAMETER ### declare -i PING_COUNT=10 ### RTC WAKE PARAMETER ### declare -i delay=30 # <Decide the RTC wake up delay time here.> ### SPECIAL SCAN PARAMETER ### check_item="error" # <Add other check item for SPECIAL_SCAN here.> ########################################################################################################## function DD() { for k in $(seq $RW_count `expr $RW_cycle - 1`) do if [ ! -z "$k" ] then dd if=/dev/zero of=/$partition/$count.$k.tmp bs=32M count=4 conv=fsync &> /dev/null & fi done dd if=/dev/zero of=/$partition/$count.$RW_cycle.tmp bs=32M count=4 conv=fsync &> /dev/null } function RW_TEST() { if [ "$count" -gt "1" ] && [ "$Check_Flag" -eq "1" ] then echo -e "Check DISK SCAN reeult ..." if [ -z "`diff -q /Test/CYCLE_LOG/DISK_SCAN/1.log /Test/CYCLE_LOG/DISK_SCAN/$count.log`" ] then echo -e "Check Pass." else echo -e "Check failed. RW Test will be terminated." echo "COUNT=$count :" >> /Test/CYCLE_LOG/rw_test_fail.log echo -e "Check failed. RW Test had been skipped." >> /Test/CYCLE_LOG/rw_test_fail.log return 1 fi fi echo -e "Start Storage R/W Test ..." if [ ! -d "/Test/CYCLE_LOG/RW_TEST" ] then mkdir -p /Test/CYCLE_LOG/RW_TEST fi for partition in $PARTITION do if [ ! -d "/Test/CYCLE_LOG/RW_TEST/$partition" ] then mkdir -p /Test/CYCLE_LOG/RW_TEST/$partition fi if [ ! -z "`ls /dev/ | grep $partition`" ] || [ ! -d "/$partition" ] then mkdir -p /$partition if [ -z "`mount | grep $partition`" ] then mount /dev/$partition /$partition else if [ ! -z "`mount | grep $partition | grep /mnt/hdd`" ] then echo "Please make sure that Partition: $partition is not used by Testbed!" rm -rf /$partition rm -rf /Test/CYCLE_LOG/RW_TEST/$partition continue fi fi echo "COUNT : $count" >> /Test/CYCLE_LOG/RW_TEST/$partition/result.log (time -p DD) 2>> /Test/CYCLE_LOG/RW_TEST/$partition/result.log & sleep 1 fi done while [ 1 ] do buf=`ps -aux | grep -i "/dev/zero" | wc -l` if [ "$buf" -eq "1" ] then break fi sleep 1 done sync sleep 5 for partition in $PARTITION do if [ -d "/$partition" ] then if [ "$Remove_Flag" -eq "1" ] then rm -rf /$partition/* sync fi umount /$partition fi done if [ ! -z "`dmesg | grep -i ata | grep -i error`" ] then echo "COUNT=$count :" >> /Test/CYCLE_LOG/rw_test_fail.log dmesg | grep -i ata | grep -i error >> /Test/CYCLE_LOG/rw_test_fail.log fi } function PKTGEN_TEST() { echo -e "Start PKTGEN Test ..." if [ ! -d "/Test/CYCLE_LOG/PKTGEN_TEST" ] then mkdir -p /Test/CYCLE_LOG/PKTGEN_TEST fi if [ -z "`lsmod | grep pkt`" ] then echo "Please install pktgen driver first!!" exit 1 fi for pair in $PAIRS do PORT_A=`echo $pair | cut -d "-" -f 1` PORT_B=`echo $pair | cut -d "-" -f 2` CPU_NUM=`echo $pair | cut -d "-" -f 3` ifconfig $PORT_A up ifconfig $PORT_B up if [ "$count" -le "1" ] then echo $PORT_A >> /Test/CYCLE_LOG/ethernet_port.list echo $PORT_B >> /Test/CYCLE_LOG/ethernet_port.list fi echo "rem_device_all" > /proc/net/pktgen/kpktgend_$CPU_NUM echo "add_device $PORT_A" > /proc/net/pktgen/kpktgend_$CPU_NUM echo "add_device $PORT_B" > /proc/net/pktgen/kpktgend_$CPU_NUM echo "max_before_softirq 10000" > /proc/net/pktgen/kpktgend_$CPU_NUM if [ ! -f "/proc/net/pktgen/$PORT_A" ] || [ ! -f "/proc/net/pktgen/$PORT_B" ] then echo "Fail to add $pair to pktgen" exit 1 fi echo "count 0" > /proc/net/pktgen/$PORT_A echo "count 0" > /proc/net/pktgen/$PORT_B if [ "$JUMBO" == "y" ] then ifconfig $PORT_A mtu 9000 up ifconfig $PORT_B mtu 9000 up echo "pkt_size 9014" > /proc/net/pktgen/$PORT_A echo "pkt_size 9014" > /proc/net/pktgen/$PORT_B else echo "pkt_size 1514" > /proc/net/pktgen/$PORT_A echo "pkt_size 1514" > /proc/net/pktgen/$PORT_B fi echo "delay 100" > /proc/net/pktgen/$PORT_A echo "delay 100" > /proc/net/pktgen/$PORT_B echo "dst_mac `ifconfig $PORT_B | grep ether | tr -s " " | cut -d " " -f 3`" > /proc/net/pktgen/$PORT_A echo "dst_mac `ifconfig $PORT_A | grep ether | tr -s " " | cut -d " " -f 3`" > /proc/net/pktgen/$PORT_B done sleep 10 echo start > /proc/net/pktgen/pgctrl & declare -i buf=`cat /sys/class/rtc/rtc0/since_epoch` buf=$buf+$TIME while [ 1 ] do if [ "`cat /sys/class/rtc/rtc0/since_epoch`" -le "$buf" ] then sleep 1 else break fi done kill -9 $! sleep 1 for i in `cat /Test/CYCLE_LOG/ethernet_port.list` do if [ ! -f "/Test/CYCLE_LOG/PKTGEN_TEST/$i" ] then mkdir -p /Test/CYCLE_LOG/PKTGEN_TEST/$i fi ethtool -S $i | grep -i crc > /Test/CYCLE_LOG/PKTGEN_TEST/$i/CRC_$count.log cat /proc/net/pktgen/$i > /Test/CYCLE_LOG/PKTGEN_TEST/$i/PKTGEN_$count.log for j in `cat /Test/CYCLE_LOG/PKTGEN_TEST/$i/CRC_$count.log` do declare -i buf=`echo $j | cut -d ":" -f 2 | cut -d " " -f 2` if [ "$buf" -gt "0" ] then echo "COUNT=$count :" >> /Test/CYCLE_LOG/pktgen_test_fail.log echo "$i pktgen test result has CRC errors." >> /Test/CYCLE_LOG/pktgen_test_fail.log fi done sync done } function TIME_STAMP() { if [ "$count" -eq "1" ] then cat /sys/class/rtc/rtc0/since_epoch > /Test/CYCLE_LOG/time_stamp_tmp.log echo "$count: 0" > /Test/CYCLE_LOG/time_stamp.log else declare -i Ntime=`cat /sys/class/rtc/rtc0/since_epoch` declare -i Otime=`cat /Test/CYCLE_LOG/time_stamp_tmp.log` echo "$count: `expr $Ntime - $Otime`" >> /Test/CYCLE_LOG/time_stamp.log echo $Ntime > /Test/CYCLE_LOG/time_stamp_tmp.log fi } function STRESS() { echo -e "Start Stress Test ..." sleep 3 $COMMAND & top -d 3 -n $CYCLE clear } function DMESG() { if [ ! -d "/Test/CYCLE_LOG/DMESG" ] then mkdir -p /Test/CYCLE_LOG/DMESG fi dmesg > /Test/CYCLE_LOG/DMESG/$count.log sync } function PING_TEST() { echo -e "Start PING Test ..." if [ ! -d "/Test/CYCLE_LOG/PING_TEST" ] then mkdir -p /Test/CYCLE_LOG/PING_TEST fi if [ ! -f "/Test/ping.config" ] then echo "Couldn't find ping.config on path /Test! Stop PING_TEST..." sleep 3 break else Ping_item=`cat /Test/ping.config` # <The ping.config shall be "name1_source-address1_destination-address1 name2_source-address2_destination-address2 ...".> for i in $Ping_item do ETH_NAME=`echo $i | cut -d "_" -f 1` S_ADDRESS=`echo $i | cut -d "_" -f 2` D_ADDRESS=`echo $i | cut -d "_" -f 3` ifconfig $ETH_NAME $S_ADDRESS up sleep 3 echo -e "\n$ETH_NAME ping $D_ADDRESS test..." ping -I $ETH_NAME $D_ADDRESS -c $PING_COUNT >> /Test/ping.$ETH_NAME.[$D_ADDRESS].tmp & done fi while [ 1 ] do Buf=`ps | grep -i eth | wc -l` if [ "$Buf" = "1" ] then sleep 3 break fi done Buf_stress=`ps | grep -i stress | wc -l` if [ "$Buf_stress" -ne "1" ] then pkill stress fi Ping_tmp=`ls /Test | grep -i .tmp` for i in $Ping_tmp do if [ ! -f "/Test/CYCLE_LOG/PING_TEST/$i" ] then mkdir -p /Test/CYCLE_LOG/PING_TEST/$i fi j=`echo $i | cut -d "." -f 2` cat /Test/$i >> /Test/CYCLE_LOG/PING_TEST/$i/$count.log if [ -z "`cat /Test/$i | grep -i ttl=`" ] then echo "COUNT=$count :" >> /Test/CYCLE_LOG/ping_test_fail.log echo "$i ping test failed." >> /Test/CYCLE_LOG/ping_test_fail.log cat /Test/$i >> /Test/CYCLE_LOG/ping_test_fail.log echo " " >> /Test/CYCLE_LOG/ping_test_fail.log ifconfig $j >> /Test/CYCLE_LOG/ping_test_fail.log echo " " >> /Test/CYCLE_LOG/ping_test_fail.log ethtool $j >> /Test/CYCLE_LOG/ping_test_fail.log echo "=====================================================" >> /Test/CYCLE_LOG/ping_test_fail.log fi rm -rf /Test/$i done sync sleep 1 } function SPECIAL_SCAN() { if [ ! -d "/Test/CYCLE_LOG/SPECIAL_SCAN" ] then mkdir -p /Test/CYCLE_LOG/SPECIAL_SCAN fi for i in `echo $check_item` do dmesg | grep -i $i | cut -d "]" -f 2 >> /Test/CYCLE_LOG/SPECIAL_SCAN/$count.log dmesg | grep -i $i >> /Test/CYCLE_LOG/special_scan.log done echo "=====================================================" >> /Test/CYCLE_LOG/special_scan.log if [ -f "/Test/CYCLE_LOG/SPECIAL_SCAN/1.log" ] then BUFFER=`diff -q /Test/CYCLE_LOG/SPECIAL_SCAN/1.log /Test/CYCLE_LOG/SPECIAL_SCAN/$count.log` if [ ! -z "$BUFFER" ] then echo "COUNT=$count :" >> /Test/CYCLE_LOG/SPECIAL_SCAN_fail.log diff /Test/CYCLE_LOG/SPECIAL_SCAN/1.log /Test/CYCLE_LOG/SPECIAL_SCAN/$count.log >> /Test/CYCLE_LOG/SPECIAL_SCAN_fail.log echo " " >> /Test/CYCLE_LOG/SPECIAL_SCAN_fail.log fi fi sync sleep 1 } function USB_SCAN() { echo -e "Scanning USB devices ..." if [ ! -d "/Test/CYCLE_LOG/USB_SCAN" ] then mkdir -p /Test/CYCLE_LOG/USB_SCAN fi lsusb -tvv >> /Test/CYCLE_LOG/USB_SCAN/$count.log lsusb -tvv >> /Test/CYCLE_LOG/usb_scan.log echo "=====================================================" >> /Test/CYCLE_LOG/usb_scan.log if [ -f "/Test/CYCLE_LOG/USB_SCAN/1.log" ] then BUFFER=`diff -q /Test/CYCLE_LOG/USB_SCAN/1.log /Test/CYCLE_LOG/USB_SCAN/$count.log` if [ ! -z "$BUFFER" ] then echo "COUNT=$count :" >> /Test/CYCLE_LOG/USB_SCAN_fail.log diff /Test/CYCLE_LOG/USB_SCAN/1.log /Test/CYCLE_LOG/USB_SCAN/$count.log >> /Test/CYCLE_LOG/USB_SCAN_fail.log echo " " >> /Test/CYCLE_LOG/USB_SCAN_fail.log fi fi #/Test/67b-usblist.sh >> /Test/CYCLE_LOG/tb_usblist.log sync sleep 1 } function DRIVER_INSTALL() { for i in /Test/*.ko do insmod $i done sleep 1 } function PCIE_SCAN() { echo -e "\nScanning PCIe devices ..." if [ ! -d "/Test/CYCLE_LOG/PCIE_SCAN" ] then mkdir -p /Test/CYCLE_LOG/PCIE_SCAN fi for i in `lspci | sed 's/ /_/g'` do DEVICE=`echo $i | cut -d "_" -f 1` LNK_CAP_SPEED=`lspci -s $DEVICE -vv | grep LnkCap: | cut -d ":" -f 2 | cut -d "," -f 2` LNK_CAP_WIDTH=`lspci -s $DEVICE -vv | grep LnkCap: | cut -d ":" -f 2 | cut -d "," -f 3` LNK_STA_SPEED=`lspci -s $DEVICE -vv | grep LnkSta: | cut -d ":" -f 2 | cut -d "," -f 1` LNK_STA_WIDTH=`lspci -s $DEVICE -vv | grep LnkSta: | cut -d ":" -f 2 | cut -d "," -f 2` if [ ! -z "$LNK_CAP_SPEED" ] && [ ! -z "$LNK_STA_SPEED" ] then echo "$i : CAPABILITY=$LNK_CAP_SPEED, $LNK_CAP_WIDTH & STATUS=$LNK_STA_SPEED, $LNK_STA_WIDTH" >> /Test/CYCLE_LOG/PCIE_SCAN/$count.log echo "$i : CAPABILITY=$LNK_CAP_SPEED, $LNK_CAP_WIDTH & STATUS=$LNK_STA_SPEED, $LNK_STA_WIDTH" >> /Test/CYCLE_LOG/pcie_scan.log else echo "$i :" >> /Test/CYCLE_LOG/PCIE_SCAN/$count.log echo "$i :" >> /Test/CYCLE_LOG/pcie_scan.log fi done echo "Total count = `lspci | wc -l`" >> /Test/CYCLE_LOG/PCIE_SCAN/$count.log echo "Total count = `lspci | wc -l`" >> /Test/CYCLE_LOG/pcie_scan.log echo "=====================================================" >> /Test/CYCLE_LOG/pcie_scan.log if [ -f "/Test/CYCLE_LOG/PCIE_SCAN/1.log" ] then BUFFER=`diff -q /Test/CYCLE_LOG/PCIE_SCAN/1.log /Test/CYCLE_LOG/PCIE_SCAN/$count.log` if [ ! -z "$BUFFER" ] then echo "COUNT=$count :" >> /Test/CYCLE_LOG/PCIE_SCAN_fail.log diff /Test/CYCLE_LOG/PCIE_SCAN/1.log /Test/CYCLE_LOG/PCIE_SCAN/$count.log >> /Test/CYCLE_LOG/PCIE_SCAN_fail.log echo " " >> /Test/CYCLE_LOG/PCIE_SCAN_fail.log fi fi #/Test/64a-get_pcilist.sh >> /Test/CYCLE_LOG/tb_pcilist.log sync sleep 1 } function DISK_SCAN() { echo -e "Scanning Storage devices ..." if [ ! -d "/Test/CYCLE_LOG/DISK_SCAN" ] then mkdir -p /Test/CYCLE_LOG/DISK_SCAN fi for i in `ls /sys/block/` do if [ -f "/sys/block/$i/device/model" ] then if [ ! -z "$(cat /sys/block/$i/device/model | grep -v Virtual)" ] then SIZE=$(expr `cat /sys/block/$i/size` \* 512) echo -e "$i : `cat /sys/block/$i/device/model`\t Size = $SIZE Byte" >> /Test/CYCLE_LOG/DISK_SCAN/$count.log echo -e "$i : `cat /sys/block/$i/device/model`\t Size = $SIZE Byte" >> /Test/CYCLE_LOG/disk_scan.log fi elif [ -f "/sys/block/$i/device/name" ] then SIZE=$(expr `cat /sys/block/$i/size` \* 512) echo -e "$i : `cat /sys/block/$i/device/name`\t Size = $SIZE Byte" >> /Test/CYCLE_LOG/DISK_SCAN/$count.log echo -e "$i : `cat /sys/block/$i/device/name`\t Size = $SIZE Byte" >> /Test/CYCLE_LOG/disk_scan.log fi done echo "=====================================================" >> /Test/CYCLE_LOG/disk_scan.log if [ -f "/Test/CYCLE_LOG/DISK_SCAN/1.log" ] then BUFFER=`diff -q /Test/CYCLE_LOG/DISK_SCAN/1.log /Test/CYCLE_LOG/DISK_SCAN/$count.log` if [ ! -z "$BUFFER" ] then echo "COUNT=$count :" >> /Test/CYCLE_LOG/DISK_SCAN_fail.log diff /Test/CYCLE_LOG/DISK_SCAN/1.log /Test/CYCLE_LOG/DISK_SCAN/$count.log >> /Test/CYCLE_LOG/DISK_SCAN_fail.log echo " " >> /Test/CYCLE_LOG/DISK_SCAN_fail.log fi fi #/Test/66a-get_hddlist.sh >> /Test/CYCLE_LOG/tb_hddlist.log sync sleep 1 } function MAC_SCAN() { echo -e "Scanning Ethernet port MAC address ..." if [ ! -d "/Test/CYCLE_LOG/MAC_SCAN" ] then mkdir -p /Test/CYCLE_LOG/MAC_SCAN fi for i in `ls /sys/class/net/` do if [ -d "/sys/class/net/$i/device" ] then echo -e "$i\t : `cat /sys/class/net/$i/address`" >> /Test/CYCLE_LOG/MAC_SCAN/$count.log echo -e "$i\t : `cat /sys/class/net/$i/address`" >> /Test/CYCLE_LOG/mac_scan.log fi done echo "=====================================================" >> /Test/CYCLE_LOG/mac_scan.log if [ -f "/Test/CYCLE_LOG/MAC_SCAN/1.log" ] then BUFFER=`diff -q /Test/CYCLE_LOG/MAC_SCAN/1.log /Test/CYCLE_LOG/MAC_SCAN/$count.log` if [ ! -z "$BUFFER" ] then echo "COUNT=$count :" >> /Test/CYCLE_LOG/MAC_SCAN_fail.log diff /Test/CYCLE_LOG/MAC_SCAN/1.log /Test/CYCLE_LOG/MAC_SCAN/$count.log >> /Test/CYCLE_LOG/MAC_SCAN_fail.log echo " " >> /Test/CYCLE_LOG/MAC_SCAN_fail.log fi fi sync sleep 1 } function CLEAR_LOG() { if [ -d "/Test/CYCLE_LOG" ] then DATE=`date | sed 's/ /_/g' | sed 's/:/_/g' | sed 's/__/_/g'` mkdir -p /Test/$DATE mv /Test/CYCLE_LOG/* /Test/$DATE sync rm -rf /Test/CYCLE_LOG fi } function DEBUG() { if [ "$1" = "disk" ] || [ "$1" = "DISK" ] then DISK_SCAN echo "-------------------------------------------" cat /Test/CYCLE_LOG/DISK_SCAN/1.log echo "-------------------------------------------" rm -rf /Test/CYCLE_LOG/* elif [ "$1" = "pcie" ] || [ "$1" = "PCIE" ] then PCIE_SCAN echo "-------------------------------------------" cat /Test/CYCLE_LOG/PCIE_SCAN/1.log echo "-------------------------------------------" rm -rf /Test/CYCLE_LOG/* elif [ "$1" = "usb" ] || [ "$1" = "USB" ] then USB_SCAN echo "-------------------------------------------" cat /Test/CYCLE_LOG/USB_SCAN/1.log echo "-------------------------------------------" rm -rf /Test/CYCLE_LOG/* elif [ "$1" = "special" ] || [ "$1" = "SPECIAL" ] then SPECIAL_SCAN echo "-------------------------------------------" cat /Test/CYCLE_LOG/SPECIAL_SCAN/1.log echo "-------------------------------------------" rm -rf /Test/CYCLE_LOG/* elif [ "$1" = "mac" ] || [ "$1" = "MAC" ] then MAC_SCAN echo "-------------------------------------------" cat /Test/CYCLE_LOG/MAC_SCAN/1.log echo "-------------------------------------------" rm -rf /Test/CYCLE_LOG/* elif [ "$1" = "rw" ] || [ "$1" = "RW" ] then RW_TEST echo "-------------------------------------------" for i in $PARTITION do if [ -d "/$i" ] then cat /Test/CYCLE_LOG/RW_TEST/$i/result.log else echo "Partition: $i could not be tested!" fi done echo "-------------------------------------------" rm -rf /Test/CYCLE_LOG/* elif [ "$1" = "ping" ] || [ "$1" = "PING" ] then Ping_item=`cat /Test/ping.config` PING_TEST Log_list=`ls /Test/CYCLE_LOG/PING_TEST` for i in $Log_list do echo "-------------------------------------------" cat /Test/CYCLE_LOG/PING_TEST/$i/1.log echo "-------------------------------------------" done rm -rf /Test/CYCLE_LOG/* elif [ "$1" = "stress" ] || [ "$1" = "STRESS" ] then STRESS elif [ "$1" = "pktgen" ] || [ "$1" = "PKTGEN" ] then PKTGEN_TEST for i in `cat /Test/CYCLE_LOG/ethernet_port.list` do echo "-------------------------------------------" cat /Test/CYCLE_LOG/PKTGEN_TEST/$i/CRC_1.log cat /Test/CYCLE_LOG/PKTGEN_TEST/$i/PKTGEN_1.log echo "-------------------------------------------" done rm -rf /Test/CYCLE_LOG/* elif [ "$1" = "clean" ] || [ "$1" = "CLEAN" ] then CLEAR_LOG else mkdir -p /Test/CYCLE_LOG echo $1 > /Test/CYCLE_LOG/goal.tmp echo $2 > /Test/CYCLE_LOG/power_cycle.tmp fi } function POWER_CYCLE() { COMMAND=`cat /Test/CYCLE_LOG/power_cycle.tmp` if [ $COMMAND == poweroff ] then echo 0 > /sys/class/rtc/rtc0/wakealarm echo `expr $(date +%s) + $delay` > /sys/class/rtc/rtc0/wakealarm $COMMAND else $COMMAND fi } if [ -z "$1" ] then if [ -f "/Test/CYCLE_LOG/goal.tmp" ] && [ -f "/Test/CYCLE_LOG/power_cycle.tmp" ] then #DRIVER_INSTALL declare -i goal=`cat /Test/CYCLE_LOG/goal.tmp` declare -i count if [ ! -d "/Test/CYCLE_LOG" ] then mkdir -p /Test/CYCLE_LOG fi if [ ! -f "/Test/CYCLE_LOG/count.log" ] then echo 1 > /Test/CYCLE_LOG/count.log echo 1 > /Test/CYCLE_LOG/first.tmp fi count=`cat /Test/CYCLE_LOG/count.log` if [ ! -f "/Test/CYCLE_LOG/FLAG01" ] && [ ! -f "/Test/CYCLE_LOG/first.tmp" ] then echo "The $count times test is not finished correctly!" >> /Test/CYCLE_LOG/Warnning.log count+=1 echo $count > /Test/CYCLE_LOG/count.log else if [ -f "/Test/CYCLE_LOG/FLAG01" ] then rm -rf /Test/CYCLE_LOG/FLAG01 fi fi if [ ! -f "/Test/CYCLE_LOG/FLAG02" ] && [ ! -f "/Test/CYCLE_LOG/first.tmp" ] then if [ ! -z "`ls /Test/CYCLE_LOG/PCIE_SCAN/ | grep $count.log`" ] then count+=1 echo $count > /Test/CYCLE_LOG/count.log fi else if [ -f "/Test/CYCLE_LOG/FLAG02" ] then rm -rf /Test/CYCLE_LOG/FLAG02 fi fi sync if [ -f "/Test/CYCLE_LOG/first.tmp" ] then rm -rf /Test/CYCLE_LOG/first.tmp fi clear echo "******************************************************" echo "* *" echo "* System is starting the $count times cycle test ... " echo "* *" echo "******************************************************" read -p "Press [c] to stop testing! " -t 5 -n 1 stop if [ "$stop" = "c" ] then echo 0 > /sys/class/rtc/rtc0/wakealarm CLEAR_LOG exit 0 fi PCIE_SCAN DISK_SCAN #RW_TEST USB_SCAN MAC_SCAN SPECIAL_SCAN #PKTGEN_TEST #STRESS #PING_TEST DMESG TIME_STAMP if [ "$count" -ge "$goal" ] then CLEAR_LOG clear echo "******************************************************" echo "* *" echo "* The power cycle test has been finished! *" echo "* *" echo "******************************************************" read -p "Press any key to continue! " -n 1 continue else echo 1 > /Test/CYCLE_LOG/FLAG01 count+=1 echo $count > /Test/CYCLE_LOG/count.log echo 1 > /Test/CYCLE_LOG/FLAG02 sync clear echo "******************************************************" echo "* *" echo "* The `expr $count - 1` times cycle test is completed ... " echo "* *" echo "******************************************************" sleep 1 POWER_CYCLE fi fi else declare -i count=1 if [ -z "$2" ] then DEBUG $1 else DEBUG $1 $2 fi fi 帮忙将这个脚本优化一下,我只是用来计数开关机的次数,只要开机能显示执行了多少次的效果,其他多余的部分请帮忙删除
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值