TI论坛
直播中

曹皓轩

7年用户 186经验值
私信 关注
[问答]

请问2812数组溢出或者程序代码量过大如何修改CMD文件?

在用例程pmsm3_3验证旋变解码功能的时候,发现只要把旋变解算功能加进去之后,
程序就会跳到非法中断ILLEGAL_ISR(void)  // ILLegal operation TRAP,网上查询相关问题有说数组溢出或者程序代码量过大会导致相关问题,查看RESOLVER.H 文件是定义了几个数组,做滤波用的,会是这个原因导致的么?如果是我想修改CMD文件该修改哪部分呢?
附上我用的CMD配置F2812_EzDSP_RAM_lnk.cmd:

回帖(6)

张嘉

2018-10-16 10:10:35
如果是定义的数组溢出,应该修改.ebss对应的DRAMH0的空间长度,但是要确保不和其他块冲突
举报

冯敬宇

2018-10-16 10:29:34
但我认为如果是全局变量或是代码过大,程序编译就过不去了。假如是溢出的问题,那最有可能的也是堆栈溢出,也即使局部变量的溢出。
如果是这种情况,可以增大堆栈的大小,在工程属性》Build>c2000 linker > basic options中将堆栈设大。
另外看一下程序是否跑飞了。
Eric
                                                                         - ERIC
举报

曹皓轩

2018-10-16 10:38:38
引用: guigui_7044 发表于 2018-10-16 15:19
但我认为如果是全局变量或是代码过大,程序编译就过不去了。假如是溢出的问题,那最有可能的也是堆栈溢出,也即使局部变量的溢出。
如果是这种情况,可以增大堆栈的大小,在工程属性》Build>c2000 linker > basic options中将堆栈设大。
另外看一下程序是否跑飞了。

你好,我的编译是可以过去的。按照你说的我把堆栈从0x0400放大到0x0480,修改了cmd对应部分的长度为0x0480,运行仍然会跳到非法中断。如果堆栈相应再放大,比如0x0500之上,编译出错,显示堆栈重叠:RAMM1 memory range overlaps existing memory range DEV_EMU。是因为堆栈长度0x0480不够,需要继续加大吗?如果继续加大,那编译出错显示的与 DEV_EMU堆栈重叠问题应该在那个cmd模块修改呢?好像没看到cmd里定义DEV_EMU的部分,还是这部分是固化在片子里的?
举报

曹皓轩

2018-10-16 10:49:59
引用: linlin3105 发表于 2018-10-16 15:00
如果是定义的数组溢出,应该修改.ebss对应的DRAMH0的空间长度,但是要确保不和其他块冲突

我修改了DRAMH0的空间长度,从0x0B00到0x2B00,编译通过,但运行仍然会显示进入非法中断,好像不是定义的数组溢出问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分