This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
各位大神:
我用的是CCS3.3,F28027,XDS100
当使用memcpy()或memset()函数时,编译没有问题,出现程序跑飞(跑到某个中断里面去),将其屏蔽,一切正常,这是什么原因,求解???
加入string.h了么?是不是需要搬移的数据太大了?
在头文件中包含了:#include <string.h>,但string.h源文件没有包含到include文件夹里面去,不知道string.h能在哪里找到,是要包含某个库吗?
编译都没有报错,但运行就跑飞,搬移的数据也不是很多,后来我做了一次测试,只搬移10个字节都不行,也跑飞。
请问你的memcpy函数是如何调用的,里面的参数如何填写?
memcpy((uint16_t *)&RamfuncsRunStart,(uint16_t *)&RamfuncsLoadStart, (unsigned long)&RamfuncsLoadSize);
第一个参数是运行的地址,第二个参数是复制的起始地址。
在memcpy函数下面的函数设个断点,看能否执行到。
Eric
Eric,
你好!我的用法类似如下:
Uint16 uiDestBuf[10]={0};
Uint16 uiSourBuf[10]={1,2,3,4,5,6,7,8,9,10};
memcpy(uiDestBuf,uiSourBuf,10);
我也测试了一下,在memcpy()设断点,现象时还没到断点就跑飞到一个中断里面去了,我包含#include<string.h>,但在include文件夹里没有看到string.h,string.h是在某个库里面吗?
Mak
那就程序应该是在中断跑飞的,并不是在memcpy啊。
string.h我觉得没问题,要是找不到系统早报错了。它在这个路径下:C:\ti\ccsv5\tools\compiler\c2000_6.2.5\include。
你应该查看一下程序在中断中执行什么,为什么会跑飞。
你好。请问数据比较大和memset有什么关系呢?memset设置比较大的区域清零,难道就会无缘无故跑飞吗?
你用Memset跑飞吗?会不会是把一些代码或变量给清掉。
ERIC
我是用memset将uboot中初始的malloc的内存清0,大小有0x404000字节。应该不是把代码或者变量清理掉了。这个位置内没有代码和变量。
关键是在memset中途跑飞的。而且跑飞的位置不确定。MMU虽然开启了。但是虚拟地址和物理地址是正对应的,我怀疑和cache有关。
关闭mmu 虽然可以使得memset正常工作。但是问题还是存在。
看门狗有没有关掉呢。另外这个问题应该去processor那边会有更专业的回复。