WINCE设备开机灰屏问题(很怪异)
1. 问题现象
图1
无法进入系统,虽然没有调试信息,但应该可以判断是程序跑飞了。我们这款产品用到3种显示屏(采用不同的驱动IC),可是测试发现1和2号屏就没有这个问题,只有3号屏有这个问题,发生的概率是1/10。
2. 问题的排查
我们刷回2014.03.13日的系统,没有发现此问题,那肯定是后来改出来的问题,经过排查是因为eboot中OEMPlatformInit()--->InitDisplay()增加了下面的调试信息引起,如下:
UINT16hsync_cnt,vclk_cnt;
UINT8lcd_vbpd,lcd_vfpd,lcd_vspw,lcd_hbpd,lcd_hfpd,lcd_hspw;
..............
clkval =(UINT8)(((float)S3C2450_HCLK/(float)(hsync_cnt*vclk_cnt*lcd_frame_rate))+0.5)-1;
RETAILMSG(1,(TEXT("clkval=%d,hsync_cnt=%d,vclk_cnt=%d,lcd_hbpd=%d,lcd_hfpd=%d "),clkval*100,hsync_cnt,vclk_cnt,lcd_hbpd,lcd_hfpd));
…………….
但很奇怪的是为什么其他两种屏不会出现此问题呢?暂时无法解释,备忘。
3. 问题的分析
虽然知道是因为增加上面调试新引起的,但无法解释原因,我进一步做下面的测试:
(1) 怀疑是乘法问题,把clkval*10改为clkval,但问题依旧。
hsync_cnt,vclk_cnt
(2) 去掉类型为UINT16的hsync_cnt和vclk_cnt,测试OK
typedef unsigned short UINT16;
所以初步可以判断是输出参数类型引起的,但没有深入分析其原因,先记录下来。