您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [讨论]compile优化等级对程序的影响
本帖共有484个阅读者
发表帖子 发表投票 回复主题
[讨论]compile优化等级对程序的影响
jiubiao(论坛新手)
jiubiao
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:145
积分:7
注册时间:2016/8/24
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[讨论]compile优化等级对程序的影响
我用的是BF537,发现我勾选Enable optimization后,程序出现异常:main函数中的wilie(){}中的程序不再执行了!!!

愿人人享受自动化!
等级:论坛新手 参考IP地址:*.*.*.*
2016/8/24 17:18:16
jiubiao(论坛新手)
jiubiao
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:145
积分:7
注册时间:2016/8/24
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
有没有什么指令可以指定哪些代码不需要优化?

愿人人享受自动化!
等级:论坛新手 参考IP地址:*.*.*.*
2016/8/24 18:01:49
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
在函数前面加上这个:

#pragma optimize_off

优化后有些延时会消失,导致代码中延时不够,所以硬件操作相关和延时函数都要用这个说明。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2016/8/24 20:23:36
jiubiao(论坛新手)
jiubiao
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:145
积分:7
注册时间:2016/8/24
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
我程序框架如下:
void main(void)
{
//一些初始化,如定时器等
...
#pragma optimize_off
while(status != 0x10); //status是程序的状态机,在定时中断里面进行切换
//非实时的操作处理
while(1)
{
...
}
}

然而选择优化之后:①单步调试到while(status != 0x10);之后程序进入到"Stepping"状态(visualDSP++右下角,平时显示Running,或Halted)
②while(1){}无法执行到!!
③把while(status != 0x10);屏蔽掉,while(){}就可以执行到了!!
"stepping"是什么状态?怎么解决问题②?

愿人人享受自动化!
等级:论坛新手 参考IP地址:*.*.*.*
2016/8/25 10:47:45
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你把防止优化的指令,加在 定时器 函数前面,你放在这个地方,status 变量并不能防止优化。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2016/8/28 22:30:07
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159214 Call, 1 Queries, Processed in 0.031250 second(s),