繁体   English   中英

POSIX皮肤中的Xenomai clock_nanosleep跳转到Linux内核

[英]Xenomai clock_nanosleep in POSIX skin jumps to Linux Kernel

我在Xenomai测试POSIX皮肤。 我正在尝试从Raspberry Pi上的一些GPIO读取和写入,当我执行程序时,有越来越多的上下文切换(在/ proc / xenomai / stat /中)。

程序的主要部分将GPIO映射到内存并启动pthread。 制造麻烦的pthread是这样的:

void *productive_thread(void *arg)
{
    struct timespec delay, sleep;
    unsigned long over;

    delay.tv_sec = 0;
    delay.tv_nsec = 10000; // 10 usec

    sleep.tv_sec = 0;
    sleep.tv_nsec = *(long *)arg;

    while(1)
    {
            // This are the read and write macros (gpio is the address of the GPIO mapping):
            // #define GPIO_SET *(gpio+7)
            // #define GPIO_CLR *(gpio+10)
            // #define GPIO_READ(g) (*(gpio + 13)&(1<<(g)))>>4
        while(GPIO_READ(4) != 1);
        GPIO_SET = 1 << 17;
        clock_nanosleep(CLOCK_REALTIME, 0, &delay, NULL);
        GPIO_CLR = 1 << 17;
        clock_nanosleep(CLOCK_REALTIME, 0, &sleep, NULL);
    }
    return NULL;
}

每个循环都会增加上下文切换次数。 我怀疑问题是clock_nanosleep,因为所有其他操作都是算术运算,但是在Xenomai文档中定义了clock_nanosleep。 它可以以某种方式改进(使用POSIX皮肤)?

当进程休眠时,它执行自愿上下文切换。 这很好,除非你实际上错过了截止日期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM