19.1 オペレーティングシステムのご紹介
UC / OS-IIは、それぞれ優先順位0から0は最高の優先順位である63、64個のにタスクをサポートすることができます。63は最も低いレベルで、システムは、4つの最も優先度の高いタスク四最低優先度のタスク、56すべてのユーザーのために使用することができるタスクの数を保持します。
19.1.1 オペレーティングシステムのご紹介
オペレーティングシステムは何ですか
オペレーティングシステムは、コンピュータのコンピュータのハードウェアとソフトウェアのリソース管理および制御することにあるプログラムが直接実行される基本的なシステムソフトウェアの「ベアメタル」に、他のソフトウェアは、オペレーティングシステムをサポートするために実行する必要があります。間のAPP の間およびハードウェア。
19.1.1 一般的なオペレーティングシステム
一般的なオペレーティングシステム:
IOS(アップル)、アンドロイド() 、 Windowsの、 Linuxの、シンビアン、U COS 、 FreeRTOS 、(で行われたRT-T 中国)、 VxWorksの、 eCosのように、と。
リアルタイムオペレーティングシステム(RTOS)
UCOS(無料、商業登記が必要学習)、 FreeRTOS 、(で行われたRT-T 中国)、 VxWorksの、 eCosの
時間の長さは、各タスクを適切タスクのミッション要求の長さに応じて調整する基本を与えます。タスクとタスクを直接スイッチには、対応するルールがあります。
オペレーティング・システムの共有
Windowsの---- 2000年前に、前のLinux 2.6 ----
各タスクに固定された時間内にこのタスクがアイドル状態になっている場合に長い、時分割オペレーティングシステムのため、時間の固定長を割り当てまたは委任に良い長い時間を与えています。
セミリアルタイム・オペレーティング・システム
---- 7/8/10のWindows 、 Linuxの2.6 ---- 後
19.1 U COS 導入オペレーティングシステム
19.1.1 オペレーティングシステムのスケジューリングの原則
UCOSオペレーティングシステムのスケジューリングの原則は以下のとおりです。優先度のタスクのスケジューリング原則。小さなタスクの優先順位番号、優先度の高いタスク。
注意事項:各タスクは一つだけ優先され、異なるタスクの優先順位番号を同じにすることはできません。
19.1.1 オペレーティングシステムのプログラム構造
何のオペレーティングシステムが存在しない場合
プロジェクト全体でのベアメタル、唯一の死のサイクルは、この死のサイクルがあり、main関数。他の場所には、無限ループがあるかもしれませんが、終了条件を持っている必要があります。
ときに、オペレーティングシステム
無限ループ以上を持つことができ、各タスクは無限ループを持っているオペレーティングシステム全体のプロジェクトは、主な機能には、無限ループではありません。
ポイントに注意してください。オペレーティング・システムは、メインの2つの点を完了する必要があります。①オペレーティングシステムのハートビートのリズムアップセットを、②タスクを作成する(この作業が正常に作成する必要があります)。
19.1.1 オペレーティングシステムタスクのスケジューリング
タスクのスケジューリング:スケジューリングが発生したときです。
タスクのスケジューリングは、両方のケースで発生します。
心臓は、オペレーティング・システムに到達するために打ちます。ハートビートが呼び出されティック。U- COSは、専用オペレーティングシステムのハートビート機能を持っていますOSTimeTick();
OS_Schedオペレーティングシステムコールのためのプログラム・コード();場合、タスクスケジューリング機能発生。OS_Sched():タスクのスケジューリング機能と呼ばれます。
注:私たちは、タスクスケジューリング機能は、オペレーティングシステムコール、直接呼び出すことができません。プログラマは、この関数が行います呼び出す UCOSオペレーティングシステムがクラッシュを。
注意点 ①:オペレーティングシステムタスクスケジューラタスクの切り替えが発生しないことがあり、特定のタスクのスケジューリングを生成するために必要なタスク切り替え。
使用上の注意 ②:オペレーティングシステムを解放するために、優先度の高いタスクを持っている必要がありますC PU制御関数呼び出しを。
19.1.1 オペレーティングシステムのタスクステータス
オペレーティングシステムUCOSは、5つの状態のタスクがあります停止: / スリープ、実行する準備ができて、一時停止/ 待機、割り込みが。ときにのみ作動状態にタスクがプログラムコードでタスクを実行することができます。
停止:タスクが削除されます。
スリープ:現在、タスクの実行ではない状態を実行する準備ができて何のタスクがありません。
レディ:実行中の条件が満たされる必要があるタスクは、準備が整いました。
実行:タスクが実行されています。
保留中:タスクは、特定の条件が発生するのを待つ必要があり、他のタスクは、このタスクを掛けることができます。
待っ:遅延が関連します。
割り込み:イベント割り込みプログラムは、CPUがオペレーティング・システム割り込み、割り込みサービスルーチンに行く、起こりました。
19.1.1 オペレーティングシステムの割り込みタスク
割り込みステータスは、次の点に注意する必要があります
実行している状態から)、割り込み状態がOSIntEnter(関数を呼び出す必要があり入る;この関数は、現在の割り込みサービスルーチンのオペレーティングシステムに伝えるために使用される機能。
割り込みステータス出口機能OSIntExitから動作状態に入る前に呼び出さなければなりません();この関数は、オペレーティングシステムに通知するために使用される関数は、現在のプログラムが中断され終了します。
割り込みからのプログラムが終了するには、オペレーティングシステムは、タスクに戻り、その後、必ずしも元のタスクには戻りません。
1 / * 2 機能:初期システムタイマーティック 3 関数のパラメータ:任意のMS 4 ファンクション戻り値:なし 5 備考:----割り込みオペレーティングシステムのハートビート制御 6 李ゴング:OF 7 時間:2018- 09から19 。8 * / 9 ボイドSysTick_Init(U16 n_ms) 10 { 11。 SysTick-は> CTRL = 0 ; // クリア構成 12 // 選択されたクロックソース21MHz 13は、 14 SysTick-> VAL = 0 ; 15 16 SysTick-> LOAD n_ms * = 21000 ; 17 18はある | =(SysTick-> CTRL 0X1<< 1); //が有効になっている割込みモジュールレベルを開く 。19 20である SysTick-> CTRL | =(0X1 << 0); // オープンダウンカウンタ-有効 21 } 22である 23がある / * 24 機能:システムティックタイマ割り込みサービス機能 25個の 関数のパラメータ:なし 26 関数の戻り値:なし 27 備考:割り込みにオペレーティングシステムを教えてくれ、心の割り込み機能は、ビート 28 著者:李ゴング 29 時間:2018年9月19日 30 * / 31 のボイド SysTick_Handler(ボイド) 32 { 33は OSIntEnter(); // 割り込みに 34である 35 IF(SysTick-> CTRL&(0X1 << 16 )) 36 { 37 [ OSTimeTick(); // ハートビート関数 38である } 39 40 ; OSIntExit()// 割り込み 41 } 42が 43である / * 44 主な機能:機能 45 関数パラメータ:なし 46 関数の戻り値:整数 47 注:使用UCOS OS 48 49 * / 50 INTがメイン(ボイド) 51が 、{ 52である //はシステムタイマーティック初期化 53である (SysTick_Init 1000年 /OS_TICKS_PER_SEC); 54である //はOS初期化 55 )(OSInitを、 56である // タスクを作成し 57である OSTaskCreate(os_start_task、NULL、&OS_STK_START_TASK_SIZE [OS_STK_START_TASK_LENGTH - 1 ]、OS_START_TASK_PRIO); 58 // オペレーティングシステムの起動 59 OSStart(); 60 / / タスクの実行は、無限ループの作成に失敗した場合は 61であり ながら、(1 ) 62である { 63である ; 64 } 65 }
1 INT8U OSTaskCreate(ボイド (*タスク)(ボイド * p_arg)、 2 ボイド * p_arg、 3。 OS_STK * PTOS、 4。 INT8U PRIO) 5。 機能:タスクを作成し 6つのファンクションのパラメータ:ボイド (*タスク)(ボイド * p_arg ):関数がタスクを格納するために使用される関数ポインタ、 7。 ボイド * p_arg:タスクの形状パラメータ伝達関数パラメータはNULLには見えない使用して送信された場合 8。 OS_STK * PTOS:スタックタスクスタックタスク 9。 INT8U PRIO:タスクの優先度号 10 関数の戻り値:OS_ERR_NONE:成功作成手段は、そうでない場合、それは失敗を示し 11 を使用すると: 12は OSTaskCreate(os_start_task、NULL、&OS_STK_START_TASK_SIZE [OS_STK_START_TASK_LENGTH - 1 ]、OS_START_TASK_PRIO); 13で 具現化タスク: 14 の#define OS_START_TASK_PRIO 10 15 の#define OS_STK_START_TASK_LENGTH 256 16 OS_STK OS_STK_START_TASK_SIZE [OS_STK_START_TASK_LENGTH]; 17。 18は、 / * 19。 機能:スタートタスク 20個の 関数のパラメータ:ユニバーサルポインタ 21 関数の戻り値:なし 22 注: 23 の:リチウム功 24 時間:2018年9月19日 25 * / 26がなく ボイド os_start_task(ボイド * p_arg) 27 { 28 29 ながら、(1 ) 30 { 31 32 } 33 }
19.1 U COS オペレーティングシステム管理タスク
19.4.1ucosタスク
タスク制御ブロック(底、制御なし)、タスクの優先度、タスクのスタック、タスク機能。
タスク制御ブロックは:UCOSは、このタスクのためにいくつかのメモリ空間を割り当てます、タスクを作成するときは、このメモリ空間は、タスク制御ブロックと呼ばれています。優先順位、タスクのステータス、タスクのスタックアドレス割り当て機能アドレス、タスク:タスク制御ブロックは、ジョブに関する情報を記録します。
タスクの優先度:各タスクにはUCOSでユニークな優先順位、優先順位だけで私たちの優先度のタスクを持っているユニークな、それは定期的UCOSタスクを実行することで、タスクを識別します。
タスクスタック:タスクの切り替えタスクが状態(ローカル変数に切り替える前に、実行)を保存することです。
タスク機能:作業が行われる際にタスクが予定されています。
19.1 U COS タスク間通信オペレーティング・システム
19.1.1 セマフォ
(そのコードの保護は、他のプロセスによって奪われることはありません)
、共有リソースを保護するために:役割を。
セマフォ:セマフォの値がセマフォプラス1をリリースしているように、グローバル変数に相当するでUCOSオペレーティングシステムなので、1つによってセマフォセマフォ値を使用します。最小値は0です。
19.1.1 メッセージングメールボックス
19.1.1 メッセージキュー
19.1.1 ミューテックス
19.1 U COS オペレーティング・システム・イベント・フラグ・グループ