在多核中调试子函数:
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。
谢谢。