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

关于CCS3.3仿真模式下的BUG

各位大虾:

        最近在做仿真实验时,遇到了奇怪的现象,仿真器用的是XDS100,开发环境用的是CCS3.3.38.2,用的芯片是TMS320F2801,我配置为flash启动,启动时先进入boot区,在boot之后再跳转进入main,我在boot区的代码里面做了一个代码搬移,将存储在一个地址的代码搬移至一块ram空间(称为ram0),让boot区的一些函数在ram里面运行,在进入main后,我将存储在另一个地址的代码(一段epwm中断代码)同样搬移至ram0(和前一次空间一样,但是这一次的代码比前一次大),这时,我进入仿真模式的话,PC指针一直在main里面和boot区的那段代码里面来回运行(好像boot区替代了ISR的功能一样),但是真实情况是,芯片并没有运行boot区的代码,而是运行的ISR的内容,在CMD文件里,我们定义两段搬移代码地址时,用了UNION{}功能,请问一下,这是我们cmd文件配置有误,还是CCS版本的bug?

Eric Ma:

ruillong,

      从你描述的情况来看,应该不是CCS的bug。

       首先,你为什么要把bootROM的函数复制出来呢?这是出厂固化的代码,执行速度跟在RAM一样快,没必要复制,而且CMD对这段代码比较难操作,因为没有你没有bootROM的源码。

       其次,PC一直在Main和boot去来回运行,这情形有点像程序跑飞,重启。你有开看门狗吗?以及你在调用epwm中断代码之前,有没有用memcpy函数把代码搬移过去RAM0.

      最后,可以把CMD的UNION发上来看一下。

各位大虾:

        最近在做仿真实验时,遇到了奇怪的现象,仿真器用的是XDS100,开发环境用的是CCS3.3.38.2,用的芯片是TMS320F2801,我配置为flash启动,启动时先进入boot区,在boot之后再跳转进入main,我在boot区的代码里面做了一个代码搬移,将存储在一个地址的代码搬移至一块ram空间(称为ram0),让boot区的一些函数在ram里面运行,在进入main后,我将存储在另一个地址的代码(一段epwm中断代码)同样搬移至ram0(和前一次空间一样,但是这一次的代码比前一次大),这时,我进入仿真模式的话,PC指针一直在main里面和boot区的那段代码里面来回运行(好像boot区替代了ISR的功能一样),但是真实情况是,芯片并没有运行boot区的代码,而是运行的ISR的内容,在CMD文件里,我们定义两段搬移代码地址时,用了UNION{}功能,请问一下,这是我们cmd文件配置有误,还是CCS版本的bug?

Jay:

你好。

根据你的描述,boot的代码和epwm的代码都能够搬到Ram0里面,但似乎在搬了epwm之后,RAM0中的boot代码被覆盖了,而且后面的代码比前面的长,所以运行起来ISR的功能没有影响。你可以检查一下,是否如此。

你可以尝试定义两个不同的RAM区域来分别存放boot代码和epwm的代码,看看是否可行。

还有,在进入主程序后,boot在RAM的里代码被覆盖了应该也没有关系吧,下次上电后boot在Flash中的代码还会把需要的搬到Ram中。不清楚,你的boot代码在主程序运行中还需要做什么工作?

各位大虾:

        最近在做仿真实验时,遇到了奇怪的现象,仿真器用的是XDS100,开发环境用的是CCS3.3.38.2,用的芯片是TMS320F2801,我配置为flash启动,启动时先进入boot区,在boot之后再跳转进入main,我在boot区的代码里面做了一个代码搬移,将存储在一个地址的代码搬移至一块ram空间(称为ram0),让boot区的一些函数在ram里面运行,在进入main后,我将存储在另一个地址的代码(一段epwm中断代码)同样搬移至ram0(和前一次空间一样,但是这一次的代码比前一次大),这时,我进入仿真模式的话,PC指针一直在main里面和boot区的那段代码里面来回运行(好像boot区替代了ISR的功能一样),但是真实情况是,芯片并没有运行boot区的代码,而是运行的ISR的内容,在CMD文件里,我们定义两段搬移代码地址时,用了UNION{}功能,请问一下,这是我们cmd文件配置有误,还是CCS版本的bug?

user1880609:

回复 Eric Ma:

您好: 感谢您的回答,这边说明一下,我这边指的boot并不是芯片固有的bootROM区,这仅是我在进main之前的一小段代码,也是自己写的,用来做在线升级的。我已经通过实验验证,程序正常运行,只是在仿真情况下,PC指针执行出错了。这边的问题是,我将两端代码分别先后复制到同一个ram空间,实验说明的问题是,程序执行的是后面搬移的代码。现在的问题是仿真时,指针进入的是先前搬移的代码段,与实际运行不符合。

各位大虾:

        最近在做仿真实验时,遇到了奇怪的现象,仿真器用的是XDS100,开发环境用的是CCS3.3.38.2,用的芯片是TMS320F2801,我配置为flash启动,启动时先进入boot区,在boot之后再跳转进入main,我在boot区的代码里面做了一个代码搬移,将存储在一个地址的代码搬移至一块ram空间(称为ram0),让boot区的一些函数在ram里面运行,在进入main后,我将存储在另一个地址的代码(一段epwm中断代码)同样搬移至ram0(和前一次空间一样,但是这一次的代码比前一次大),这时,我进入仿真模式的话,PC指针一直在main里面和boot区的那段代码里面来回运行(好像boot区替代了ISR的功能一样),但是真实情况是,芯片并没有运行boot区的代码,而是运行的ISR的内容,在CMD文件里,我们定义两段搬移代码地址时,用了UNION{}功能,请问一下,这是我们cmd文件配置有误,还是CCS版本的bug?

user1880609:

回复 Jay:

您好:

感谢您的回答,我已验证过,的确是后者覆盖了前者,问题是在做仿真的时候,PC指针却进入了被覆盖的代码段,与实际运行并不符合,这是否我在搬移代码到同一个ram的时候,CCS有了标签之类的东西,记住了ram空间的被覆盖的代码,所以运行的时候,PC指向了被覆盖的代码段。

赞(0)
未经允许不得转载:TI中文支持网 » 关于CCS3.3仿真模式下的BUG
分享到: 更多 (0)