收发缓冲区 g_pcIIC_BUFFER有BUG,会造成内存出错。
解决办法是:
1、接收:
先使用数组保存数据,完成后再复制到接收缓冲区
case Master_receive:
if (g_uIIC_PT>0)
{
bDone = FALSE;
#ifdef DEBUG_BUG //20100714 xiehb
g_pcReBuffer[g_uIIC_PT-1] = g_pIICReg->IICDS;
RETAILMSG(DEBUFMSG_ENABLE,(TEXT("[I2C_IST] Receive Byte: 0x%02X/n"),g_pcReBuffer[g_uIIC_PT-1]));
#else
g_pcIIC_BUFFER[g_uIIC_PT-1] = g_pIICReg->IICDS;
#endif
}
然后:
if(g_uIIC_PT != 0)
{
memcpy(g_pcIIC_BUFFER, g_pcReBuffer, g_uIIC_PT); //20100625 xiehb
DEBUGMSG(ZONE_INFO,(TEXT("[IIC READ]g_uIIC_PT = %d/r/n"),g_uIIC_PT));
}
2、发送:
将要发送的数据保存到发送缓冲数组,再在IIC_IST里面发送
g_pIICReg->IICDS = g_pcSeBuf[g_uIIC_PT];
发送模式完成避开了g_pcIIC_BUFFER指针
这样修改之后,数据读写就完全正确了,不会再出现内存错误了,但是还有一点我还没有搞明白,g_pcIIC_BUFFER指针为什么 会出错,可能是我的水平问题,看不出在哪里出错,有知道的请赐教了,多谢多谢!