打印

关于DSP编译优化选项o3的问题(转)

[复制链接]
3265|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
梅花望青竹|  楼主 | 2012-5-11 18:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在优化代码的时候。出现了问题。如下:
//----------------PERIPH.C---------------------
/* 读寄存器,参数 地址 返回内容*/
unsigned int ReadCMD(unsigned char addr)
{
        unsigned int temp;
        XCS_L();
        WriteByte(0x03);
        WriteByte(addr);
        temp = ReadByte();
        temp <<= 8;
        temp += ReadByte();
        XCS_H();
        return temp;
}

//------------------MAIN.C-----------------
#define ReadHDAT0()                ReadCMD(SPI_HDAT0)

hdat0=ReadHDAT0();//读MP3文件帧头信息

    假如我不用o3优化项。我读出的数据是正确的。但用的话,每次读出来的数据都错。而且都不相同(数值和正确的数值相差不大,可以说在正确数值下波动)。
   然后我就查了对应o3的资料,书本有如下一段:
“-o3:表示最大可能优化级别。各种循环优化都执行了,并且各种文件级性质也用来改善性能。”

请问:
1、假如我要选用o3优化的话,我该怎样做才不出错?
2、o3的说明中,“各种循环优化都执行了”,各种循环优化,具体怎么优化?在什么条件下?优化了些什么?
3、“各种文件级性质也用来改善性能”,文件级性质指的是什么?它何以改善性能?

O3是最大的优化级别,特别对循环试图进行软件流水。优化后一些不常用的中间变量将被释放掉,优化前中间变量被定义在L2缓存里,优化后直接分配在了CPU内部寄存器里,所以这些变量将不能被看到。建议买一本DSP优化方面的书,一般讲得很清楚

很正常,采用O3优化后,少些代码会不正常,我也遇见过好几次,把C代码的方法改一下,再采用FULLL-DEBUG模式回过去看看(MIX模式)汇编确认一下。











我在6713 上跑一个视频采集和压缩的程序,压缩用的是JPEG压缩算法, 程序在 不选-O2 或者-o3选项优化的时候,可以正常工作,而且比较稳定,但使用-o2或者-o3选项后,程序工作不稳定,会出错。而且程序在使用-o2或者-o3选项后,很多变量被优化掉了,有些语句的顺序也被调整了,调试起来也不是很方便,哪位大哥能指点一下。


程序中还使用了CSL支持库中 DAT_COPY,用于从外部SRAM中搬移数据到内部L2RAM中,没有使用-o2或者-o3选项时,DAT_COPY工作正常, 在使用-o2或者-o3选项后,DAT_COPY函数工作不正常了, 哪位大哥指点一下



肯定要使用-O3,不然全用手工优化,得把人累死。
至于错误的原因,不能怪-O3,只能说程序不严谨!
03出错,有时是用指针读写内存的错误,可以把程序分成比较小的文件,一个文件一个文件的O3,每次-O3一个文件,缩小错误的范围。
不会使用-O3的工程师,不算合格的DSP工程师。

相关帖子

沙发
aisiwo| | 2012-5-12 14:48 | 只看该作者
不会使用-O3的工程师,不算合格的DSP工程师

使用特权

评论回复
板凳
爱之翼V| | 2012-5-14 13:42 | 只看该作者
呵呵,最后一句表示很有压力

使用特权

评论回复
地板
bairan168| | 2012-5-14 16:06 | 只看该作者
呵呵,我也是。看到最后一句。:L

使用特权

评论回复
5
zhangmangui| | 2013-7-17 10:48 | 只看该作者
DSP编译优化问题  值得好好研究一下

使用特权

评论回复
6
huangfeng33| | 2013-7-18 16:23 | 只看该作者
建议买一本DSP优化方面的书,一般讲得很清楚

使用特权

评论回复
7
wowow| | 2013-7-18 18:14 | 只看该作者
寄存器、IO操作都加上volatile,就不会被优化掉了。
比如:*(volatile unsigned int *)(reg_address)=value.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

98

主题

2589

帖子

7

粉丝