gpt4 book ai didi

c - MSP430 函数调用被跳过

转载 作者:行者123 更新时间:2023-11-30 15:31:36 25 4
gpt4 key购买 nike

我正在使用 MSP430 LaunchPad 开发套件对 MSP430 微 Controller 进行编程,但在这段简单的代码中遇到了一些问题。

#include <msp430.h>

void Delay(void);

#define LED1 BIT0 //define LED1 as bit 0 (0x00)
#define LED2 BIT6 //define LED2 as bit 6 (0x40)
#define delayTime 20000 //define iTime as 20000

int main(void)
{
WDTCTL = WDTPW | WDTHOLD; //stop watchdog timer
P1DIR |= (LED1|LED2); //set P1.0 and P1.6 to output direction (P1.3 is naturally an input)
P1OUT |= LED1; //set P1.0 high so the LEDs will blink alternatively

while(1)
{
Delay();
P1OUT ^= (LED1|LED2); //toggle P1.0 using exclusive-OR
}
}

void Delay(void)
{
int i = 0;
while(delayTime > i)
{
i++;
}
}

这段代码编译得很好,但是在调试代码时,函数调用“Delay()”被完全跳过,并且永远不会进入该函数。但是,当我为函数指定“unsigned int”的返回类型时,如下所示:

unsigned int Delay(void)
{
int i = 0;
while(delayTime > i)
{
i++;
}
return 1;
}

我可以在如下所示的 if 语句中调用 Delay 函数,调试器将进入该函数。

if(Delay() == 1)
{
P1OUT ^= (LED1|LED2); //toggle P1.0 using exclusive-OR
}

我确信我犯了一些简单的疏忽。我一生都无法弄清楚为什么调试器会跳过我的第一个 void 函数调用。有什么智慧吗?

最佳答案

swineone 在评论中回复了以下正确的解决方案:

“尝试将声明 int i = 0; 更改为 volatile int i = 0;延迟()函数。这告诉优化器不要触及该变量,并且可能是优化器优化代码之间的区别是否离开。”

感谢您的帮助!

关于c - MSP430 函数调用被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24657026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com