for(i=0;i<12000;i++);
此定时程序系统编译后出现如下警告:
Detected SW delay loop using empty loop
延时函数没有发挥作用,为什么?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
volatile的作用就是禁止编译器对变量做优化,老老事实的读取变量值。这样就不会发生上面的情况!如果变量i没有被volatile声明,而被优化,如果中断程序操作变量i,则就会发生倒霉的情况,编译器优化的过程我还不太熟悉。。
一般说来,volatile用在如下的几个地方:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
#include <msp430.h>
void main(void)
{
__enable_interrupt();
SFRIE1|=WDTIE;
P1DIR=0xff;
volatile unsigned int i,j;
P1OUT=0xff;
for(i=0;i<30000;i++)
for(j=0;j<50;j++);
P1OUT=0x00;
while(1);
}
#pragma vector=WDT_VECTOR
__interrupt void WatchTimer(void)
{
WDTCTL=WDTPW+WDTCNTCL+WDTIE;
}
谢谢你的回答,可是在以上程序中,可是在以上程序中依然会提示无效的i,j;两个for循环和while循环依然没有发挥作用,
我用的CCS6.0版本,多次调试结果出错,求解答,谢谢。