有没有谁遇到过进入某个函数后,堆栈溢出经过,连函数代码都改变了的
SD_CS_LOW();
SD_CheckVoltage();
ret = SD_ReadOCR(recbuf); // 读OCR寄存器,查询卡支持的电压值
SD_ReadOCR(recbuf)的函数体如下:
INT8U SD_ReadOCR(INT8U *recbuf)
{
INT8U param[4] = {0, 0, 0, 0}, resp[5] = {1, 1, 1, 1, 1};
INT8U tmp = 0;
tmp = SD_SendCmd(CMD58, param, CMD58_R, resp);
if (tmp != SD_NO_ERR)
{
return tmp;
}
if (resp[0] != 0x80)
{
return SD_ERR_CMD_RESP;
}
for (tmp = 0; tmp < 4; tmp++)
{
recbuf[tmp] = resp[tmp + 1];
}
return SD_NO_ERR;
}
当我单步进入SD_ReadOCR(recbuf)函数体后,SD_ReadOCR(recbuf)代码所在的flash全变成FF了还一部分其它的程序flash也变成FF了,这里我想贴图的,不知道怎么贴。而没进入这个函数前,代码区的内存都是正常的。
[解决办法]
升级一下IAR就没有这个问题了,不知道为什么