一句log引发的血案

先上代码

         unsigned nlcmVendorSize;
	void *plcmVendorID;
 
	plcmVendorID =smem_get_entry(SMEM_LCM_VENDOR_ID, &nlcmVendorSize);
        printk(KERN_INFO"\n[LCD_COMP]plcmVendorID=%d\n",*((uint32*)plcmVendorID));

        printk(KERN_INFO"[LCD_COMP]Default lcm_vedor=%d\n",lcm_vedor);
	if(plcmVendorID!=NULL)
	{
		/*Shared LCD type is available*/
		if( *((uint32*)plcmVendorID)>LCM_VENDOR_ID_MIN && *((uint32*)plcmVendorID)<LCM_VENDOR_ID_MAX)
		{
			if(*((uint32*)plcmVendorID)==LCM_VENDOR_ID_CHENXING)
			{
				lcm_vedor=LCM_VENDOR_ID_CHENXING;
				printk(KERN_INFO"[LCD_COMP]LCM is ChenXing\n");
			}
			else if(*((uint32*)plcmVendorID)==LCM_VENDOR_ID_DJN)
			{
				lcm_vedor=LCM_VENDOR_ID_DJN;
				printk(KERN_INFO"[LCD_COMP]LCM is DJN\n");
			}
		}
		else		
		printk(KERN_INFO"[LCD_COMP]Select default lcm\n");
		//else select default lcm
	}
	else{
		printk(KERN_INFO"[LCD_COMP]Read SMEM_LCM_VENDOR_ID Fail, Select deault LCM\n");	
		//select default lcm
	}
	printk(KERN_INFO"[LCD_CMOP]lcm_vedor=%d\n\n",lcm_vedor);  

        做lcd“兼容”时,由于lcd的spi没有接sdo,无法从ic读数据,于是只能通过配置不同的efs来做兼容。要从arm9端通过共享内存接口读数据,出错处理比较多,如可能读不到,可能读错,都需要考虑到。添加的代码如上,经测试发现了个致命的问题:如果modern端efs没有配置,导致无法开机!(虽然arm9和arm11端代码正常应该一致,为了防止人为疏忽,以防万一,还得查找原因:-( )。最终找到原因,差点吐血:

plcmVendorID =smem_get_entry(SMEM_LCM_VENDOR_ID, &nlcmVendorSize);读取失败,返回0,此时plcmVendorID=0,即此指针不指向任何变量,

千不该万不该,为了调试方便,我在紧随其后加了句测试代码:

 
 
printk(KERN_INFO"\n[LCD_COMP]plcmVendorID=%d\n",*((uint32*)plcmVendorID))


如果plcmVendorID为0这个指针根本不会指向任何变量,但prink却要打印其指向变量的值!!??

解决方法,将这句printk下移放入if(plcmVendorID!=NULL)中,即只有这个指针有指向时才打印!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值