This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

多核程序,赋值问题!



在多核中调试子函数:

float *pointer;

float Buff1[1024];

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

poiter = Buff1;

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

  • Hi Hobo,

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

          谢谢!

  • Hi Jane,

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

  • Hi Hobo,

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

         谢谢!

         Jane

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

    SW.rar
  • 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

  • Hi Jane,

        您好!

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

    Hobo

  • Hi Hobo,

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

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

           谢谢。