Microchip
直播中

郝汉

8年用户 249经验值
私信 关注
[问答]

优化会杀死while循环计数器

我一直在一个非常大的项目正在推动一个DSPIC33 33 FJ128MC804到它的极限。我使用C30 v3.31,用MPLAB 8开发。当我启用优化时,一个需要大量处理能力的特性执行得更快。任何比O0都高的应用程序从一个太慢的速度到超过足够快的速度。但优化完全破坏了我简单的基于中断的计时器。这是普通的东西:在一个定时器中断中,我递减计数器;它们停止在零。在其他地方,我可以通过设置计数器到一个值(周期)和循环直到计数器为零来等待经过的时间。(这比_u._ms()更有用,因为我在等待时不能做任何事情,监视器会长时间超时,如果存在大量中断活动,周期会变化。)中断代码是:而其他地方的代码,我称为“前景”的代码是,例如:没有优化:(O0)这一切都很完美。一旦我使用任何其他优化级别,如O1,编译器就将while语句转换为无穷循环,该循环仅将分支返回到ClrWdt,而不进行任何测试。一个完全没用的绞刑!我必须以一种没有人做的愚蠢的方式做这件事,因为每个人的用户界面和其他东西都需要基于中断的计时器,对吧?所以…什么是正确的方法?我需要定时器来进行优化,或者我的大项目已经沉没了,没有它就太慢了。(附件是一个简单的项目,只是闪烁的LED。将优化设置改为O0以外的任何东西,它从闪烁的LED变成冻结的LED。非常感谢你的帮助。吉姆

回帖(9)

张娜

2019-9-6 08:51:29
那个变量是“易挥发的”吗?
举报

康辅佑

2019-9-6 09:10:00
没有达里奥-那些百事饮酒者从来没有阅读TFM之前写他们的软件SH。对不起,艺术
举报

张娜

2019-9-6 09:18:30
谢谢,我担心这太容易解决哦,谁知道呢!
举报

李铭鑫

2019-9-6 09:32:56
您好,.scudario提到的是:在其他地方,您应该这样做:当代码没有优化时,它可能并不重要。当优化时,易失性规范对于编译器来说是关于该变量可以和不能做什么优化的重要信息。参见:编译器用户指南E和C语言教科书,Mysil
举报

更多回帖

发帖
×
20
完善资料,
赚取积分