今天调试KL25的时候发现以下问题:
定义两个数组:
uchar tempa[9]="12345678";
uchar tempb[9]={0};
当执行memcpy(tempb,tempa,7);时没问题
当执行memcpy(tempb,tempa+1,7);时会出现default_isr entered on vector 3,该错误为Hard Fault。
memcpy()函数原型:
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;
}
好像当memcpy的源地址为奇地址时会KL25会产生硬件错误
注释:该memcpy函数为stdlib库函数,并非自定义。其他单片机应该没这个错误
|