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

多核程序,赋值问题!

在多核中调试子函数:

float *pointer;

float Buff1[1024];

……….(其间没有对pointer做任何操作)

poiter = Buff1;

但是赋的值有问题!看了反汇编代码,发现只是将高位传递过去了,Buff1的正确地址应该是0x838c08,但是传递过去的值只是0x8300000,请问这是什么原因??这是在一个多核程序中的子函数。谢谢回答~~

Jane Lu:

Hi Hobo,

              注意到MVKH指令前面是SWBP, 这是一个软件断点的机器码。 请把软件断点去掉,再看一下这行指令是否是MVKL指令,也就是搬移低位地址的指令。

      谢谢!

hobo Q:

回复 Jane Lu:

Hi Jane,

              问题是得到解决,但是如果设断点会影响程序的运行结果的话,那调试程序起来不是很艰难吗?而且有些程序设断点,并不会出现这种情况啊?再次谢谢回答~

Jane Lu:

回复 hobo Q:

Hi Hobo,

          按理设置断点不应该影响执行结果,能否上传一个能复现问题的工程,我再查一下?

     谢谢!

     Jane

hobo Q:

回复 Jane Lu:

在STEP2的子函数中进行了pointer=Buffer1的赋值操作,将断点设置在这句话上,就会出现所写的错误的情况。myBoard是我自己建的platform,希望能帮忙看下,谢谢~~

Jane Lu:

回复 hobo Q:

Hi Hobo,

          我试了一下,确实有您说的这个问题。 其原因有可能是STEP2()函数放置在共享memory上,当某个核设置了软件断点后,相应的memory内容变成了SWBP。 CCS只在第一个设置该断点的核保留了原始指令的信息,可以保证其运行正确,而后续的核由于读到的是SWBP指令,所以结果不正确。

           我用下面的方法暂时可以规避这个问题:

   方法1:

     1     DSP复位上电,CCS启动debug

            2    同时选中所有核,点击右键,选择'group cores",将其组合成一个group

     3     选中group,load *.out文件

      4    选中group, 然后在step2函数上设置断点,这个步骤会同时设置8个核的断点

     4     (重要)再重新load  *.out文件, 这个时候断点对应的指令就正确了。

   方法2 (用硬件断点)

            1     选中某个核,在需要设置断点的地方,点击右键,选择“breakpoint (ccs)-> hardware breakpoint”

      2  如果要设置多个核,就重复多次

    Jane

hobo Q:

回复 Jane Lu:

Hi Jane,

    您好!

    如果把每个多核程序的代码放在MSM中会引起这样的问题,而且按照你的方法得重新load一下.out文件,往8个核中导.out文件所需要的时间挺长的,不知道是否有别的方法。谢谢回答~

Hobo

Jane Lu:

回复 hobo Q:

Hi Hobo,

                如果只是单独调试一个核,就不需要上述操作。

       如果需要调试多核,您也可以用上面提到的方法2。

       谢谢。

赞(0)
未经允许不得转载:TI中文支持网 » 多核程序,赋值问题!
分享到: 更多 (0)