TI中文支持网
TI专业的中文技术问题搜集分享网站

同一个程序,用CCS和IAR分别下载到单片机中,现象不同。

硬件设备:MSP430 Launch——MSP430G2452单片机

软件程序:

#include<msp430g2452.h>

void delay();

void main()
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0XFF;

P1OUT |=BIT0;
while(1)
{
delay();
P1OUT<<=1;
}
}

void delay(void)
{
unsigned int i;
i = 50000; // Delay
do (i–);
while (i != 0);
}

用IAR编译下载,LED从左到右依次点亮,实验现象正常

用CCS编译下载,LED没有任何反应。

但CCS使用如下程序,实验现象正常。

#include<msp430g2452.h>

void delay();

void main()
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0XFF;

P1OUT |=BIT0;
while(1)
{
delay();
P1OUT<<=1;
}
}

void delay(void)
{
volatile unsigned int i;
i = 50000; // Delay
do (i–);
while (i != 0);
}

为什么要使用volatile?

Lichen Wang:

我不會用 c 語言

我猜想 c 編譯 一定非常聰明, 它一定認為 c 程式員又愚蠢又嘍囉。例如:do (i–);while (i != 0);它認為 就 c 語言而言, (除非 i 有揮發性), 簡直是廢話, 應該完全忽略不提。

知行:

回复 kqian0327:

感谢您的回答,函数是在main函数之前,的确是优化等级打高了。

知行:

回复 Lichen Wang:

我只是初学者,尽管不是很懂,感谢你的回答

kqian0327:

回复 知行:

你好,

欢迎加入MSP430大家庭~

多看看别人问的帖子,你会收获很多: )

琉璃酱:

回复 kqian0327:

volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.简单地说就是防止编译器对代码进行优化.

赞(0)
未经允许不得转载:TI中文支持网 » 同一个程序,用CCS和IAR分别下载到单片机中,现象不同。
分享到: 更多 (0)