web-dev-qa-db-ja.com

RTOS)を実行しているMCUへのCプログラムのコンパイルとデプロイ

ご注意ください:私が特にRTOSと呼ばれる Embox についてここで話している場合でも) 、そして私がAVR/ARmについて話しているとしても、この質問には、かなりの量のCベースのMCUプログラミングを行ったことのある人なら誰でも答えられると思います。

Emboxを実行しているMCUがあるとします。ここで、2つの実行可能ファイルと1つの静的ライブラリ(両方のプログラムで使用)をCで記述し、3つのアーティファクトすべてをMCU/RTOSにデプロイします。非常によく似た質問/懸念事項がいくつかあります(したがって、4つではなく1つの質問にすることを選択しました)。

  • Emboxにはどのような形式の実行可能ファイルとライブラリが必要ですか。また、どうすればわかりますか? EXE/SO
  • どのようにしてCプログラムをEmboxと互換性のある実行可能/ライブラリ形式(おそらくEXE/SO)にコンパイルしますか?たとえば、MinGWが提供するGCCを使用するWindowsマシンを使用しています。 Linux用のプログラムを書いて、それをLinuxマシンにデプロイすることはできないと思います。そのためにはLinuxマシンが必要です。しかし、展開先のマシンが単純なRTOS/MCUである場合、1つのプラットフォーム/アーキテクチャ(Windows)で開発し、別のプラットフォームで互換性のあるバイナリを作成するにはどうすればよいですか?
  • RTOSが起動時に2つのアプリを実行できるように、実行可能ファイルをMCUにデプロイするにはどうすればよいですか?
  • ユーザーはRTOSとどのように対話しますか?シェル/ SSH /コンソール?
2
smeeb

Emboxにはどのような形式の実行可能ファイルとライブラリが必要ですか。また、どうすればわかりますか?

Emboxは構成可能なOSであり、個別のカーネルイメージとユーザーアプリケーションを作成できます。しかし、MCUのメモリサイズはかなり小さいため、Emboxを含むほとんどの組み込みRTOSは、デフォルトですべてのソフトウェア(カーネル、アプリなど)を単一のイメージにリンクします。

どのようにしてCプログラムをEmboxと互換性のある実行可能/ライブラリ形式(おそらくEXE/SO)にコンパイルしますか?

makeとクロスコンパイラを設定する必要があります。次に、make confload-xxxを使用してEmboxを構成する(目的のテンプレートを選択する)必要があります。最後に、コマンドmakeを使用してイメージを作成します。その後、ファイル./build/base/bin/emboxで画像を見つけることができます。これが短い[はじめに] [1]ページです。

RTOSが起動時に2つのアプリを実行できるように、実行可能ファイルをMCUにデプロイするにはどうすればよいですか?

Emboxは単一の画像を作成しますが、その中に複数のアプリを含めることができます。 EmboxのほとんどのRTOSとは異なり、いくつかのmainルーチンを持つことができます。この機能は、特別なビルドシステムを使用して有効にします。 Emboxはモジュールのセットで構成され、各モジュールはDSL言語を使用して記述されます。 「アプリケーション」タイプのモジュールがあります。モジュールが「アプリケーション」としてマークされている場合、ビルドシステムはmainシンボルを取り除き、<package-name>_<module-name>_mainに置き換えます。また、ビルドシステムは、新しいシンボルとアプリケーション名を特別なアプリケーションレジストリに追加して、EmboxShellまたはその他の方法でアプリケーションを実行できるようにします。

ユーザーはRTOSとどのように対話しますか?シェル/ SSH /コンソール?

Emboxにはシェルが組み込まれており、たとえばUART(COMポート)からアクセスできます。Emboxにはtelnetおよびhttpdアプリもあります。また、Emboxにはsshddropbearプロジェクトを含む)のポートがありますが、MCUと通信する最も簡単な方法ではないと思います。

3
Anton Bondarev

Emboxにはどのような形式の実行可能ファイルとライブラリが必要ですか。また、どうすればわかりますか?

ドキュメントを読む。組み込みで使用するように設計された一部の(ほとんど?)カーネルは、ファイルから実行可能ファイルをロードすることさえサポートしない場合があることに注意してください。アプリケーションをカーネルイメージにコンパイルする必要がある場合があります。

[...]あるプラットフォーム/アーキテクチャ(Windows)で開発し、別のプラットフォームで互換性のあるバイナリを作成するにはどうすればよいですか?

これはクロスコンパイルと呼ばれます。基本的に、ターゲットシステムでバイナリを生成する「ツールチェーン」と呼ばれるものをインストールする必要があります。ホストシステム用にコンパイルするのは特別な場合です。 gccはもちろん、同じシステムの異なるパスに複数のツールチェーンをインストールできるように設計されています。

RTOSが起動時に2つのアプリを実行できるように、実行可能ファイルをMCUにデプロイするにはどうすればよいですか?

上記のように、アプリケーションはカーネルにコンパイルされることが期待される場合があります。並行プロセスを開始するには、main()fork()が必要な単一のexec()に制限される場合があります。多くのマイクロコントローラーでは、プロセスでさえ適切にサポートできません。カーネルデータ保護のいくつかの形式のみが存在します。通常、スレッドのみを取得します。

ユーザーはRTOSとどのように対話しますか?シェル/ SSH /コンソール?

SPIのようなものを接続して、コンピューターと通信できるようになるまでは、通常はボタンとLEDだけです。一部の開発ボードでは、デバッグによる基本的なシリアル接続がサポートされています( USBポート。ただし、使用されるプロトコルは通常、アプリケーションに固有です。基本的に、独自の「シェル」をプログラミングして、コマンドを処理し、出力を書き込むMCUで実行します。

4
Atsby