本次使用的是GVM08F003,没有调试功能,只能摸着石头过河。
在下面这段代码里面的printf如果注释掉的话程序就无法正常运行。
经过多次验证,是定义的ADC_data[]这个数组的问题。定义是unsigned short int ADC_data[30],使用时只用了10个大小。将定义改为unsigned short int ADC_data[10]就能够解决掉。
ADCCHNS = 0x04;
while(!(MISCSTUS & MISCSTUS_ADC_EOC));
ADC_data[adc_i++] =(ADCDATH << 8) | ADCDATL;
if(adc_i>9)
{
for(j=0;j<9;j++)
{
for(k=j;k<9;k++)
{
if(ADC_data[k]>ADC_data[k+1])
{
ADC_data[k] = ADC_data[k] + ADC_data[k+1];
ADC_data[k+1] = ADC_data[k] - ADC_data[k+1];
ADC_data[k] = ADC_data[k] - ADC_data[k+1];
}
}
}
voltage_data = (ADC_data[5] + ADC_data[6])/2;
printf("voltage_data = %d\n",voltage_data);
adc_i=0;
if((voltage_data<2800)&&(High_pretime>100)) High_pretime = 100;
if(voltage_data>=3050){High_pretime++;} //4.1Vʱ2900<Pre_num<2918 4.185V,,3072
else if(voltage_data<=3000){if(High_pretime>0)High_pretime--;}
if(High_pretime>101)
{
LED_ON_BLUE;
LED_OFF;
if(High_pretime>200) High_pretime=150;
}
else{
LED_OFF_BLUE; ///³äÂúºÍ²»Âú״̬Ìáʾ
LED_ON;
}
}
大概认为是内存访问出错导致的程序崩溃,但是具体怎么出错能力有限无法判断得出。在这里请教一下大家。
还有,为什么在不注释掉printf时程序就能够正常运行。printf函数无法跳转过去看,也不清楚。