0

我正在尝试编写一个非常简单的 xenomai 代码(mercury lib,而不是双内核),只是为了测试 vxworks 皮肤。

注意:与官方 Xenomai 演示相同的问题。见:Xenomai 3.1 水银序言失败,线程运行官方演示

我做了什么:

  • 带有互斥信号量和任务衍生的简单 C 代码

当我运行应用程序时,我首先收到警告(在“taskSpawn”指令中):

WARNING: [main] prologue failed for thread mytask, EINVAL

然后应用程序在下一个“semTake”指令崩溃(分段错误)

我已经检查了 bootstrap/auto-init xeno-config 等,它对我来说看起来是正确的。初始化期间似乎缺少某些东西。

你有什么想法吗?非常感谢。


遵循代码和其他信息

我有的:

  • debian 10.10.0-amd64,安装在 VirtualBox 中
  • 为 32 位目标安装和构建的 xenomai 3.1 汞

测试代码:

SEM_ID semWait;
int errors_counter = 0;

void my_task(void) {
    semGive(semWait);
}

int main(void) {
    semWait = semBCreate(SEM_Q_PRIORITY, SEM_EMPTY);

    taskSpawn("mytask", 10, 0, 10000, (FUNCPTR)my_task, 0,0,0,0,0,0,0,0,0,0);

    if (semTake(semWait, sysClkRateGet()*5) != OK) {
        errors_counter++;
    }
    semDelete(semWait);
    
    return 0;
}

编译器选项:

-c -fmessage-length=0 -I/usr/xenomai/include/mercury -I/usr/xenomai/include -m32 -O2 -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/vxworks

链接器选项:

-Wl,--no-as-needed -lvxworks  -lcopperplate /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury -lpthread -lrt -m32

xenomai 配置:

../xenomai-3.1/configure --enable-lores-clock --with-core=mercury --enable-smp --enable-pshared CFLAGS="-m32 -O2" LDFLAGS="-m32"
4

0 回答 0