很多硬件都带有 Tx/Rx 状态 LED,但是如果您的硬件没有并且您想查看数据是否正在传输怎么办?如果您只是将 LED 设置为线的值,它可能会在您看到它之前打开和关闭(<1/100 秒)。
我的问题是,如何编写中断驱动函数来驱动 LED 状态?我在互联网上搜索过,一无所获,我可以使用带模数的计数器,但这似乎很笨重。还有其他想法吗?
PS - 我想在 Arduino 或 Mbed 中使用它,但我怀疑它对哪个问题有影响......
很多硬件都带有 Tx/Rx 状态 LED,但是如果您的硬件没有并且您想查看数据是否正在传输怎么办?如果您只是将 LED 设置为线的值,它可能会在您看到它之前打开和关闭(<1/100 秒)。
我的问题是,如何编写中断驱动函数来驱动 LED 状态?我在互联网上搜索过,一无所获,我可以使用带模数的计数器,但这似乎很笨重。还有其他想法吗?
PS - 我想在 Arduino 或 Mbed 中使用它,但我怀疑它对哪个问题有影响......
void receive_or_transmit_interrupt()
{
g_traffic = true;
/* other stuff. */
}
void timer_that_fires_every_100_milliseconds()
{
if ( led == ON)
{
led = OFF;
g_traffic = false;
}
else if ( g_traffic )
{
led = ON;
}
}
如果您不希望计时器在没有流量的情况下始终触发,您可以更改receive_or_transmit_interrupt
启用计时器,并且计时器可以在关闭 LED 时自行禁用。
一种简单的方法是在 Tx/Rx 中断中打开 LED 并启动一个 200 毫秒的计时器(足够长以感知)。然后在定时器 ISR 中关闭 LED。
这样,指示器在最后一次tx/rx 活动后 200 毫秒熄灭。如果活动持续,指示灯将保持亮起。
如果 tx/rx 突发是间歇性的,间隔大于 200 毫秒,则指示灯将闪烁。因此,关闭、开启和闪烁的状态提供了数据活动的广泛指示。