在线时间5 小时
UID1188783
注册时间2008-3-4
NXP金币0
该用户从未签到
新手上路

- 积分
- 46
- 最后登录
- 1970-1-1
|
本帖最后由 thegu 于 2014-10-1 15:15 编辑
这个函数经常出问题,浪费了不少时间,一开始还以为是取变量地址有问题。stdlib.c文件的memcpy,先按4bytes拷贝,然后按照每次1byte拷贝。按照32bit拷贝时候没做地址检查,如果内存地址不是4的整数倍,会触发hard fault 03中断。如果是对结构体内存拷贝,对字符串的一部分拷贝,非常容易出现这个问题。
void *
memcpy (void *dest, const void *src, unsigned n)
{
int longs, bytes;
uint32 *dpl = (uint32 *)dest;
uint32 *spl = (uint32 *)src;
uint8 *dpb, *spb;
if ((dest != NULL) && (src != NULL) && (n > 0))
{
bytes = (n & 0x3);
longs = (n - bytes) >> 2;
while (longs--)
*dpl++ = *spl++;
dpb = (uint8 *)dpl;
spb = (uint8 *)spl;
while (bytes--)
*dpb++ = *spb++;
}
return dest;
}
改成
void *
memcpy (void *dest, const void *src, unsigned n)
{uint8 *d=(uint8*)dest, *s=(uint8*)src,i=0;
for(;i<n;i++)
*(d+i)=*(s+i);
return dest;
}
问题消失。
|
|