完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如何把RTS库添加到工程文件中?
在对库文件进行修改,或者使用不同版本的编译器时,如何重新编译库文件? 为什么开启代码优化之后,程序就无法实现正确的功能了? volatile关键字能对我们有什么帮助? |
|
相关推荐
1个回答
|
|
17. 如何把RTS库添加到工程文件中?
如果使用命令行脚本的方式添加库文件,则使用-l 来添加即可。 在图形化界面下,填加RTS库文件的选项在不同版本的CCS中是不一样的,在此把它们一一列出。 在CCS6.x和5.x版本下: 在工程管理器中的工程名上点击右键,选择“properties”,然后切换到如下视图。 在CCS4.x版本下: 在CCS3.3版本以及更低的版本下: 针对比CCS3.3更古老的版本:如果不习惯使用Eclipse样式的开发环境,或者某些仿真器不兼容CCS4.x以及以上版本,或者你还在使用最古老的TMS320VC33这样的芯片,否则至少应该升级到CCS3.3这样的版本了。 18. 在对库文件进行修改,或者使用不同版本的编译器时,如何重新编译库文件? 在编译器版本不低于6.0.2的情况下,我们可以直接使用编译器提供的工具来重新编译RTS库文件,即Mklib程序。如需使用此工具,请参考它的帮助说明文档。 在编译器版本低于6.0.2的情况下,我们需要进入编译器codegen的库文件目录中,找到rtssrc.zip这个文件并解压,然后根据其中rtssrc_zip_README.txt里面描述的步骤进行库文件的重新编译。 19. 编译器的优化选项那么多,有什么通用的模版可以既快速配置优化选项,又能达到较为合适的优化效果? 关于编译器的优化选项,我们确实讲了很多,对很多初学者来说可能面临“选择恐惧症”。所以我们仍然有必要制定一些流程化的方案,方便大家的使用。例如: 1) 把代码尽可能根据功能划分到多个独立的文件中,这样在优化时可具有更多的级别供选择。这样做不光对优化有好处,对代码的模块化也是有利的。 2) 使能符号调试功能--symdebug:dwarf或者 -g 在不启用优化器的情况下,编写、编译和调试代码,这样做的目的是在编译之前首先能保证代码的功能是正确的。 3) 启用优化功能,并再次验证代码的功能。如果有需要,还得对代码进行一定的调试。 a) 优化的级别有0,1,2和3等不同级别,对应了不同类型和不同程度的代码优化。 在启用优化的情况下,必须指定优化级别,否则优化选项会被编译器给忽略,同时显示给你一个警告信息。 优化级别0 (--opt_level=0 或 -o0)是最低程度的优化。 优化级别3 (--opt_level=3 或 –o3)是最高程度的优化。 Ø 考虑从最低的优化级别开始进行验证。 b) 从编译器版本6.0.1开始,又添加了优化级别4的支持,即(--opt_level=4 或 -o4) 这个级别的优化针对的是链接之后的代码,它在链接完成之后,从整个应用程序的角度来进行可能的优化,具有进一步提高程序性能的潜力。与所有的优化选项一样,为了实现优化的效果,就需要多付出一定的编译时间,当然这个时间花费与DSP的代码效率相比还是值得的。 4) 为了调试优化过的代码,需要在使用--opt_level的同时开启符号调试选项-g。这保证了在保持代码调试功能的同时,仍然可以实现最大程度的代码优化。 老版本的编译器中还可使用-mn选项,它可以在开启符号调试选项的同时提供一定的优化效果,但是此选项如今已经废止,再使用它不能起到任何效果了。 5) 去掉符号调试选项(-g) a) 在已经验证了代码的功能之后,可以移除符号调试选项了。这是因为虽然符号调试选项对代码的效率影响非常小,但是在某些情况下可能会影响到特定代码的执行。例如,编译器在使用某些FPU32指令的情况下,可以对代码进行并行度更高的处理,或者减少NOP空指令的使用,这对应提高代码运行速度是有帮助的;在使用-g选项的情况下,则有可能会妨碍编译器充分发挥这一能力。如果对称不是特别“强迫”的话,也可以干脆不去管它。 b) 在比较老版本的编译器手册中,建议在此步骤中使用--symdebug:skeletal选项。但是这是个已经废弃的参数,不再建议使用,即使使能了也不会再产生任何效果。 c) 不开启-ss选项。 这个选项可以把C/C++的表达式生成交叉列表,以注释的形式插入到编译生成的汇编代码中,方便我们查看/阅读生成的汇编代码。这个功能虽然方便了调试,但是显然也妨碍了对代码的优化。 如果你希望把优化器所做的改动以注释的形式插入到编译生成的汇编代码中的话,则可以在开启了-g选项的前提下,使用-s选项。如果不使用-g,则-s与-ss的效果是相同的。 20. 为什么开启代码优化之后,程序就无法实现正确的功能了? 在开启代码优化之后,代码中的一些功能有可能会被编译器改变,例如: 未初始化的变化会被优化掉; 未正确使用volatile关键词的变量功能不正常; 与标准ANSI C的结果有出入 汇编函数没能正确保存/恢复寄存器的 所以为了保证程序在代码优化之后仍然能正确地执行我们的意图,一定要认真阅读一下相关编译器选项的使用说明。 21. volatile关键字能对我们有什么帮助? volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。volatile的使用场合可以包括: 在中断或者别的任务中会被修改的变量 可以被硬件改变的外设寄存器的值 可以被其它处理器所修改的变量的值(用于多核的场合,例如OMAP等) |
|
|
|
只有小组成员才能发言,加入小组>>
795 浏览 0 评论
1154 浏览 1 评论
2530 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2713 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1075浏览 3评论
195浏览 2评论
461浏览 2评论
374浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 13:47 , Processed in 1.215109 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号