代码如下:
//读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);