调试语句仅在.Net Micro Framework简单LED项目中间歇性地触发

时间:2014-02-06 11:46:28

标签: .net-micro-framework

我有一个非常简单的.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中的输出窗口显示

Go white ...
Go red ...
Go green ...
Go blue ...
Go white ...
Go dark ...
Go red ...
Go blue ...
Go red ...
Go green ...

为什么不能通过所有调试语句?是Thread.Sleep使用错误的'模式'吗?

1 个答案:

答案 0 :(得分:0)

你的Thread.Sleep()函数只影响程序的主线程。由于netmf程序只有一个线程,因此没有明显的理由来捕获输出中的同步偏移。在调试模式下,IDE本身使用的另一个线程可能会导致此结果。但是,您成功编译的netmf代码应该在嵌入式设备或仿真器上正常工作时没有问题。