C中等待中断的有效方法

2024-04-05

我在树莓派上使用 WiringPi。我用它分配了一个稍后调用的中断函数。我不确定在等待中断被调用时该怎么做。

示例使用(自旋锁?)for (;;) e.g.

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(;;)会耗尽资源。我想知道要做什么或如何做的指针(线程等)。


我最近不得不这样做。我的理论是KISS https://en.wikipedia.org/wiki/KISS_principle. sleep根据定义,编写为使用最少的资源 - 使用它意味着我不必关心线程。

简单、可读且对原始 Raspberry Pi B 没有可测量的性能影响:

int main() 
{
    // register interrupt
    wiringPiISR( 18, INT_EDGE_BOTH, &myInterrupt );

    for (;;) {
        sleep(UINT_MAX);
    }
    return 0;
}

请注意,使用 UINT_MAX 来最大限度地减少 for 循环调用的数量 - 这假设有一个无符号的 32 位定时器延迟,这正是 WiringPi 使用的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C中等待中断的有效方法 的相关文章

随机推荐