1.修改程序要注意代码的上下文。
eg 1:
ERR:
if (GetTimeOverFlag(&g_sRentalReturnlBikeTime))//超时 { CardReaderBuzzer(piFileHandle, DEF_CARD_SET_BUZZER_ERR_TIME);//读卡器蜂鸣器 _rf_sleep(piFileHandle); FPR("0 _rfsleep"); #if DEF_ENABLE_NET_RENTAL_BIKE == DEF_ENABLE_NET_RENTAL_BIKE_WRITE_CARD #else ComPlayWave(__FILE__, __LINE__, __FUNCTION__, DEF_WAVE_NO_DKSB, DEF_TYPE_WAV);//请重新刷卡,卡片停留在读卡区域5秒钟 #endif _printf("++++++ 刷卡网络等待超时 return ++++++"); //设置卡是没有注册的,所以这里判断是否是设置ip的卡 iRetCode = readCardType(piFileHandle); return DEF_FAILURE_REASON_NET_RENTAL_BIKE_TIMEOUT;//后台返回超时 }
OK:
if (GetTimeOverFlag(&g_sRentalReturnlBikeTime))//超时 { CardReaderBuzzer(piFileHandle, DEF_CARD_SET_BUZZER_ERR_TIME);//读卡器蜂鸣器 _rf_sleep(piFileHandle); FPR("0 _rfsleep"); #if DEF_ENABLE_NET_RENTAL_BIKE == DEF_ENABLE_NET_RENTAL_BIKE_WRITE_CARD //设置卡是没有注册的,所以这里判断是否是设置ip的卡 iRetCode = readCardType(piFileHandle); #else ComPlayWave(__FILE__, __LINE__, __FUNCTION__, DEF_WAVE_NO_DKSB, DEF_TYPE_WAV);//请重新刷卡,卡片停留在读卡区域5秒钟 #endif _printf("++++++ 刷卡网络等待超时 return ++++++"); return DEF_FAILURE_REASON_NET_RENTAL_BIKE_TIMEOUT;//后台返回超时 }
2.调试某个模块,最好是有测试函数。
在整体调试程序时,因为某个模块有问题,影响了整体的调试,最好将出错的模块找出来,单独调试。
嵌入式linux调试app每次都要重新编译,编译后要下载文件到测试板运行调试,费时。
while (1)//test { iRetCode = rf_m1_init(piFileHandle); if (iRetCode == DEF_STATUE_M1_INIT_OK) { CCardInfo CardInfoTmp; statue = ProcessRentalBikeWrite(piFileHandle, &CardInfoTmp, DEF_RENTAL_FLAG); //借车时的刷卡写卡流程 } else { } sleep(5); }
int ProcessRentalBikeWrite(int* piFileHandle, CCardInfo* pCardInfoTmp, char cflag)//借车时的刷卡写卡流程 { int iRetCode = 0; int iCount = 0; int i = 0; int iTryMaxTimes = 0; if (cflag == DEF_RENTAL_FLAG)//正常的借车,短信借车是不用写卡的 { int iTryMaxTimes = 10; for (i = 0; i < iTryMaxTimes; i++) { #if 0 int iRetCode = unionpay_m1_init(piFileHandle);//写卡是有问题的,这个是针对银行卡 #else iRetCode = rf_m1_init(piFileHandle); #endif if (iRetCode == DEF_STATUE_M1_INIT_OK) { iRetCode = 0; iRetCode = ProcessBikeWriteM1(piFileHandle, pCardInfoTmp, DEF_RENTAL_FLAG); //用户刷卡后,初始化数据 if (iRetCode != DEF_STATUE_M1_WRITE_OK)
一下就发现unionpay_m1_init 是这个函数的问题。
3.for函数的基本要素,每次记得最后要添加break continue还有最后一次的处理
int iTryMaxTimes = 10; for (i = 0; i < iTryMaxTimes; i++)
{
XXX;
break; } else { if (i >= (iTryMaxTimes-1)) {//最后一次也不成功 PRERR("最后一次写M1卡不成功"); iRetCode = DEF_STATUE_M1_ICODE2_WRITE_FAIL; return iRetCode; } usleep(100 * 1000); }