【发布时间】:2016-04-29 00:00:44
【问题描述】:
我在树莓派上使用 WiringPi。有了它,我分配了一个稍后调用的中断函数。我不确定在等待中断被调用时该怎么做。
示例使用(自旋锁?)for (;;) 例如
int main()
{
// register interrupt
wiringPiISR( 18, INT_EDGE_BOTH, &myInterrupt );
for (;;) {
// really?
}
return 0;
}
我注意到sleep 也有效。无论睡眠如何,都会调用中断
int main()
{
// register interrupt
wiringPiISR( 18, INT_EDGE_BOTH, &myInterrupt );
for (;;) {
sleep(1000000);
}
return 0;
}
什么是保持程序运行的最佳实践,使用最少的资源(例如,如果这是用于后台恶魔)?
来自其他语言,我原以为for(;;) 会占用资源。我想知道该做什么或做什么的指针(线程等)。
【问题讨论】:
-
一个只是休眠的
for(;;)循环不会消耗大量资源,因为一旦循环的迭代执行,它就会返回给调度程序。如果您在中断触发后不一定需要在主循环中进行任何处理,为什么不保持原样(在您的第二个示例中)主循环并在 ISR 中进行中断处理? -
允许编译器假设
for(;;) { }(带有空体)立即终止。它已经发生了。 -
@Joker_vD:为什么要终止无限循环??
-
在任何语言中的行为都是一样的。为什么您认为
sleep在例如蟒蛇? -
@Joker_vD:这与无限循环不同!它将改变抽象机器的行为。仔细阅读:port70.net/~nsz/c/c11/n1570.html#6.8.5p6(见脚注 156)。
标签: c embedded raspberry-pi