0.0はじめに
高いレベルパッケージ(arduinoのは、MBED)完全にインターフェイス複雑かつ困難な開発に低レベルパッケージ(LL HAL)に直面して、必要なAPIとパフォーマンスの問題にさらされることはできません。組み込みハードウェア抽象化フレームワークは、多くの場合、ジレンマに直面しています。最近のフレームワークを発見クローム埋め込みコントローラより良い開発効率や運用効率を比較検討すること(以下、ECと呼ばれる)を、だけでなく、他の貴重な機能の数を持っています。いくつかの一般的なECのAPIで見てみましょう:
// GPIO宣言
// GPIO(名前、ピン、フラグ)
GPIO
(PD11、
PIN
(D、
11
)、GPIO_OUT_HIGH)
出力として//宣言
GPIO
(PC6、
PIN
(C、
6
)、GPIO_INPUT)
//宣言入力として
gpio_set_level
(GPIO_PD11、
1
)。
//設定GPIO出力
int型の
入力=
gpio_get_level
(GPIO_PC6)。
// GPIO入力を読みます
// I2Cポートを初期化します
GPIO
(I2C1_SCL、
PIN
(B、
6
)、GPIO_ODR_HIGH)
// I2Cポート1 SCL
GPIO
(I2C1_SDA、
PIN
(B、
7
)、GPIO_ODR_HIGH)
// I2Cポート1 SDA
ALTERNATE
(
PIN_MASK
(B、
0x00C0
)、GPIO_ALT_F1、MODULE_I2C、GPIO_PULL_UP)
CONST
構造体
i2c_port_t
i2c_ports [] = {
{ "試験"、STM32_I2C2_PORT、 100、GPIO_I2C2_SCL、GPIO_I2C2_SDA}
}。
CONST
符号なし
整数
i2c_ports_used =
ARRAY_SIZE
(i2c_ports)。
// int型i2c_write8(int型ポート、int型のslave_addr、int型オフセット、intデータ)
i2c_write8
(
1
、
0x40の
、
0x2の
+バンク、
0x4C
)。
//書き込みU2C出力
// int型i2c_read8(int型ポート、int型のslave_addr、int型のオフセット、int型*データ)
i2c_read8
(
1
、
0x40の
、
0x6に
+銀行、& TMP);
//読み取りI2C入力
どのように、より多くのSTDLIBとHALよりシンプルか何かではないでしょうか?フレームワークは、特定の目的のために設計されたとして、それが海外でいくつか存在する場合でも、EC開発に関する一般的な情報のために使用されます。本論文では、ECの間に自分のノートを探ることであるが、また、組込み開発者のための大きな可能性フレームワークを知っている、使用が存在するように優れていることと希望。
ECは何ですか?
- ECは、新しいChromebookの開始ハードウェアの管理とハードウェアのためのガイドです
- Chromebookのチームは、彼らが代替としての汎用組み込みのSoC実装を使用して、従来のBIOSがでたらめであると考えています(あなたがあなたのアップできるGoogleを教えていない、缶を行うと、彼らは最高でしょう)
- ECは、ハードウェア上で実行されている組み込みアプリケーション・フレームワークを指し、Googleチームは、オープンソースのBSDライセンスに基づいて説明する(以下、EC手段マルチフレームという)
- EC従来のBIOSブートおよびOSとハードウェア管理機能を起動し、それはCPU間通信(APも、アプリケーションプロセッサと称する)とが必要です
- ECは、直接それらの統合を駆動するように、キーボードなどの多くのChromebookのデバイスは、PMU、各種センサを制御します
- ECはもともとChromebookのために設計されましたが、直接私たちは、自分のプロジェクトのためにそれを使用することができます別のMCUに移植することができますが。これは、この記事の主な目的です。
どのようにECは動作しますでしょうか?
タスク(作業)
- ECとしないエントリポイント(メイン関数)を露出しました。私たちのプログラムは、スケジュールされたタスクとして実行する必要があります。
- そして、他のタスクスケジューラでは、のような、ECは、タスクの関数であり、
- そこプリセット優先度のタスクがあり、ときに発生プリエンプション
- ユーザーが別のファイルにミッションステートメントを実行する必要があります
モジュール(モジュール)
- 各モジュールは機能ユニット、プログラムと対応するヘッダファイルの本体をカプセル化されています
- SOCに両方のペリフェラル(UART、SPIなど)、さらにハードウェア装置(センサ、キーボード、等)、ならびに非ハードウェア制御ロジック(ジェスチャー制御、SHA1など)の数を含みます。
- 含む、プロジェクトのヘッダファイルを導入することにより、初期化関数(使用するように設定する前にレジスタの一部を設定する必要があります)
コンソール(コンソール)
- 実際には、最終的なECは、1つのUSBデバイスにマッピングされているが、I2C、SPI又はAPとLPCバス通信を用いてEC
- ECコンソールは、いくつかの事前定義された命令によって送信された端末ユーザに対して行わ、内蔵してもよいし、ユーザ定義、動作印刷の状態、動作の一部とハードウェアモジュールなどの動作を含みます。別のファイルに定義された各操作指示モジュール。
- ECファームウェアはコンソールから直接アップグレードすることができます
- コンソールは、また、生産に導入されていない、必要に応じて、デバッグ時に大きな利便性を提供するモジュールであります
マルチプラットフォームアダプター(見出しフォーマットはまだそれを苦労したいです)
- Chromebookの異なるタイプのECコントローラの異なる種類を使用しているため、ECは、クロスプラットフォームの適応のために必要なファームウェア
- EC巧みに設計されたAPIは、ユーザーがコードの唯一の小さなセットが異なるのSoCに移植することができます行うことができます
- これらの設定は、システムクロック、FLASH RAMのサイズなど、ユーザに露出マクロの形式を定義、および
- 各プラットフォーム用の設定ファイルの設定は別々に書かれています
- 注:このチュートリアルでSTM32プラットフォーム
なぜEC?
-
軽くて速いです
ECは、既存のフレームワークに基づいているが、直接パッケージの操作の特定のレベルに登録していません。これは、それもSTM32L151 32MHzの/ 16キロバイトのRAM上で実行されます - 自分の車を作っていない限り、これは最軽量のマルチタスキングは、今の枠組みを埋め込まれているかもしれません。 -
コンサイスAPI
たとえば、GPIOピンを宣言するために、ただ1行GPIO(名前、ピン、旗)を書き、地獄が何であるかをGPIO_XXXX()、GPIO_Typedefを聞かせて -
クロスプラットフォームのハードウェア抽象化
上述したように、ECは、クロスプラットフォームのためのフレームワークであり、それはSTM32 ST、TI TM4に関与している、新しい唐npcx、マイクロチップは、ARMのCortex-M、皮質-M0、nds32ピア・アーキテクチャをカバーする、他の製品ラインをmec1322。ECは、クロスプラットフォーム、高性能ハードウェア抽象化を達成するためのユーザーのための統一された、高レベルの、シンプルなAPI呼び出しにカプセル化されたオペレーティング基盤となるプラットフォームごとに異なるだろう。 -
専門
あなたは、ECは間違いなくあなたのための優れた選択肢であることをブートし、ハードウェア管理(APなど)のシニアのSoCを、支援するために適切なプログラムを探しているなら!ECは、必要な機能の起動、電源管理、共通IOデバイスドライバなどを統合し、大幅に開発プロセスを簡素化することができます。あなたは、ノートブックで、より少数のアプリケーションを駆動する場合や、埋め込まれたMCUあまり一般的ではない(例えばタッチパッド、PD物理層、など)のためのこれらのライブラリは、ECはおそらく、これらのドライバが含まれていることです。 -
グーグル、はい!
ECを開発し、Googleチームによって維持しました。ECは、数百万台の製品をChromebookのための基本的なサポートを提供します。EC音響ユニットと閉ループテスト手順。ECはこれまでのところ、それがうまく有能レガシーBIOSとより良いを証明することがあり、その間、歴史の5年が経ちました。これらの点は、ECのコードの品質と堅牢性を確保する - これとは対照的に、それはとても安心ではありませんいくつかのケースで使用されるライブラリパッケージの個々の確立と維持を。また、ECのメンテナンスとまだ非常にアクティブな更新、およびチームは非常に肯定的なマージ要求に応じて変更されます。
......しかし、注意することは完璧です
あなたがすることはできません......
-
ヒープ
メモリ割り当てタスクスケジューラのECは、動的メモリの使用を許可していません。現在は、デバッグのために使用 - それにも関わらず、ECはまだ共有バッファ(共有メモリバッファ)を提供します。なぜなら不足MMU、高信頼性と低コストの、実際に、組み込みシステムの動的メモリを使用することが提案されていません。無効ヒープは基本的にメモリリークを排除する副作用を制限する少しは価値が言及ように見えるように、それは安定性に大きな後押しをもたらしました。 -
......その、共通の周辺機器ではありません
例えば(よりローエンドMCUとしてECのほとんどは、非常に多くのハイエンドMCU機能が実装されていないか、ECのハイレベルパッケージ(などegDAC、FSMC、イーサネット、)、Chromebookの機能について明らかに無用の一部もしませんでしたCAN)。あなたは、自分の周辺機器パッケージライブラリの一部を実装してではなく、ECのメモリ管理とリソースのロック機構との競合に注意する必要がある場合があります。 -
私は愛の心を投げないでください
あなたは関心がないとばかり、組込み開発のためのEC最も可能性が高いではない、あなたの最良の選択を、物事の仕事をしたい場合。ECはない完璧arduinoの、MBEDプラットフォームとして、汎用組込み開発のために設計されていない他の人気の生態と資源が豊富な - 実際には、EC開発の哀れなの使用に関する汎用的な情報があります。この手段は、あなたのすべてのECパッケージされていない機能や問題を解決するために、かなりの能力を達成する必要があること。
......と、私自身の小さなTucaoで(TL; DR)
-
マクロの増殖
(クァン)のアプリケーションマクロのEC単にアウトと呼ばれるには、(ビング)に神(XIN)を(歌った)、例えば、文の3種類は、あなたが信じることを敢えてすべてのGPIOマクロ機能がありますか?それは、この作業の効率を高めるために埋め込まれたランタイムシステムに知られているが、それは日常的であるが、私は、ソースコードを読んだとき、まだ[宣誓]をしたいです -
シンプルで簡単ではありません
ECは、野心的な願望がそのような他のプラットフォームをMBEDが、それはオリジナルデザインの任意のフレームを失っていないしていないが - 「オリジナル」ここに賛辞ではありません。ECは、列挙およびピン割り当てを宣言する宣言周辺に配列を使用し、主流のフレームワークは、マーベリックスタイルが比較され、関数宣言を使用します。ミッションステートメントとピン特に、複数のファイルが依存関係から外れて、保守上の考慮事項を増やす必要があり、別のファイルに書き込みに必要とされます。この設計は、宣言の少し味が、より優れた性能を有していてもよく、それは複数のタスクの簡素化、統一資源管理のために妥協することができそうです。そこ柔軟性のこの集中型の静的宣言スタイル損失は、コードの移植、さらにパッケージの難しさを増すことは疑いあり、学習の追加負担を作成します。 -
汚染レベルの機能アップ
ECパッケージには、私たちの初期化と設定の面倒な操作の多くを保存しますが、このようなビットまぶしいの構成と動作に基づいて進定数として、いくつかの迷惑な残留レベルの機能は、まだあります。何とか彼らはマクロECはしなかったの大面積を持っている、いくつかの簡単なマクロを追加することにより、これらの問題を取り除くことができます。もっと致命的なことは、さらに高レベルのパッケージにこれらのマクロの多くは地面アップから復興しない限り、私は完全にインターフェイスでこれらのマクロを排除するための方法を考えることはできません、実際には、大きな困難をもたらしたということです。
参考資料
-
アンオープンSourceEmbeddedコントローラ
ECは強く歴史や材料の概念の理解を開発することをお勧めします。JuxianのChromebookのコアファームウェアエンジニア肖像画、最も重要なことは、十分な砂の彫刻(あります -
(AB)独自のプロジェクトのためにGoogleのクロムECを使用して
ECは、共通の開発フレームワークを使用する方法に焦点を当てています。概念やAPIのいくつかは、簡単な説明をしたが、あまり詳細に -
2014クロームOSファームウェアサミット:クロームEC
これは、プレゼンテーションのGoogleの公式紹介ECです。フレーム構造、プロジェクトのディレクトリ構造については、基本的な概念のすべての詳細は、詳細に説明されているので、