2013/12/10 18:19
双核通信打印导致ARM死机问题
bug:strcpy与strncpy的区别,根本原因是内存访问越界 & 数组越界
case DEBUG_INFO_HWI:
Len = pMsg->lenOfMsg - sizeof(tsInteractiveMsg);
//strcpy((char *)printbuff, ((char *)(pMsg) + sizeof(tsInteractiveMsg)));
//屏蔽掉的是问题版本,strcpy遇到第一个‘\0’停止拷贝,不过在ARM,DSP双核通信中
//出错时可能在起始地址不停拷贝,导致宕机,所以使用限定长函数strncpy代替不限定长函数strcpy,问题得到解决
strncpy((char *)printbuff, ((char *)(pMsg) + sizeof(tsInteractiveMsg)), Len);
if(printbuff[0] == '\r' || printbuff[0] == '\n')
{
Len--;
memmove(printbuff, &printbuff[1], Len);
}
if(printbuff[0] == '\r' || printbuff[0] == '\n')
{
Len--;
memmove(printbuff,&printbuff[1], Len);
}
printbuff[511] = 0; //后面添加,预防措施
printbuff[Len] = 0;