我正在尝试编写一个非常简单的 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"