2016-01-11 7 views
7

ドキュメントを読んで理解したところから、AdaリアルタイムモジュールはOSから完全に分離して動作します。基礎となるOSとリソースマネージャを持たずに並行性を持つことは可能です。 Adaは、タスクのディスパッチ、時間管理、タスク状態の遷移、リスト管理、タスク優先度、ロックポリシー、スケジューリングポリシー、ISR、タスク間通信などを処理します。Adaはリアルタイムで基本オペレーティングシステムが必要ですか?

もしそうなら、Adaリアルタイムモジュールは、時間オペレーティングシステム?

+0

SSH、CAN、USB、TPC、ファイルシステム、GUIなどの通信プロトコルのような機能のAdasサポートはまだ見つかりませんでした。この場合、VXWorksのような基盤となるRTOSが考えられます。私は正しく理解しましたか? – nFu9DT

+0

私は非常に(一般的な)答えを出しました。特定の特定のターゲット、特定のRTOS、特定のアプリケーション領域(完全なタスク、複数のCPU、公式に証明可能、航空宇宙、Arduinoなど)に集中する場合は、上記のより具体的な質問を自由に記入してください。 –

+2

ISRは保護されたオブジェクトAda> = 1995. –

答えて

10

はいといいえ両方とも。

Adaプログラムが必要とするのは、独自のRTS(ランタイムシステム)です。これは(最近の別の質問では)数百キロバイトに膨らんだ膨大なコードです。これはAdaの「効率」などにはまったく反映されていません。プログラムのサイズに関係なく、かつ重要なプログラム(例:同時実行性を伴います。他のソリューションに追加するライブラリと競合します。

問題は - そのランタイムシステムはどのように実装されていますか?スタンダードモードで標準の既製のAdaコンパイラ(Gnat)を使用する場合は、低レベルの詳細を処理するために、 "pthreads"(Posixスレッド)パッケージの上にAda並行処理機能をレイヤーするRTSがあります。それは明らかにOSの上に重ねられています。 Here's a detailed description.

しかし、RTOSを使用するか、またはベアメタルCPU上のAda RTS自体によって同じ機能を提供することもできます(並行性を犠牲にして) 1Kのメモリを内蔵したマイクロコントローラをターゲットにしています。

--RTS=path/to/my/rtsオプションをbuildコマンド(gnatmakeなど)に追加することで、別のRTS用のAdaプログラムを作成できます。

工業用には、Adacore自身がcommercial support for VXWorksを提供しています。

RTS for embedded ARM CPUsの例が、FreeRTOSまたは他のRT OSに重ねられています。 (優秀supporting blogここに)。これらは、完全なAdaタスキング機能を提供するものではなく、小規模なシステム実装(12K程度のARM Thumbコードなど)、およびformal proof of correctness(RAVENSPARK)に適したRAVENSCARプロファイルなどの選択されたサブセットを提供することがあります。

これらは部分的にはopen source community effortなので、作業が断片化され、コメントに記載されているすべての通信プロトコルを提供するわけではありませんが、Cライブラリへの簡単なインターフェイスにより、欠落したコンポーネントに対してAdaラッパーを比較的簡単に追加できます。残りの拠点をカバーするためにコミュニティが追加の援助を歓迎すると私は思っています!

いくつかのプロトコルが利用できますが、Adaの賞賛を唱える人は稀ですが、広範に宣伝されておらず、検索するには多少の掘り下げが必要です。たとえば、いくつかの産業用ツールで使用されているMBUS protocolとインターフェイスするライブラリを次に示します。 same authorには、libusb bindingの暫定版もあります。

最小限のRTSでOSを実行しないAdaを実行するメカニズムに興味がある場合は、OSDev Wikiの"Ada Bare Bones"ページが面白いかもしれません。これはi386ですが、類似の「裸の骨」は、AVRMSP430マイクロコントローラのRTSが存在します。

This bookは、its own websiteに関するチュートリアル資料とともに、他の有用なリソースのようです。

さらに理論的な治療のためには、John McCormick's book "Building parallel, real time and embedded applications in Ada"が有益です。

もう1つのリンク:GUIについて言及すると、あなたのアプリケーションがどのブラウザでも閲覧可能なWebページを提供するAdaで書かれたthe Gnoga frameworkを見ることをお勧めします。

+1

サイズ変更について - Adaのタスクを使用する小さなArduino Dueプログラム、FreeRTOSの遅延と割り込みが29kで発生しました(そのうちの15kはスタックスペースがあらかじめ割り当てられていました)。 –

+0

素晴らしい。並列Adaプログラムはオペレーティングシステムなしで実行できますが、タスキングのセマンティクスはランタイムシステムに含める必要があります。ブライアンに感謝します。 さらに読む:http://www.iuma.ulpgc.es/users/jmiranda/gnat-rts/node14.htm – nFu9DT

+0

また、お勧めの本をありがとう。その本の第9章からのプレビューはあなたがすでに答えた私の最初の質問に対する答えを持っています。それはまさに私が探しているもので、コピーが途中にあります。 – nFu9DT

関連する問題