スケジューリング機能の有効化
生成されたコードには、モデルで指定されたサンプル時間に基づいてアプリケーション コードを実行するスケジューリング コードが含まれます。ARM® Cortex®-M プロセッサは通常、アプリケーション コードのスケジューリングにベアメタル スケジューラを使用します。ここで示す例ではベアメタル スケジューラを実装する方法を示しますが、同じ概念的な手順がオペレーティング システム スケジューラにも適用されます。
スケジューラの名前 (例:
'My Baremetal Scheduler') を指定してaddNewBaremetalSchedulerを呼び出すことで、新しいOperatingSystemオブジェクトosを作成してTargetオブジェクトtgtに追加します。scheduler = addNewBaremetalScheduler(tgt,'My Baremetal Scheduler');ターゲットを保存する前に、MATLAB® ワークスペースから
Baremetal Schedulerオブジェクトschedulerを削除しないでください。メモ
ARM Cortex-M ターゲットのベース ターゲットに付属しているスケジューラは、GNU ツールチェーンでのみ使用できます。
オペレーティング システム
'My Baremetal Scheduler'がターゲットに追加されていることを確認します。show(tgt);
My ARM Cortex M Board Display Name My ARM Cortex M Board My New Deployer 1 My Baremetal Scheduler 0
ベアメタル スケジューラ
'My Baremetal Scheduler'がターゲットに追加されていることが出力で示されています。ただし、このスケジューラはハードウェア'My ARM Cortex M Board'には使用されていません。この事実は、そのハードウェアに対応する位置に0が表示されることで示されています。BaremetalSchedulerオブジェクトschedulerをHardwareオブジェクトhwにマッピングします。map(tgt,hw,scheduler);
ベアメタル スケジューラ
'My Baremetal Scheduler'がハードウェア'My ARM Cortex M Board'に使用されていることを確認します。show(tgt);
My ARM Cortex M Board Display Name My ARM Cortex M Board My New Deployer 1 My Baremetal Scheduler 1
ベアメタル スケジューラ
'My Baremetal Scheduler'がハードウェア'My ARM Cortex MBoard'に使用されていることが出力で示されています。この事実は、そのハードウェアに対応する位置に1が表示されることで示されています。スケジューラの名前 (例:
'My BaremetalScheduler') を指定してaddNewBaremetalSchedularを呼び出すことで、新しいBaseRateTriggerオブジェクトbaseRateTriggerを作成してBaremetalSchedulerオブジェクトschedulerに追加します。baseRateTrigger = addNewBaseRateTrigger(scheduler,'My Base Rate Trigger');ターゲットを保存する前に、MATLAB ワークスペースから
BaseRateTriggerオブジェクトbaseRateTriggerを削除しないでください。ハードウェアで必要なように、
BaseRateTriggerオブジェクトbaseRateTriggerのプロパティを設定します。たとえば、ConfigurationFcnプロパティを設定することで、基本レート トリガーを構成するソース コード関数を設定できます。baseRateTrigger.ConfigurationFcn = 'myBaseRateTrigger_ConfigFcn(modelBaseRate)';コンフィギュレーション関数は通常、モデルの基本レートに対応するレートで、タイマーなどのハードウェア割り込みを設定します。その目的のため、関数はモデルの基本レートをパラメーター
modelBaseRateとして受け取ります。生成されたコードは、そのmain関数からコンフィギュレーション関数を呼び出します。同様に、
BaseRateTriggerオブジェクトのプロパティEnableInterruptFcnおよびDisableInterruptFcnを設定して、基本レート トリガーの割り込みを有効および無効にする関数を登録します。baseRateTrigger.EnableInterruptFcn = 'myBaseRateTriggerInterruptEnable()'; baseRateTrigger.DisableInterruptFcn = 'myBaseRateTriggerInterruptDisable()';
ターゲットを説明する情報をそのフレームワークに保存します。
saveTarget(tgt);
スケジューラが正しく機能することをテストします。
testTarget(tgt,'scheduler')テストが完了すると、結果の概要が表示されます。テストが
PASSEDの場合、次の機能の追加に進むことができます。それ以外の場合、テストがFAILEDであれば、テストの概要の下にテスト診断ログへのリンクが表示されます。メモ
エクスターナル モード機能がターゲットに追加されるまで、スケジューラは完全にはテストできず、テストで
Incompleteが返されます。
モデルが正常にビルドされることの確認
MATLAB の [ホーム] タブで、[新規]、[Simulink モデル] を選択します。モデルの既定の名前は
untitledです。[ファイル]、[名前を付けて保存] をクリックし、モデルをtestとして保存します。モデルで [シミュレーション]、[モデル コンフィギュレーション パラメーター] を選択します。
[コンフィギュレーション パラメーター] ダイアログ ボックスで、
[ソルバー]を選択します。[タイプ] リストで
[固定ステップ]を選択します。[ソルバー] リストで[自動]を選択します。[コンフィギュレーション パラメーター] ダイアログ ボックスで
[ハードウェア実行]タブを選択します。[ハードウェア ボード] を、登録したハードウェア (たとえば、
'My ARM Cortex M Board') に設定します。[ソルバー]タブで、周期的なサンプル時間のタスク モードを [自動] に設定します。[最適化]タブで、[ブロック削減] をクリアします。[コード生成]、[インターフェイス] タブで、[MAT ファイルのログ] を選択します。[OK] をクリックします。
MATLAB の [ホーム] タブで [Simulink® ライブラリ] を選択します。
Simulink ライブラリで [Sources] を開き、Constant ブロックをモデルに追加します。Constant ブロックをダブルクリックし、[サンプル時間] を
1に設定します。別の Constant ブロックをモデルに追加します。
Constant1ブロックをダブルクリックし、[サンプル時間] を2に設定し、[定数値] を2に設定します。Simulink ライブラリで [Sinks] を開き、To Workspace ブロックをモデルに追加します。ブロックをクリックし、[保存形式] を
Arrayに設定します。この To Workspace ブロックをコピーしてモデルに貼り付けます。
Constant ブロックを To Workspace に接続し、Constant1 と To Workspace1 を接続します。
モデルをビルドします。ビルドが完了すると、コードがハードウェア上で実行されます。コードが実際に実行されるかどうかを検証する必要があります。検証に使用する手法は、ハードウェアに固有です。