频道栏目
首页 > 资讯 > 其他 > 正文

疑难杂症之复位重启解决方法

18-04-14        来源:[db:作者]  
收藏   我要投稿

代码如下:

//读addmax,delmax值和已读记录数
static U8 CmdDealFaceAndFingerSubReadAddDel(U8 *appData)
{
U8 i;
U8 txLen;
U8 rxLen;
U8 responseLen;
U8 rxData[16];
U8 txData[16];
U8 responseData[32];
U8 dataLen;
U8 offset;
txLen = 16;
rxLen = appData[1] - 4;
for(i=0; i {
rxData[i] = appData[3+i];
}
for(i=0; i {
txData[i] = 0xff;
}
dataLen = rxLen-1;//核心数据长度
offset = 3;
txData[0] = appData[offset+0];//功能号
FingerIdReadAddVal((U8 *)(&txData[0]));
FingerIdReadDelVal((U8 *)(&txData[4]));
FingerIdReadAlrNum((U8 *)(&txData[8]));
/*
这样写编译器会出问题
FingerIdReadAddVal((U8 *)(&txData[1]));
FingerIdReadDelVal((U8 *)(&txData[5]));
FingerIdReadAlrNum((U8 *)(&txData[9]));
*/
/*
这样写编译器会出问题
//FingerIdReadAddVal(txData+1);
//FingerIdReadDelVal(txData+5);
//FingerIdReadAlrNum(txData+9);

*/

进一步跟踪出问题的函数:

void FingerIdReadAddVal(U8 *pData)
{
Read_AddVal(FILE_3, (U8 *)pData);
}
void FingerIdReadDelVal(U8 *pData)
{
Read_DELVal(FILE_3, (U8 *)pData);

}

void Read_AddVal(u8 fileNo,u8 *pData)
{
u16 ret;
u16 addr;
u8 buf[5];
addr = ADDVAL_EEPROM_ADDR + fileNo*5;
at24cxx_read(addr, buf, 5);
if(!DeCkSum(buf, 4))
{
memcpy(pData, buf, 4);
}
else
{
memset(pData,0,4);
}
log_debug(("Read Add Val %lx from EEPROM %x\n",*((u32 *)pData),addr));

}

根据经验:问题应该是出在这个库函数上。估计小厂的sdk做得有点垃圾,根本没考虑全面,留下如此大坑。看来尽量不要选用小厂的产品是明智的。有时间进一步研究一下。

memcpy(pData, buf, 4);

相关TAG标签
上一篇:移动开发中设置布局方法
下一篇:Windows搭建Shadow服务的教程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站