关于CCS不能正确编译代码的问题
#include <msp430.h>
/**
* main.c
*/
void P13_Onclick(void);
void ldelay(unsigned int ms);
int main(void)
{
unsigned int i=1000;
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
P4DIR=0XFF;
P4OUT=0Xff;
// while(1)
// {
// P4OUT=~P4OUT;
// while(i--)
// {
// }
// i=96;
//
while(1)
{
ldelay(i);
P4OUT=~P4OUT;
P13_Onclick();
}
return 0;
}
void ldelay(unsigned int xms) // xms代表需要延时的毫秒数
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
void P13_Onclick() //P1.3的事件处理函数
{ //----翻转IO电平-----
P1OUT ^= BIT0;
P1OUT ^= BIT6;
}
代码如上图所示,这段代码在CCS里编译后烧到MSP430F5529的单片机里面是无法运行起来的(正常的结果应当是单片机的小绿灯一闪闪的)
以上是CCS代码调试的部分截图,CCS在调试的过程中会自动跳过ldelay(i)这段代码的[最开始我是用while(i--)直接作为循环延迟的,但是发现单片机无法得到正确结果,这时候我还有点怀疑是我的代码的问题所以后来改用了idelay子函数作为延迟但是结果依然不正确]
我寻思着难道是因为这个编译器自动跳过子函数?所以后来我又尝试写了一个P13_onclick()这个子函数,但是结果是程序是能进入这个函数的。所以我蒙了,但是我真的觉得我的代码写的一点问题也没有,所以后来有尝试下载了IAR for MSP430。同样的代码复制过去编译烧录后,我看到了单片机的小灯一闪一闪的(.......我还能说啥)
可能是我对CCS的这个软件还不够了解吧,但是遇到这种问题我确实懵了。百度谷歌的好像也没有这种情况,如果哪位大佬某天路过,希望有幸能解决。
最后补充一个CCS版本号