Top -> FreeRtos -> designtips3.html | ||||||||||||||
ソリューション # 3 RAM 使用量の節約 |
||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
<<< | >>> | ||||||||||||||
ノート:このページは FreeRTOS V4.0.0 の導入以降更新されてません。 V4.0.0 は斬新なソリューションの提供であるコルーチンのコンセプトを紹介します。 タスクとコルーチンのドキュメンテーションは多くのインフォメーションを提供する。 |
||||||||||||||
概 要 | ||||||||||||||
充分な RAM とプロセサ・リソースを持っている組み込みコンピュータのクリーンなデザインを生み出す。ソリューション#3では機能を分割しタスク化する事によってRAM 使用量を減ら事を試みる。 | ||||||||||||||
実 装 | ||||||||||||||
ソリューション # 3機能タスクと優先性 | ||||||||||||||
ソリューション # 3機能タスクと優先性 |
||||||||||||||
実 装 | ||||||||||||||
ソリューション # 3機能タスクと優先性 前に例題でアプリケーションのタイミング必要条件がどのように3つのカテゴリに分かれ得るか見ました:
|
||||||||||||||
オペレーションのコンセプト | ||||||||||||||
ソリューション # 1で示したように、機能タスクを中間の優先度付けすることは無限ループ実装に対する3つの重要な利点を持っています:
プラントコントロールタスクは、最高優先順位タスクとして、それが必要とする時いつでも処理時間を割り当てられる。 もし必要であるなら、それは低いあるいは中間の優先度タスクをプリエンプト(事前に制止)するでしょう。 これらのアプリケーションタスクがブロック状態になるとアイドル・タスクは実行される。 アイドル・タスクはプロセッサをパワーセーブモードへ置くオプションを持っています。 |
||||||||||||||
スケジューラコンフィギュレーション | ||||||||||||||
評 価 | ||||||||||||||
|
||||||||||||||
結 論 | ||||||||||||||
これは、限られたRAMを搭載したシステムのためのよい解決策になることができますが、それでも、プロセッサを集中的に。システムの予備的容量は、将来の拡張を可能にするためにチェックする必要があります。 | ||||||||||||||
|
||||||||||||||
例 | ||||||||||||||
この例は前の例題アプリケーションの部分的な実装です。 FreeRTOS API を使います。 |
||||||||||||||
プラント・コントロール・タスク | ||||||||||||||
プラントコントロールタスクはソリューション #2で記述とまったく同じです。 | ||||||||||||||
組み込み WEB サーバ・タスク | ||||||||||||||
これは単純な機能で、アイドル・タスクから呼び出され、ランから終了まで実行します。 | ||||||||||||||
中間の優先度タスク | ||||||||||||||
中間の優先どタスクは次の擬似コードによって表される。
#define DELAY_PERIOD 4 #define FLASH_RATE 1000 void MediumPriorityTask( void *pvParameters ) { xQueueItem Data; portTickType FlashTime; InitialiseQueue(); FlashTime = xTaskGetTickCount(); for( ;; ) { do { // A if( xQueueReceive( xCommsQueue, &Data, DELAY_PERIOD ) ) { ProcessRS232Characters( Data.Value ); } // B } while ( uxQueueMessagesWaiting( xCommsQueue ) ); // C if( ScanKeypad() ) { UpdateLCD(); } // D if( ( xTaskGetTickCount() - FlashTime ) >= FLASH_RATE ) { FlashTime = xTaskGetTickCount(); UpdateLED(); } } // Should never get here. return 0; } |
||||||||||||||
上記のコード内のラベルは次を参照のこと:
|
||||||||||||||
|
||||||||||||||
NEXT >>> ソリューション #4: プロセッサオーバーヘッドを減らすこと | ||||||||||||||
Top に戻る | ||||||||||||||