我有一个非常简单的.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代码应在嵌入式设备或模拟器上以正确顺序出现问题而工作。