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.

MSP430F5529 CCS编程求助



for(i=0;i<12000;i++);

此定时程序系统编译后出现如下警告:

Detected SW delay loop using empty loop

延时函数没有发挥作用,为什么?

  • 检测到sw延迟使用空循环回路 你的延迟函数有问题。。。

  • 我查到CCS好像会自动优化for循环,可以在变量定义前加volatile解决,可我加过以后依然没有效果,不知何解,我用的是CCS6.0

  • 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版本,多次调试结果出错,求解答,谢谢。

  • 工程名上右键>>properties >>build >>msp430 compiler >>optimization >>把右边的两个选项都选为0

    还不行就点击msp430 compiler 下的选项卡advice options you右边的set error .....选成remark或者空白

    在不行我也没招了