問題タブ [rtems]

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 投票する
1 に答える
1039 参照

linux - RTEMS: プログラムをコンパイルして実行する方法は?

私は学術プロジェクトを始めたばかりです: Nano Sattelites Software Infrastructure. RTEMS を CentOS にインストールしたところ、hello や ticker などのサンプル プログラムをコンパイルして実行できました。既存のファイル (init.c など) に変更を加えて新しいファイル、タスク、または関数を追加すると、コンパイルが失敗します。新しいプログラムを最初から作成してコンパイルする方法の段階的な説明のようなチュートリアルは見つかりませんでした。既存のサンプルファイルをコンパイルして実行する方法の例しかありません...この点について誰か助けてもらえますか?

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

c - RTEMS の構築での「PTHREAD_RWLOCK_INITIALIZER undeclared」エラー

RTEMS-4.11 のビルド中にエラーが発生し、ソース ファイル「posix/src/prwlockinit.c」で構成パラメーター「--enable-posix」を使用しました。

ログに「cpukit/posix/src/prwlockinit.c:42:19: error: 'PTHREAD_RWLOCK_INITIALIZER' undeclared (first use in this function)」と表示される

rtems ソース ディレクトリでシェル コマンド grep -r "PTHREAD_RWLOCK_INITIALIZER" を使用すると、このマクロについて何も宣言されませんでした。

「--disable-posix」ではなく「--enable-posix」でこの問題を解決するにはどうすればよいですか?

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

c++ - プログラムで segfault を発生させても、シグナル ハンドラーによってキャッチされない

まず、オペレーティング システムが RTEMS であることを指摘しておきます。これはオープン ソースの RTOS であり、ソースは次の場所にあります。

http://git.rtems.org/rtems/

ここのドキュメントの sigaction 呼び出しを使用して、SIGSEGV (サポートされていると思われる) のシグナルハンドラーをセットアップする非常に単純なプログラムがあります。

http://docs.rtems.org/releases/rtemsdocs-4.9.2/share/rtems/html/posix_users/posix_users00033.html

私のプログラムは基本的にこれに要約されます:

ただし、問題は、プログラムでセグメンテーション違反を引き起こすと、シグナル ハンドラーが呼び出されず、代わりにvectors_init.c(RTEMS ソース) でカーネル プロセスが呼び出されてスタック トレースが出力されることです。rtems プログラムで SIGSEGV シグナルを取得するために何か特別なことをする必要がありますか?

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

debugging - 要求された書き込みの後に gdb が自動的に読み取りを行うのはなぜですか?

私は gdb を使用して、自作の gdb サーバーを介して LEON2 ベースの ASIC と通信しています (ここでは「gdb サーバー」が正しい言い回しであるかどうかはわかりません)。これは次のように機能します: gdb クライアントは通常の gdb プロトコルを使用して gdb サーバーと通信し、gdb サーバーは gdb 要求を HW からの読み取りと書き込みに変換し、結果があればクライアントに送り返します。私の gdb クライアントは、Windows 7 PC 上の RTEMS 4.8.0 の sparc-rtems-gdb 6.6 です。

gdb クライアントを起動したら、次のコマンドを実行して gdb サーバーに接続します。

次に、RAM 内の単語を変更したいので、次の gdb コマンドを実行します。

gdb サーバーをデバッグしているときに、次の行を受信して​​いることがわかります。これは、gdb プロトコルに従って予期された正しいものです。つまり、4 バイト、値 2 をアドレス 0x40000000 に書き込みます。

ここで混乱: 上記の書き込み要求の後、別の要求が gdb クライアントから送信され、アドレス 0xABD37787 から 4 バイトを読み取ります。

gdb クライアントがそのアドレスから読み取ろうとするのはなぜですか? 私の知る限り、この読み取りを要求するために何もしていません。書き込みを実行したかっただけです。たとえば、書き込みを検証するために、gdb がアドレス 0x40000000 を読み戻せば問題ありません。しかし、どこにもないアドレス 0xABD37787 がハードウェアに存在しないため、問題が発生します。

gdb クライアントをデバッグして、送受信しているもの (およびその理由) を正確に判断する方法はありますか? または、この動作を説明できる gdb の設定はありますか?

よろしくお願いします

ヘンリク

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

c - C でキャスト (void) された変数名だけのステートメント

RTEMS 初期化ルーチンでは、以下のコードが表示されます。

上記のコードでは、最初に bsp_isr_level が rtems_interrupt_level 型 (最終的に unsigned int として定義される型) として宣言されています。
しかし、ラインは何をしているの(void) bsp_isr_level;ですか?(上記の //<-- でマークされています)。hereのように関数の引数として渡される変数ではありません。

編集:私の場合、変数は rtems_interrupt_disable 関数によって割り当てられていることがわかりました(実際には#definedマクロです)ので、「使用されていません」ではありません。しかし、割り当てられていますが、割り当てられた値は使用されていないようです。この構文がこのような場合にも使用されるかどうかはわかりません(値は割り当てられていますが、使用されていません)。ところで、RTEMS のソース ツリーに、以下のような void 引数を持つ関数 (実際の関数、#defined ではない) rtems_interrupt_disable があることを発見しました。(cpkit/rtems/src/intrbody.c 内)。(#defined バージョンは cpukit/rtems/include/rtems/rtems/intr.h にあります)

したがって、この構文は、この 2 番目の定義 (値が void として関数に渡される) の場合に備えて使用された可能性があります。この2番目の定義が存在するため、一部のビルドケースで使用できると思います。

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

c++ - 名前変更 RTEMS での errno 障害

名前の変更機能を使用して、RTEMSファイルの名前を変更しようとしています。RTEMS独自のerrnoレポート ガイド に準拠していないように見えることを発見したとき、正しいエラー処理およびレポート システムをセットアップしています。

したがって、失敗した関数は常に -1 を返します。現在の例は、次のものがあるディレクトリ</D\>にあります。

rename("LALALA_1", "LALALA_2")正しく動作するものを呼び出すと、フォルダーの名前が変更されます。だから私は機能が動作することを知っています。を呼び出すとrename("LALALA", "LALALA_2")、-1 を返すのに失敗します...これは素晴らしいことですが、代わりに をEEXIST取得しerrno == -1ます。