問題タブ [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 に答える
17500 参照

linux - preempt_rtのデメリット

ターゲットハードウェアプラットフォームの馬力が制限されているか、リアルタイムジョブでシステムのオーバーヘッドを最小限に抑える必要があります。これは、通常、デュアルカーネルがネイティブプリエンプションシステムよりも優れている場所です。

ここから:http ://www.xenomai.org/index.php/Xenomai:Roadmap#Xenomai_3_FAQ

Preempt_rtは、Linux全体をプリエンプトします。Linuxをプリエンプトすると、どのようにシステムに負荷がかかりますか?

そこでのFAQは、Xenomaiと比較したpreempt_rtについて説明しています。

0 投票する
1 に答える
1396 参照

linux - ユーザー空間でのリアルタイムのスレッド優先度

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

上記の動作は、例えば、Linux スペースに移行するスレッドが、RTAI スケジューラによって定義された最も低い優先度を継承することによって、同じ移動で実際にリアルタイムの優先度を失う RTAI/LXRT で起こることとは対照的です。

この設計上の決定の背後には何らかの理由があるに違いありません。それがどのような利点を提供できるかを理解したいと思います-つまり、リアルタイムスレッドがユーザー空間にシフトされると、優先度が低くなります(したがって、カーネル空間で実行されている優先度の高いリアルタイムスレッドによってプリエンプトされる可能性があります)。この設計上の決定の背後にある仮定はありますか?

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 を使用して全体をリンクしようとします。アイデアを提供する1つのメイクファイルを次に示します。

したがって、私はこれの初心者であり、これが私の理解です。使用中の関数のシンボルが main.o にありませんが、それは cyclic_executive.o ファイルに存在します。cyclic_executive.h ファイルを含めて、適切な宣言とプロトタイプを提供するため、これがどのように可能かわかりません。

私はそれを間違っていると思いますが、アイデアが不足しています。また、「デフォルト」シーケンスを宣言する方法が本当に嫌いです。適切な方法があることは知っていますが、思い出せません... 誰かがそれを検索するのに役立つ名前を持っていますか?

ありがとう。

0 投票する
1 に答える
3041 参照

gcc - Xenomai プログラムを ARM 用にリンクするときの未定義の参照?

Xenomai (2.5.6 / Linux 2.6.35.9) を実行している組み込みアプリケーションの C コードをクロスコンパイルしようとしています。Xenomai の例から始めて、Makefile を使用してコンパイルしようとしましたが、正しく動作しません (さらに、ARM マシン用にクロスコンパイルしたい)。

私はこのチュートリアルに従って、ソースを手動でコンパイルする方法を見つけました。

arm-linux-gnueabi-gccARM のクロスコンパイルに使用しているツールチェーンはどこ-I/home/...にあり、 はヘッダーが-L/home/...あるパスであり、すべてのライブラリが配置されているパスです。これらのヘッダーとライブラリは、Xenomai のインストール中にそのフォルダーに配置されます (したがって、ARM 用にビルドされます)。

CFLAGS と LDFLAGS はxeno-configチュートリアルで説明されているように使用して生成されましたが、コマンドを実行すると、次のリンカ エラーが発生します。

すべてrt_...の参照は、ライブラリに含まれている Xenomai のカーネル関数です。


EDIT:コマンドラインに追加-lrtして引数を正しく(つまり-L、コマンドラインの最後に)並べても問題は解決しません。ライブラリに関数が含まれていることを確認するために、実行objdumpして次の結果を得ました。

問題を見つけるのに役立つ可能性がある他のこと:

  1. xenomai 関連パッケージのインストール ( xenomai-runtimelibxenomai1linux-patch-xenomai )
  2. 別のツールチェーンを削除しました。ターゲット デバイスで最初にオングストローム ディストリビューションを使用していたので、専用のツールチェーンがありました。現在、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 クロック信号を読み取る方法は?

Xenomai を ARM PC (Xenomai 2.5.6 - Linux Kernel 2.6.35.9) にインストールしており、10 kHz クロック信号を読み取る必要があります。信号は、システム ファイルにマップされている GPIO の 1 つに電気的に接続されています。ユーザー空間でタスクを作成し、時間を測定しながらファイルを開いて読み取り、閉じると、平均で 650 µs の遅延が発生します (つまり、これは、完全なオープン - 読み取り - クローズ サイクルにかかる時間です)。これにより、約 1.5 kHz のサンプリング レートが得られます。

出力:

インターネットのどこかで、タスクをユーザー空間ではなくカーネル空間で実行するように強制すると、実行が高速化されると読んだことがありますが、これで十分かどうか、また私がしようとしていることかどうかはわかりませんここで行うことは完全に正しいです。

私は電子工学のバックグラウンドを持っており、同期信号 (クロック信号など) を非同期に処理しないように、また定期的なタスクを使用してファイル (つまり、同期信号) を読み取るように常に言われてきました。CPU/システムによってはジッターが発生する可能性があります。ロード、良いアプローチのようには見えません。そうするより良い方法はありますか?

ありがとう!

0 投票する
1 に答える
1191 参照

c - Xenomai で定期的なスレッドがリアルタイムで失敗する

アナログ出力で方形信号を出力する周期的なスレッドを作成しています。Xenomai API の Posix スキンとアナロジーを使用しています。

オシロスコープを使用してコードのリアルタイム パフォーマンスをテストし、方形信号 (周波数は 1kHz) のレイテンシを調べました。100us 未満のレイテンシを達成することになっています。ただし、信号は、マウスの移動、新しいプログラムの開始などの一般的な割り込み信号によって大きく乱されます (>250us レイテンシ)。

私のmakefileのフラグは次のように設定されています:

これはコードです:

(Xenomai スケジューラを見て) 私のプログラムが何らかの理由でセカンダリ モードに入っているのではないかと強く疑っています。「assert」ステートメントと関連する 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 共有メモリ オブジェクトとミューテックスにアクセスできますか?

複数のマルチスレッドプロセスを使用して、やや複雑なソフトウェアをプログラミングしています。そのうちの 1 つでリアルタイム機能が必要なので (基本的に堅牢性のために)、ターゲット カーネルに Xenomai 用のパッチを適用し、Xenomai のネイティブ スキンを使用してプログラムしました。

ここで、2 つのプロセスを通信する必要があります。1 つはリアルタイム タスクを実行し、もう 1 つは単にpthreadを実行します(後者は Xenomai のリアルタイム ライブラリ/スキンなしでコンパイルされます)。

私の質問は、どうにかしてそれらを伝えることができますか? たとえば、共有メモリ オブジェクト ( shm_open) を作成し、そのうちの 1 つが RT 環境にある場合でもミューテックスを共有できますか?

  • 答えが「はい」の場合、Xenomai の POSIX スキンを使用する必要がありますか?
  • 答えが「いいえ」の場合、データを安全に共有/通信するにはどうすればよいですか? 名前付きパイプは、私が考えることができる唯一のアプローチです...
0 投票する
0 に答える
735 参照

c - PREEMPT_RT と Xenomai 間の Pthreads ベンチマーク

Xenomai、PREEMPT_RT、および Linux をそのまま Raspberry Pi でベンチマークしようとしていますが、問題が発生しています。

RT優先度と可変スリープ時間で、可変数のスレッドを作成しようとしています。スレッドの 1 つは RT 優先度が高く、GPIO から読み取り、別の GPIO に書き込み (オシロスコープなどでレイテンシを読み取るため)、RT 優先度が低い他のスレッドは算術演算のみを行います。GPIO はメモリにマップされるため、プロトコルのオーバーヘッドを回避できます。

このテストでは次のように考えていました。

問題は、一部のスレッドのみが作成されることです。また、スレッド数が多い場合は、メモリの問題が発生し、プロセスが停止します。それで、私はどのように進めるべきですか?コードが間違っていますか、時間が短すぎますか、それともスレッド数が多すぎますか?

これはコードです: