打印
[技术问题解答]

KL25好像存在以下bug

[复制链接]
1160|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
n841115849|  楼主 | 2014-9-26 15:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
BUG, TE, ui, ST, EMC
今天调试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库函数,并非自定义。其他单片机应该没这个错误



相关帖子

沙发
jd972594| | 2014-9-28 09:16 | 只看该作者
楼主能给个工程吗,让我也试试。

使用特权

评论回复
板凳
ihere| | 2014-10-1 10:17 | 只看该作者
本帖最后由 ihere 于 2014-10-2 08:35 编辑

被坑死了,我也遇到了,谁能想到是飞思卡尔问题,一开始还以为是自己取地址弄错了,地址不是4倍数都会出问题。改成按照字节拷贝,问题就没了

使用特权

评论回复
地板
ar_m_cu| | 2014-10-1 19:51 | 只看该作者
那个memcpy本身貌似有点问题吧。也不管参数指针是不是4字节对齐,都强制转换成uint32 *

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

4

帖子

0

粉丝