メインコンテンツ

スケジューリング機能の有効化

生成されたコードには、モデルで指定されたサンプル時間に基づいてアプリケーション コードを実行するスケジューリング コードが含まれます。ARM® Cortex®-M プロセッサは通常、アプリケーション コードのスケジューリングにベアメタル スケジューラを使用します。ここで示す例ではベアメタル スケジューラを実装する方法を示しますが、同じ概念的な手順がオペレーティング システム スケジューラにも適用されます。

  1. スケジューラの名前 (例: 'My Baremetal Scheduler') を指定して addNewBaremetalScheduler を呼び出すことで、新しい OperatingSystem オブジェクト os を作成して Target オブジェクト tgt に追加します。

    scheduler = addNewBaremetalScheduler(tgt,'My Baremetal Scheduler');

    ターゲットを保存する前に、MATLAB® ワークスペースから Baremetal Scheduler オブジェクト scheduler を削除しないでください。

    メモ

    ARM Cortex-M ターゲットのベース ターゲットに付属しているスケジューラは、GNU ツールチェーンでのみ使用できます。

  2. オペレーティング システム '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 が表示されることで示されています。

  3. BaremetalScheduler オブジェクト schedulerHardware オブジェクト hw にマッピングします。

    map(tgt,hw,scheduler);
  4. ベアメタル スケジューラ '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 が表示されることで示されています。

  5. スケジューラの名前 (例: 'My BaremetalScheduler') を指定して addNewBaremetalSchedular を呼び出すことで、新しい BaseRateTrigger オブジェクト baseRateTrigger を作成して BaremetalScheduler オブジェクト scheduler に追加します。

    baseRateTrigger = addNewBaseRateTrigger(scheduler,'My Base Rate Trigger');

    ターゲットを保存する前に、MATLAB ワークスペースから BaseRateTrigger オブジェクト baseRateTrigger を削除しないでください。

  6. ハードウェアで必要なように、BaseRateTrigger オブジェクト baseRateTrigger のプロパティを設定します。たとえば、ConfigurationFcn プロパティを設定することで、基本レート トリガーを構成するソース コード関数を設定できます。

    baseRateTrigger.ConfigurationFcn = 'myBaseRateTrigger_ConfigFcn(modelBaseRate)';

    コンフィギュレーション関数は通常、モデルの基本レートに対応するレートで、タイマーなどのハードウェア割り込みを設定します。その目的のため、関数はモデルの基本レートをパラメーター modelBaseRate として受け取ります。生成されたコードは、その main 関数からコンフィギュレーション関数を呼び出します。

  7. 同様に、BaseRateTrigger オブジェクトのプロパティ EnableInterruptFcn および DisableInterruptFcn を設定して、基本レート トリガーの割り込みを有効および無効にする関数を登録します。

    baseRateTrigger.EnableInterruptFcn = 'myBaseRateTriggerInterruptEnable()';
    baseRateTrigger.DisableInterruptFcn = 'myBaseRateTriggerInterruptDisable()';
    
  8. ターゲットを説明する情報をそのフレームワークに保存します。

    saveTarget(tgt);
  9. スケジューラが正しく機能することをテストします。

    testTarget(tgt,'scheduler')

    テストが完了すると、結果の概要が表示されます。テストが PASSED の場合、次の機能の追加に進むことができます。それ以外の場合、テストが FAILED であれば、テストの概要の下にテスト診断ログへのリンクが表示されます。

    メモ

    エクスターナル モード機能がターゲットに追加されるまで、スケジューラは完全にはテストできず、テストで Incomplete が返されます。

モデルが正常にビルドされることの確認

  1. MATLAB の [ホーム] タブで、[新規]、[Simulink モデル] を選択します。モデルの既定の名前は untitled です。[ファイル]、[名前を付けて保存] をクリックし、モデルを test として保存します。

  2. モデルで [シミュレーション]、[モデル コンフィギュレーション パラメーター] を選択します。

  3. [コンフィギュレーション パラメーター] ダイアログ ボックスで、[ソルバー] を選択します。

  4. [タイプ] リストで [固定ステップ] を選択します。[ソルバー] リストで [自動] を選択します。

  5. [コンフィギュレーション パラメーター] ダイアログ ボックスで [ハードウェア実行] タブを選択します。

  6. [ハードウェア ボード] を、登録したハードウェア (たとえば、'My ARM Cortex M Board') に設定します。

  7. [ソルバー] タブで、周期的なサンプル時間のタスク モードを [自動] に設定します。

  8. [最適化] タブで、[ブロック削減] をクリアします。

  9. [コード生成]、[インターフェイス] タブで、[MAT ファイルのログ] を選択します。[OK] をクリックします。

  10. MATLAB の [ホーム] タブで [Simulink® ライブラリ] を選択します。

  11. Simulink ライブラリで [Sources] を開き、Constant ブロックをモデルに追加します。Constant ブロックをダブルクリックし、[サンプル時間] を 1 に設定します。

  12. 別の Constant ブロックをモデルに追加します。Constant1 ブロックをダブルクリックし、[サンプル時間]2 に設定し、[定数値]2 に設定します。

  13. Simulink ライブラリで [Sinks] を開き、To Workspace ブロックをモデルに追加します。ブロックをクリックし、[保存形式]Array に設定します。

  14. この To Workspace ブロックをコピーしてモデルに貼り付けます。

  15. Constant ブロックを To Workspace に接続し、Constant1To Workspace1 を接続します。

  16. モデルをビルドします。ビルドが完了すると、コードがハードウェア上で実行されます。コードが実際に実行されるかどうかを検証する必要があります。検証に使用する手法は、ハードウェアに固有です。