eCosでのSTM3220Gのプログラミング

インテリジェントゲートウェイとハブを迅速にプログラミングするためのフレームワークを作成するというアイデアを持つプロジェクトが1つあります。 これは、一般的に、安価なコントローラーが特定のアルゴリズムに従ってセンサーのグループにサービスを提供し、同時にサーバーと接続している場合です。 物事のインターネットを実装するためのそのようなオプション。



もちろん、フレームワークはクロスプラットフォームであり、ハードウェアおよびソフトウェアプラットフォームの最大数をカバーする必要があります。 そのため、プロジェクトのタスクの1つはeCosのフレームワークポートであり、STM3220G評価ボードの実装では、このためのハードウェアプラットフォームとしてCortex-M3(STM32F2)が選択されました。 このようなタンデムをマスターした経験を共有したいと思います。





オペレーティングシステムとハードウェアプラットフォームの選択は、プロジェクトに参加する前に行われました。 それは与えられたと考えることができます。



フレームワークの要件を検討した結果、言語の選択は明確に行われました-C ++。 組み込みでのC ++の使用については多くの議論がありますが、これについては別の記事を書く方が良いでしょう。 Debian GNU / Linux AMD64がメインの開発システムとして使用されています。もちろん、別個のフレームワークポートがあります。



1. eCos



eCos(私はeXotic OSと呼びます)は、組み込みアプリケーション用の構成可能なリアルタイムオペレーティングシステムです。 それは長い間開発されてきましたが、あまり普及していません(一度使用した統計のグラフを見たことがあります-調査したユーザーの3-5%が使用しています)。 また、eCosCentricという商用オプションもありますが、これまでは使用できませんでした。 後者の開発者は、ちなみに、STM3220G Evalボードのポートを転送しました。 これについては、インターネット上で多くのことが書かれています。



2. STM3220GのeCosの構成



eCos Webサイトで、ユーティリティとツールチェーンのバイナリバージョンへのリンクを見つけることができます。 STM3220GのポートはまだCVSリポジトリにあります。 バイナリバージョンとツールチェーンは、 ecos-install.tclスクリプトを使用してダウンロードされます。 STM32F2の場合、arm-eabiにはGCCポートが必要です。



eCosの機能は、文字通りすべてがオフになっていることです。 これは、define-sと、eCos開発者によって作成された2つのユーティリティconfigtoolとecosconfigで表されるエキゾチックな構成システムを使用して行われます。 1つ目はGTK +グラフィカルインターフェイスを備え、2つ目はコンソールです。 この場合、configtoolが使用されます。



configtoolで、CVSリポジトリから受信したファイルを保存するディレクトリを指定して、構成を開始する必要があります(メニューBuild / Repository)。 その後、ハードウェアST STM 3220G EVALボードオプションが構成テンプレートに表示されます(ビルド/テンプレートメニュー)。



次に、機能があります。オペレーティングシステムのアセンブリに含まれるパッケージの基本セットを指定する必要があります。 コントローラのフラッシュメモリ内のファームウェアの準備が整ったイメージを取得するために、すべてのオプションを組み立てることができるわけではないことをすぐに言わなければなりません。 フレームワークにはスレッドとスケジューラが必要なので、カーネルオプションを選択します。 最初のオプションの準備ができました-システムをビルドできます(メニューBuild / Library)。 実際、システム全体は、ヘッダーファイルのコレクション、静的ライブラリ、およびリンカーへの命令です。 これらはすべて、configtoolユーティリティによって別のディレクトリに収集されます。



フレームワークはクロスプラットフォームであるため、CライブラリパッケージをeCosアセンブリに追加する必要があります。すべてのパッケージはISO CライブラリとPOSIX Compartibilityに関連しています。 これにより、システムの基本的なイメージがわずかに増加しますが、ホイール(つまり標準Cライブラリ)を再度発明するのではなく、使い慣れたC / C ++言語で記述できます。



eCosでは、プログラムの実行はISO Cのようにmain関数ではなくcyg_start()関数で開始され、コードの移植性に悪影響を及ぼします。 これを修正するには、ISO環境の起動/終了パッケージを追加する必要があります。



最後の仕上げ。 コントローラーROMに書き込むことができるイメージを構築するには、スタートアップタイプ== ROM(構成/ eCos HAL / Cortex-Mアーキテクチャ/ Cortex-M3 / -M4 STM32バリアント/ ST STM32x0G-EVAL ... /スタートアップタイプ)を指定する必要があります。 これにより、リンカへの指示とともに正しいファイルをアセンブルできます。



ビルド/ライブラリ、ビルド/テストを再度実行すると、プログラミングを開始できます。



3. eCosのプログラミング



前述したように、メインのフレームワーク開発言語はC ++です。 カプセル化、継承、ポリモーフィズム(仮想メソッドを使用)、パターン、さらには動的な型情報など、ほとんどの言語構成要素が使用されます。 アプリケーションからすぐに除外されたのは、例外、動的メモリ割り当て、STLの使用の3つだけです(eCosバンドルにはアナログライブラリがあります)。 その結果、開発者の生活は大幅に簡素化され、同時に、プログラムのイメージ(オペレーティングシステム自体を含む)は256K(ROM)のボリュームを超えず、通常の128K RAMで通常の操作に十分です。



そのため、eCosはほぼISOに準拠したCライブラリを提供し、C ++を使用すると、読み取りと保守が簡単なコードを記述できます。 eCosには、ISOおよびPOSIX標準とのわずかな矛盾があることに注意してください。



別の機能。 標準C ++ライブラリを使用せずにC ++コードを正しくコンパイルするには、Cコンパイラ(この場合はgcc-arm-eabi)を使用する必要があります。



4.プロジェクトのコンパイルとアセンブリ



Autoconf / automake、およびcmakeスクリプトは、システムを構築およびテストするために記述されています。 それらは可能な限り相互に複製し、autotoolsとcmakeの両方のサポーターのニーズを満たすように作られています。 個人的には、私の好みはオートツールなので、この例をナレーションし続けます。



正しいビルドプラットフォーム(ツールチェーン+コンパイラ設定)を選択するには、autoconfスクリプト(configure.acファイル)の標準キーを使用するだけで十分です。



$ ../configure --host = arm-eabi --prefix = $ ECOS_INSTALL_DIR CXX = gcc-arm-eabi



この場合、ECOS_INSTALL_DIR変数には、ヘッダーファイルとeCosライブラリが収集されるディレクトリパスが含まれている必要があります(上記のとおり-configtoolを使用して構成されます)。



これらのキーに加えて、autoconfスクリプトは、次のように、リンカーとコンパイラのキーを追加する必要があります。



CFLAGS = "$ CFLAGS -ffunction-sections -fdata-sections"

CXXFLAGS = "$ CXXFLAGS -ffunction-sections -fdata-sections"

CPPFLAGS = "$ CPPFLAGS -I $ prefix / include -mcpu = cortex-m3 -mthumb"

LDFLAGS = "$ LDFLAGS -L $ prefix / lib -Ttarget.ld -mcpu = cortex-m3 -mthumb -Wl、-gc-sections -Wl、-n -Wl、-static -nostartfiles -nostdlib"



興味がある人はスクリプト全体を共有できます。



これが構成全体です。



5.フラッシュメモリ内のファームウェア用のイメージの準備



autotools / cmakeビルドスクリプトを使用すると、実行可能ファイルをELF形式で取得できます。 コントローラのフラッシュメモリへのロードには適していません。 ファームウェアに適したイメージを取得するには、objcopyプログラムを使用する必要があります。



$ arm-eabi-objcopy -O binary <your-elf-file> <your-image> .bin



このコマンドは、たとえば次のようにautomakeスクリプト(Makefile.amファイル)に配置できます。



install-exec-hook:

PLATFORM_ECOSの場合

$(host_alias)-objcopy -O binary $(bindir)/ $(PROGRAM_NAME)$(EXEEXT)$(bindir)/ $(PROGRAM_NAME)$(EXEEXT).bin

エンディフ



これをすべて完了したら、次の簡単なコマンドを使用して、コントローラーのフラッシュメモリにファームウェア用のイメージを準備できます。



$インストールする



それだけです。



All Articles