1

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 にあると思われますが、clock_nanosleep はXenomai のドキュメントで定義されています。どういうわけか(POSIXスキンを使用して)改善できますか?

4

1 に答える 1

3

プロセスがスリープ状態になると、自発的なコンテキスト スイッチが実行されます。実際に締め切りに間に合わなかった場合を除き、これで問題ありません。

于 2013-11-07T01:16:04.400 に答える