问题标签 [xenomai]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
576 浏览

linux - 什么代码不应该写成实时代码?

Xenomai 的 Posix skin API 中,我发现以下内容:

POSIX 皮肤。
时钟和计时器服务。
条件变量服务。
中断管理服务。
消息队列服务。
互斥服务。
信号量服务。
共享内存服务。
信号服务。
线程管理服务。
线程取消。
线程调度服务。
线程创建属性。
线程特定的数据。

我看不到有关文件处理套接字编程的任何内容,所以我猜也许文件处理和套接字不是实时处理的?猜错了吗?

请指导。

0 投票
2 回答
17500 浏览

linux - preempt_rt 的缺点

目标硬件平台的马力有限,和/或您希望实时作业在您的系统上施加尽可能小的开销。这就是双内核通常比原生抢占系统更好的地方。

从这里:http ://www.xenomai.org/index.php/Xenomai:Roadmap#Xenomai_3_FAQ

Preempt_rt 确实抢占了整个 Linux。抢占 Linux 以何种方式给系统增加负载?

与 Xenomai 相比,FAQ 那里讨论了 preempt_rt。

0 投票
1 回答
1396 浏览

linux - 用户空间中的实时线程优先级

来自:http ://www.xenomai.org/documentation/xenomai-2.3/pdf/Life-with-Adeos-rev-B.pdf

上述行为与 RTAI/LXRT 发生的情况相反,例如,通过继承 RTAI 调度程序定义的最低优先级,迁移到 Linux 空间的线程实际上在同一移动中失去了实时优先级。

这个设计决定背后一定有一些原因。我希望了解它可以提供什么样的优势 - 我的意思是当实时线程转移到用户空间时,它会获得低优先级(因此可以被内核空间中运行的高优先级实时线程抢占)。这个设计决策背后是否有一些假设?

0 投票
0 回答
363 浏览

linux-kernel - linux 内核 2.6.38.8 配置上的 APM 在哪里?

我关注这个文档

它说我应该关闭 linux 内核 2.6.38.8 上的 APM 模块。

但我在电源管理和 ACPI 选项下找不到它。

在此处输入图像描述

如何关闭 APM?

APM 是否与运行时 PM 核心功能相同?

谢谢~

0 投票
1 回答
1666 浏览

c - 目标文件缺少函数符号

我目前正在编写一个简短的测试应用程序。编译给了我这些错误:

我将尝试将代码缩小到特定部分。

这是我使用的包含所需参考的结构:

函数指针是尚未编写的通用函数的占位符,在同一个 .h 文件中声明如下:

该函数目前在 c 文件中是空的:

最后,这是我在测试中使用的示例默认结构:

所有这些部分都包含在一个公共源文件中,这些文件在许多周期性任务的实现之间共享。目标文件的编译似乎很好。当我尝试编译给定的实现时,我首先包含 .h 文件,编译 .o 文件,然后尝试使用 makefile 链接整个内容。这里有一个 makefile 可以给你一个想法:

所以,我是这方面的初学者,这是我的理解:main.o中缺少busy函数的符号,而它存在于cyclic_executive.o文件中。我不明白这是怎么可能的,因为我包含了 cyclic_executive.h 文件,从而给出了正确的声明和原型。

我认为我做错了,但我缺乏想法。另外,我真的不喜欢我如何声明我的“默认”序列。我知道有一种正确的方法可以做到这一点,但我不记得了……有人有名字可以帮助搜索吗?

谢谢。

0 投票
1 回答
3041 浏览

gcc - 为 ARM 链接 Xenomai 程序时未定义的引用?

我正在尝试为运行 Xenomai(2.5.6 / Linux 2.6.35.9)的嵌入式应用程序交叉编译 C 代码。我从 Xenomai 示例开始,并尝试使用他们的 Makefile 编译它们,但它们无法正常工作(此外,我想为我的 ARM 机器进行交叉编译)。

我遵循教程并找到了一种手动编译源代码的方法,恰好是这个:

arm-linux-gnueabi-gcc我用来交叉编译 ARM 的工具链在哪里,-I/home/...是头文件所在-L/home/...的路径,也是所有库所在的路径。在 Xenomai 安装期间放入该文件夹的那些头文件和库(因此它们是为 ARM 构建的)。

CFLAGS 和 LDFLAGS 是xeno-config按照教程中的说明生成的,但是当我执行命令时,出现以下链接器错误:

所有rt_...引用都是库中包含的 Xenomai 的内核函数。


编辑:添加-lrt到命令行并正确排序参数(即-L在命令行末尾)并不能解决问题。为了确保库确实包含函数,我执行objdump并得到以下结果:

我做的其他事情可能有助于发现问题:

  1. 安装与 xenomai 相关的软件包(xenomai-runtimelibxenomai1linux-patch-xenomai
  2. 删除了不同的工具链。因为我第一次在我的目标设备中使用 Ångström 发行版,所以我有一个专门的工具链。现在,我搬到了 Debian,我正在使用binutils-arm-linux-gnueabi 包arm-linux-gnueabi中提供的工具链。
  3. 编译了一个新的 Linux 内核和 Xenomai(用于我的目标设备)。内核版本是 2.6.35.9,Xenomai 是 2.5.6。我应该使用早期版本吗?无论如何,Xenomai 安装正确,因为我可以运行预编译的程序(讽刺的是,在 Xenomai 的安装过程中,我自己编译了这些程序......)
0 投票
1 回答
531 浏览

asynchronous - 如何在 Xenomai 中读取 GPIO 时钟信号?

我在 ARM PC(Xenomai 2.5.6 - Linux Kernel 2.6.35.9)中安装了 Xenomai,我需要读取 10 kHz 时钟信号。该信号与我的一个 GPIO 电连接,该 GPIO 映射到系统文件。如果我在用户空间创建一个任务并在测量时间时打开-读取-关闭文件,我会得到 650 µs 的平均延迟(即,这是一个完整的打开-读取-关闭周期的时间)。这产生了约 1.5 kHz 的采样率。

输出:

我在 Internet 上的某个地方读到,强制我的任务在内核空间而不是用户空间中运行可以使其执行速度更快,但我不确定这是否足够,也不知道我正在尝试什么在这里做是完全正确的。

我来自电子工程背景,我一直被告知不要异步处理同步信号(如时钟信号),并使用可能会根据 CPU/系统引入抖动的周期性任务读取文件(即我的同步信号)加载,看起来不是一个好方法。有更好的方法吗?

谢谢!

0 投票
1 回答
1191 浏览

c - Xenomai 中的周期性线程实时失败

我正在创建一个周期性线程,它在模拟输出上输出一个方波信号。我正在使用 Xenomai API 中的 Posix 皮肤和类比。

我使用示波器测试了我的代码的实时性能,并查看了方波信号(其频率为 1kHz)的延迟。我应该实现<100us的延迟。但是,信号受到常见中断信号(如移动鼠标、启动新程序等)的强烈干扰(>250us 延迟)。

我的 makefile 中的标志设置如下:

这是代码:

我强烈怀疑(通过查看 Xenomai 调度程序)我的程序以某种方式进入辅助模式。我试图删除“断言”语句以及相关的 printf,但这并不成功。知道如何解决吗?

0 投票
1 回答
714 浏览

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

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

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

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

0 投票
1 回答
1490 浏览

c - 我可以从 Xenomai 实时任务中访问非 RT 共享内存对象和互斥锁吗?

我正在编写一个具有多个多线程进程的稍微复杂的软件。因为在其中一个中我需要实时功能(基本上是为了健壮性),所以我为 Xenomai 修补了我的目标内核并使用 Xenomai 的本机皮肤对其进行了编程。

现在我需要沟通两个进程:一个运行实时任务,另一个运行简单的pthreads(后者在没有 Xenomai 的实时库/皮肤的情况下编译)。

我的问题是:我能以某种方式与他们交流吗?例如,我可以创建一个共享内存对象 ( shm_open) 并共享互斥锁,即使其中一个在 RT 环境中?

  • 如果答案是肯定的,我应该在 Xenomai 中使用 POSIX 皮肤吗?
  • 如果答案是否定的,我如何安全地共享数据/通信它们?命名管道是我能想到的唯一方法......