调试语句仅在.NET Micro Framework简单LED项目中间歇性发射



我有一个非常简单的.NET Micro Framework LED项目(在ARM Cortex-M4 CPU上在NETMF 4.2 GHI代码上运行)。这是相关代码:

using Microsoft.SPOT.Hardware;

[…]

OutputPort _RedLED;
OutputPort _GreenLED;
OutputPort _BlueLED;

[…]

_RedLED = new OutputPort(GHI.Hardware.FEZCerb.Pin.PB15, false);
_GreenLED = new OutputPort(GHI.Hardware.FEZCerb.Pin.PB14, false);
_BlueLED = new OutputPort(GHI.Hardware.FEZCerb.Pin.PB13, false);

[…]

for (var i = 0; i < numTimes; i++)
{
    Debug.Print("Go white ...");
    _RedLED.Write(true);
    _GreenLED.Write(true);
    _BlueLED.Write(true);
    Thread.Sleep(2000);
    Debug.Print("Go dark ...");
    _RedLED.Write(false);
    _GreenLED.Write(false);
    _BlueLED.Write(false);
    Thread.Sleep(2000);
    Debug.Print("Go red ...");
    _RedLED.Write(true);
    Thread.Sleep(2000);
    _RedLED.Write(false);
    Debug.Print("Go green ...");
    _GreenLED.Write(true);
    Thread.Sleep(2000);
    _GreenLED.Write(false);
    Debug.Print("Go blue ...");
    _BlueLED.Write(true);
    Thread.Sleep(2000);
    _BlueLED.Write(false);
}

当我在设备上运行代码时,LED按预期启动和关闭,但是Visual Studio 2013中的输出窗口显示

去白...变红...变绿 ...蓝色...去白...黑暗...变红...蓝色...变红...变绿 ...

为什么所有的调试语句都不通过?thread.sleep使用错误的"模式"?

您的thread.sleep()函数仅影响程序的主线程。由于NETMF程序具有一个线程,因此没有明显的理由来捕获输出中的同步变化。在调试模式下,IDE本身使用的另一个线程可能会导致此结果。但是,您成功编译的NETMF代码应在嵌入式设备或模拟器上以正确顺序出现问题而工作。

最新更新