工程背景:
采用的是C6678 8核DSP,工程中含有两个任务TASK1 与TASK2 ,TASK1在core0中运行,TASK2 在core1~core7中运行,核间通过message通信,core0作为主核,通过向其他core发送message信息控制core1~core7执行相应程序。
for循环在core0中。程序性能优化设成 3级,代码大小优化级别没设置
问题描述:
1.for(i=0;i<NUM;i++),增大 NUM出现程序跑飞,点击暂停按钮,发生CCS软件死机
尝试的方法:
1.增加stack的大小,问题没有解决
2.程序性能优化设成 3级,代码大小优化也设置成3级,运行通过,问题解决,但是同样的代码运行时间由原来的0.13ms 变成0.4ms ,程序运行效果严重下降,因为项目要求较高的 实时性,所以此方法无法满足要求。
问题猜想:
我个人认为是堆或栈溢出,或者代码写的太乱,请大神们指点,谢谢!
把CMD文件,cfg文件,map文件发给大家,请下载帮忙分析一下!、
错误截图,请大家帮忙解决,谢谢!
Andy Yin1:
for循环保护什么样的处理,消息发送是在for循环中么?有没有可能是消息没有释放导致内存耗尽?
不加-o3优化时没有问题?简化一下for循环中的处理,排查定位出问题的具体代码位置。
Jack Dong:
回复 Andy Yin1:
for 循环内是各种函数调用,消息发送也是再for 循环中进行的。core0发送的消息作为控制指令,通知core1-core7核做相应输的算法处理,。问消息是如何释放的?消息释放用到什么函数?
Jack Dong:
回复 Andy Yin1:
速度优化设为3级,代码优化没有设置,无法通过,
速度优化与代码优化同时设为3级时,可以运行通过。但是软件仿真执行时间增加了3倍
Jack Dong:
回复 Andy Yin1:
你好 ,Andy Yin1我把错误截图,cfg文件、cmd文件、map文件上传到这个帖子的上了,请您帮忙分析一下,急求,谢谢!!
Jack Dong:
回复 Andy Yin1:
大神 问题发了一个多星期了 怎么没有人解答呢 是问题太难了 还是已经回家过年了???????
Andy Yin1:
回复 Jack Dong:
1 去掉消息发送,增大循环次数,测试看看是否由于增加发送次数消息未释放导致的内存泄露;
2 关于消息释放请参考安装之后ipc_3_00_00_16\docs下面的IPC user guide。
3 将for循环中调用的函数与for循环放在不同的file,for循环使用-o0优化,其他的函数所在文件用-o3优化测试,这样也不会影响性能。
Jack Dong:
回复 Andy Yin1:
你好 感谢您的回答!
优化等级不是在工程属性里面设置的吗?
如何设置“for循环使用-o0优化,其他的函数所在文件用-o3优化测试”,让不同代码具有不同的优化等级?
Andy Yin1:
回复 Jack Dong:
可以在工程或文件属性中修改优化等级,可以右击工程在属性中修改整个工程的属性,也可以右击文件修改特定文件的属性。