Embedded 在msp430上,从for循环的结束返回到开始需要多少时间?
我这样问是因为下面的代码是我用来让两个LED完全交替闪烁的代码。但这并不能解释为什么会起作用。此带有2个xor的循环有2种状态,一种是引脚1(仅红色点亮)处于活动状态,另一种是引脚6和引脚1均处于活动状态(红色和绿色点亮)。但是这些灯闪烁着,就像它们在彼此之间完美地交替开关一样Embedded 在msp430上,从for循环的结束返回到开始需要多少时间?,embedded,msp430,code-composer,Embedded,Msp430,Code Composer,我这样问是因为下面的代码是我用来让两个LED完全交替闪烁的代码。但这并不能解释为什么会起作用。此带有2个xor的循环有2种状态,一种是引脚1(仅红色点亮)处于活动状态,另一种是引脚6和引脚1均处于活动状态(红色和绿色点亮)。但是这些灯闪烁着,就像它们在彼此之间完美地交替开关一样 #include <msp430g2553.h> // counter as a global variable unsigned int i = 0; void main(void) {
#include <msp430g2553.h>
// counter as a global variable
unsigned int i = 0;
void main(void)
{
// stop the watchdog timer
WDTCTL = WDTPW + WDTHOLD;
// set the direction register for LED1 and LED2
P1DIR |= 0x41;
// initialize LED1 and LED2 to off
P1OUT &= 0xBE;
//empty for loop is an infinite loop
for (;;)
{
P1OUT ^= 0x01;
// create a delay between toggles
for(i=0; i< 20000; i++)
{
// empty statement, do nothing
}
P1OUT ^= 0x40;
}
}
#包括
//计数器作为全局变量
无符号整数i=0;
真空总管(真空)
{
//停止看门狗定时器
WDTCTL=WDTPW+WDTHOLD;
//设置LED1和LED2的方向寄存器
P1DIR |=0x41;
//将LED1和LED2初始化为off
P1OUT&=0xBE;
//空for循环是一个无限循环
对于(;;)
{
P1OUT^=0x01;
//在切换之间创建延迟
对于(i=0;i<20000;i++)
{
//空语句,什么也不做
}
P1OUT^=0x40;
}
}
主for循环的延迟是否可能导致这种错觉?答案是返回到循环开始的速度非常快 此代码看起来应该为我替换指示灯。不过,你的评论似乎排得不好 它的主要部分在你的循环中。开始时,两个LED都熄灭。然后这样做(我已将评论更改为我认为他们所做的):
答案是回到循环的起点非常快 此代码看起来应该为我替换指示灯。不过,你的评论似乎排得不好 它的主要部分在你的循环中。开始时,两个LED都熄灭。然后这样做(我已将评论更改为我认为他们所做的):
无法根据您提供的内容来确定。为了更好地了解发生了什么,请在无限循环结束之前添加延迟循环的副本。如果您希望其他人阅读您的代码,如果其格式为可读性,则可能更礼貌,更可能吸引观众。空白和缩进也有助于理解。为您重新格式化。使
i
全球化的目的是什么?如果必须有全局变量,请不要将其称为i
!在这种情况下,它不仅不需要是全局的,还可以被本地化为for循环:for(volatile int i=0;i<20000;i++)
。如果您不希望循环被潜在地优化掉,则在任何情况下都应将其声明为易失性。无法根据您提供的内容确定。为了更好地了解发生了什么,请在无限循环结束之前添加延迟循环的副本。如果您希望其他人阅读您的代码,如果它的格式是为了可读性,那么它可能是有礼貌的,更容易吸引观众。空白和缩进也有助于理解。为您重新格式化。使i
全球化的目的是什么?如果必须有全局变量,请不要将其称为i
!在这种情况下,它不仅不需要是全局的,还可以被本地化为for循环:for(volatile int i=0;i<20000;i++)
。如果你不希望循环被潜在地优化掉,那么它应该被声明为易失性的。是的,我对评论感到抱歉,这是我编辑的教科书代码,但我没有修改评论。谢谢你的例子真的帮助我把它形象化了。是的,我很抱歉评论,这是我编辑的教科书代码,但我没有修改评论。谢谢你的例子真的帮助我把它形象化了。
for (;;) { // infinite loop
P1OUT ^= 0x01; // toggle state of LED1
for(i=0; i< 20000; i++) // create a delay
;
P1OUT ^= 0x40; // toggle state of LED2
}
LED1 LED2
off off
start into loop
Toggle LED1 on off
wait
wait
wait
Toggle LED2 on on { go back to start of loop - quickly }
Toggle LED1 off on
wait
wait
wait
Toggle LED2 off off
Toggle LED1 on off
wait
...