http://blog.csdn.net/chuanshaoke/article/details/7418640

今天我在优化代码的时候。出现了问题。如下:
//----------------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工程师。

关于编译优化选项o3的问题相关推荐

  1. g++代码编译用选项-O3前后对比,前后执行时间对比如下

    g++代码编译用选项-O3前后对比,前后执行时间对比如下 g++ -std=c++11  main.cpp blur.cpp initialize_beliefs.cpp move.cpp norma ...

  2. ARM嵌入式编译器编译优化选项 -O

    Arm嵌入式编译器可以执行一些优化来减少代码量并提高应用程序的性能.不同的优化级别有不同的优化目标,不仅如此,针对某个目标进行优化会对其他目标产生影响.比如想减小生成的代码量,势必会影响到该代码的性能 ...

  3. Visual Studio 编译优化选项:Debug与Release、禁止优化与O1、O2、Ox优化

    Debug与禁止优化 Debug模式是调试模式,会有很多冗余的调试代码,供开发者调试程序使用. VS是默认使用Debug模式的,我使用的是VS 2017. 在Debug模式下,是默认开启禁止优化的,我 ...

  4. gcc 优化选项 -O1 -O2 -O3 -Os 优先级

    Gcc 编译优化简介 gcc 提供了为了满足用户不同程度的的优化需要,提供了近百种优化选项,用来对{编译时间,目标文件长度,执行效率}这个三维模型进行不同的取舍和平衡.优化的方法不一而足,总体上将有以 ...

  5. GNU编译优化级别-O -O1 -O2 -O3

    最近做一个算法的GPU加速,发现实际上使用gcc的-O3(最高级编译优化)选项,可以获得很高的加速比,我的程序里达到了3倍的样子,有时效果甚至比GPU加速好.因此小小学习了下GNU的编译优化. 附言一 ...

  6. makefile工作笔记0002---gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 相关博客http://blog.chinaunix.net/uid-24954950-id-295 ...

  7. gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化【转】

    转自:http://blog.csdn.net/qinrenzhi/article/details/78334677 相关博客http://blog.chinaunix.net/uid-2495495 ...

  8. gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化

    相关博客http://blog.chinaunix.net/uid-24954950-id-2956476.html 相关博客http://blog.csdn.net/misiter/article/ ...

  9. #linux# gcc编译器优化选项的详细信息

    Table of Contents 优化选项-O0 优化选项-O1 优化选项-O2 优化选项-O3 优化选项-OS 支持CPU类型target gcc编译器优化选项O0, O1, O2, O3, Os ...

  10. 【GCC编译优化系列】究竟什么样的代码会导致函数调用的栈溢出呢?

    [GCC编译优化系列]究竟什么样的代码会导致函数调用的栈溢出呢? 一段看似铁定栈溢出的函数代码,它一定会溢出吗? 文章目录 1 问题现场 2 简单分析 3 深入分析 3.1 假如不考虑编译优化的情况 ...

最新文章

  1. [UWP小白日记-5]转换MVA学院的XML字幕为SRT
  2. 忘记虚拟机root密码的解决办法
  3. arcgis加载天地图_ArcGIS Runtime SDK for Android100.5.0端加载天地图服务
  4. Animate.css介绍
  5. HTML+CSS+JS实现 ❤️卡通人物吃水果游戏❤️
  6. Linux下mongodb安装及数据导入导出教程
  7. python autoitlibrary_AutoItLibrary
  8. 寻找最大的k个数问题
  9. Cramer`s Rule 克莱姆法则(克拉默法则)
  10. python cad模块_Pycad: Python Extension for AutoCad
  11. round函数怎么使用python_python中round函数怎么用
  12. caj文件怎么打开?
  13. 山西台达plc可编程控制器_可编程控制器16(PLC)数据移位指令
  14. 典型双层神经网络的正向/反向传播计算图
  15. 微信的“QQ邮箱提醒”接收发往网易163邮件
  16. 羊皮卷之七-我要笑遍世界(中英对照)
  17. 【第 001 期 · 文献领读】——MRI专题
  18. glob.glob()
  19. 【Git】回退单个文件到指定版本
  20. 两列布局(3种解决方案)

热门文章

  1. 天才小毒妃 第917章 深藏不露大财主
  2. 什么是 Google Play服务
  3. C++代码实现图片调色
  4. 传奇脚本关于!Setup.txt 详细介绍
  5. SCI期刊图片分辨率与清晰度修改,以及拼图
  6. 自定义流式布局的代码实现
  7. 【程序员学理财】有哪些普通人应该知道的经济学常识?
  8. python编写简易木马程序_python简易木马编写
  9. 计算机专业综合理论模拟测试卷五,2020银保监会考试题库:计算机类模拟试题练习(五)...
  10. 开源软件、自由软件、Copyleft、CC都是啥,傻傻分不清楚?