C调试技巧编程-IS_FIRST模式

文章目录

  • 前提介绍
  • 代码示例

前提介绍

最近项目进行调试最后阶段,在读取数据时,与上位机联机调试,发现读取的第一包数据有异常的概率,
通过抓包打断点的方式,分析获取的数据源,因为只有第一次调取读取函数有异常,所以对第一次读取的数据进行判断,如果小于正常值,则进入断点,成功抓取数据;如果获得第一次数据正常,则不满足异常条件,直接重启,进行反复抓包测试;

代码示例

bool olt_vib_temp_point_get(rz_olt_vib_t *t, float *Vol)
{
	static bool is_first = true;
	uint8_t i;
	uint16_t tempVoltage[CHANNEL_VOLTAGE_NUM];
	prz_cali_coef_init_t pcalic_coef = rz_cali_coef_init_get();
	memset(tempVoltage, 0, sizeof(uint16_t)*CHANNEL_VOLTAGE_NUM);  
    
	if(true != i2c_read_channel_voltage(tempVoltage, 2, NULL))
	{
        rt_kprintf("i2c_read_channel_voltage fail \r\n");
		return false;
	}
	
	for(i = 0; i < CHANNEL_VOLTAGE_NUM; i++)
	{
		Vol[i] = tempVoltage[i]*4.096/65536*(pcalic_coef->vib_cali_coef.temp_voltage_k[i]) + (pcalic_coef->vib_cali_coef.temp_voltage_b[i]);

        printf("tempVoltage CH[%d]= %d  TEMP_CH[%d]=%05.3f \r\n",i+1, tempVoltage[i], i+1, Vol[i]);
    }
#if 1 
	if(true == is_first)
	{
		is_first = false;
		if( Vol[0] < 1.0 && Vol[1] < 1.0 && Vol[2] < 1.0 )
		{
			   printf("tempVoltage < 1.1V ");
		}
		else
		{
			olt_quit_online_test(t);
			rt_thread_delay(500);
			NVIC_SystemReset();
		}
	}  
#endif
   
	return true;
}

你可能感兴趣的:(C设计技巧)