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

f28027在debug模式下正常,在release模式下程序跑飞

最近写了个程序在debug模式下正常,换到release模式下程序不是进入非法中断就是陷入死循环。我但不仿真发现初始化外设后继续往下仿真当仿真到一定点时此事还没进入循环等待,就返回到外设初始化这样往复进入死循环。程序在debug模式下编译大小为0x8a5,在release下大小为0xb76,在release模式下回进入Illegal operation TRAP导致跑飞。
还有一个问题ram.cmd文件有一句:PRAML0     : origin = 0x008000, length = 0x000900长度为何是900呢,最长可以到1000啊,我把长度改为1000,在debug模式下编译大小如果超过900程序也会跑飞。
请教如何解决

Hank Zhao:

你比较一下debug模式和release模式下的properties的配置有什么不同,特别是Optimization的配置区别。CMD的问题,应该是其它区域被分配掉了,还有一块DRAML0也用到了这块存储区域。

最近写了个程序在debug模式下正常,换到release模式下程序不是进入非法中断就是陷入死循环。我但不仿真发现初始化外设后继续往下仿真当仿真到一定点时此事还没进入循环等待,就返回到外设初始化这样往复进入死循环。程序在debug模式下编译大小为0x8a5,在release下大小为0xb76,在release模式下回进入Illegal operation TRAP导致跑飞。
还有一个问题ram.cmd文件有一句:PRAML0     : origin = 0x008000, length = 0x000900长度为何是900呢,最长可以到1000啊,我把长度改为1000,在debug模式下编译大小如果超过900程序也会跑飞。
请教如何解决

yongliang li1:

回复 Hank Zhao:

debug模式和release模式下的设置是一样的,release模式是直接copy debug的配置建立的只是更换成了F28027.cmd文件。我刚才又单步仿真看了一下,下面是ad初始化

DELAY_US(ADC_usDELAY); \ AdcRegs.ADCCTL1.all=ADC_RESET_FLAG; \ asm(" NOP "); \ asm(" NOP "); \ EALLOW; \ AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; /* Power up band gap */ \ DELAY_US(ADC_usDELAY); /* Delay before powering up rest of ADC */

单步仿真,仿真到DELAY_US(ADC_usDELAY); 时就跳入llegal operation TRAP中断。但是在debug模式下运行没有任何问题。

debug和release模式下的.text程序存储段的大小是一致的。

最近写了个程序在debug模式下正常,换到release模式下程序不是进入非法中断就是陷入死循环。我但不仿真发现初始化外设后继续往下仿真当仿真到一定点时此事还没进入循环等待,就返回到外设初始化这样往复进入死循环。程序在debug模式下编译大小为0x8a5,在release下大小为0xb76,在release模式下回进入Illegal operation TRAP导致跑飞。
还有一个问题ram.cmd文件有一句:PRAML0     : origin = 0x008000, length = 0x000900长度为何是900呢,最长可以到1000啊,我把长度改为1000,在debug模式下编译大小如果超过900程序也会跑飞。
请教如何解决

yongliang li1:

回复 yongliang li1:

现在在release模式下运行也正常了,我参考了别人的帖子,使用了

MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);

InitFlash(); 这些语句,把flash里面的程序复制到ram种运行。就行ok了。

但是我不明白的是RamfuncsLoadStart,&RamfuncsLoadEnd, RamfuncsRunStart这三个地址能自己设置吗?我看了一下.map文件

ramfuncs  0  003f6723  00000194  RUN  ADDR = 00008000                       003f6723  00000175  main.obj (ramfuncs:retain)                       003f6898  0000001b  f2802x_sysctrl.obj (ramfuncs)                       003f68b3  00000004  f2802x_usdelay.obj (ramfuncs)

我参考http://blog.sina.com.cn/s/blog_762cf5f80101apfx.html如何把程序从flash 复制到ram种

里面说要修改CodeStartBranch.asm和DSP28xxx_SectionCopy_nonBIOS.asm两个文件,而我也没修改啊。。复制成功啊,求指点一下。

最近写了个程序在debug模式下正常,换到release模式下程序不是进入非法中断就是陷入死循环。我但不仿真发现初始化外设后继续往下仿真当仿真到一定点时此事还没进入循环等待,就返回到外设初始化这样往复进入死循环。程序在debug模式下编译大小为0x8a5,在release下大小为0xb76,在release模式下回进入Illegal operation TRAP导致跑飞。
还有一个问题ram.cmd文件有一句:PRAML0     : origin = 0x008000, length = 0x000900长度为何是900呢,最长可以到1000啊,我把长度改为1000,在debug模式下编译大小如果超过900程序也会跑飞。
请教如何解决

Hank Zhao:

回复 yongliang li1:

RamfuncsLoadStart,&RamfuncsLoadEnd, RamfuncsRunStart是由CMD文件中的关键字LOAD和RUN指定存储区域,但具体的地址不能设置,由编译器自动分配。

最近写了个程序在debug模式下正常,换到release模式下程序不是进入非法中断就是陷入死循环。我但不仿真发现初始化外设后继续往下仿真当仿真到一定点时此事还没进入循环等待,就返回到外设初始化这样往复进入死循环。程序在debug模式下编译大小为0x8a5,在release下大小为0xb76,在release模式下回进入Illegal operation TRAP导致跑飞。
还有一个问题ram.cmd文件有一句:PRAML0     : origin = 0x008000, length = 0x000900长度为何是900呢,最长可以到1000啊,我把长度改为1000,在debug模式下编译大小如果超过900程序也会跑飞。
请教如何解决

Hank Zhao:

回复 yongliang li1:

CodeStartBranch.asm本来就不需要修改的,DSP28xxx_SectionCopy_nonBIOS.asm可以根据需要修改或不修改,不修改就是所有section全部copy。

赞(0)
未经允许不得转载:TI中文支持网 » f28027在debug模式下正常,在release模式下程序跑飞
分享到: 更多 (0)