TI中文支持网
TI专业的中文技术问题搜集分享网站

关于memcpy函数问题

各位好,我现在使用2812 在使用memcpy()函数时,我声明了包含string.h 文件,在编译时没有提示出错但在实际上电运行后只有运行到memcpy()被拷贝的文件后就会进入非法中断interrupt void ILLEGAL_ISR(void)中,我现在怀疑是编译时没有把memcpy()函数编译进来,请教memcpy()的原型函数在哪?在使用memcpy()函数时还需要如何处理才能把这个函数真正编译进来?谢谢

Green Deng:

你好,请问你是用的哪个版本的CCS?最新版本的CCS中,memcpy的位置在C:\ti\ccs1010\ccs\tools\compiler\ti-cgt-c2000_20.2.1.LTS\lib\src
一般例程中都有定义过这个函数,我不知道你的工程是完全自己新建的吗?你可以参考一下F2812的官方例程进行修改,例程在这个软件包中:www.ti.com.cn/…/SPRC097

user6432710:

回复 Green Deng:

你好,我的工程建立在CCS3.3但现在用的是ccs10,我看到了memcyp()函数原型我也定义包含了string.h了,但程序走到被copy的函数时就会跑飞。如何可以看到程序是否正确的被拷贝到RAM中呢?现在程序如果不拷贝在flash中运行无问题。谢谢!

Green Deng:

回复 user6432710:

现在你的程序是运行到memcpy()的时候会跳转到非法中断?如果是的话就不是搬移到ram是否成功的问题了,正常如果搬移失败,应该是运行到类似delay_us这样的函数才会跳转到非法中断。
会不会是你搬移的数据太大导致memcpy函数出错?

user6432710:

回复 Green Deng:

你好,我发现copy ramfun 函数后编译出来的汇编是错误的,定位地址也没有重叠啊,怎么会汇编和C语言对应不上呢?

Green Deng:

回复 user6432710:

方便详细描述一下你的问题吗?因为F2812这款芯片年代挺久了,很长时间没接触过,而且问这方面问题的用户也不多,我不是很熟悉。

user6432710:

回复 Green Deng:

您有电话或者邮件么?这样请教沟通可以快些!

Green Deng:

回复 user6432710:

目前仅支持论坛上沟通,其他渠道非官方了

user6432710:

回复 Green Deng:

你好,我把初始化flash函数从 flash CD 3ee815地址 通过memcpy()函数搬运到ram 中运行 ,运行开始地址是3f9915 。编译后map如下:

FLASH_SET_FUNCS

*          0    003ee815    00000017     RUN ADDR = 003f9915

                 003ee815    00000017     DSP281x_SysCtrl.obj (FLASH_SET_FUNCS)

我查看了在3ee815地址上汇编后的语句是正确的,但搬运到ram后汇编语句就错了混乱了,什么原因会造成这种错误,目前地址没有重叠。

user6432710:

回复 Green Deng:

你好,我现在用的是2812 ccs10.0   调试中搬运程序一直有问题,我的定义如下:

 PRAMH0      : origin = 0x3F8000, length = 0x002000  /*used as program segment*/  page0

 FLASH_SET_FUNCS  : LOAD = FLASHCD, PAGE = 0        RUN = PRAMH0 ,    PAGE = 0

        RUN_START(_FLASH_SET_FUNCS_runstart),        LOAD_START(_FLASH_SET_FUNCS_loadstart),        LOAD_END(_FLASH_SET_FUNCS_loadend)

memcpy(&FLASH_SET_FUNCS_runstart, &FLASH_SET_FUNCS_loadstart,    &FLASH_SET_FUNCS_loadend – &FLASH_SET_FUNCS_loadstart);

编译后map如下:

FLASH_SET_FUNCS *          0    003ec000    00000017     RUN ADDR = 003f8000                  003ec000    00000017     DSP281x_SysCtrl.obj (FLASH_SET_FUNCS)

flash 中地址 003ec000 中汇编是正确的但到ram地址003f8000 中汇编就是错误的,地址没有重叠,请帮忙看看有什么原因会这样,谢谢!

Green Deng:

回复 user6432710:

内存中的0x3F9915区域受到代码安全模块的保护,如果CSM没有解锁,读回的就是全0x0000。如果执行此操作,将导致ITRAP0。
即使未设置密码,也会出现这种情况,但要禁用CSM,只需读取flash中地址为0x3F7FF8–0x3F7FFF的密码位置

赞(0)
未经允许不得转载:TI中文支持网 » 关于memcpy函数问题
分享到: 更多 (0)