スケジューリング機能の有効化
生成されたコードには、モデルで指定されたサンプル時間に基づいてアプリケーション コードを実行するスケジューリング コードが含まれます。ARM® Cortex®-R プロセッサは通常、アプリケーション コードのスケジューリングにオペレーティング システム (OS) を使用します。ここで示す例ではオペレーティング システム スケジューラを実装する方法を示しますが、同じ概念的な手順がベアメタル スケジューラにも適用されます。
1. 'reference' を指定して getOperatingSystem を呼び出して、参照 OperatingSystem オブジェクト os を Target オブジェクト tgt に対して使用します。
os = getOperatingSystem(tgt,'reference');
ターゲットを保存する前に、MATLAB® ワークスペースから OperatingSystem オブジェクト os を削除しないでください。
2. オペレーティング システム名を表示します。作成されるターゲットでは、参照ターゲット ARM® Cortex®-R に付属しているオペレーティング システムが使用されます。
os{1}.Name
ans =
'FreeRTOS'
メモ: OperatingSystem オブジェクトには、cell 配列としてアクセスする必要があります。
3. OperatingSystem オブジェクト os を Hardware オブジェクト hw にマッピングします。
map(tgt,hw,os);
4. ハードウェア 'TIRM46Lx2 Launchpad' でオペレーティング システム 'FreeRTOS' が使用されていることを確認します。
show(tgt);
TIRM46Lx2 Launchpad
Display Name TIRM46Lx2 Launchpad
RM46 TI Deployer 1
FreeRTOS 1
出力には、ハードウェア 'TIRM46Lx2 Launchpad' でオペレーティング システム 'FreeRTOS' が使用されていることが示されています。この事実は、ハードウェアの対応する位置に 1 が表示されることで示されています。
5. FreeRTOS コンポーネントを指すように、トークンを Deployer に追加します。token.Name = 'FREE_RTOS_SHRD_COMP_DIR';
token.Value = 'matlabshared.freertos.internal.getShrdCompRootDir';
deployerObj.Tokens{end+1} = token;
6. IncludePaths プロパティを '$(TARGET_ROOT)/include' に設定して、コンパイラのインクルード パスを BuildConfiguration に追加します。
buildConfigurationObj.IncludePaths{end+1} = '$(TARGET_ROOT)/include';
ソース、ヘッダー、およびライブラリ ファイルが $(TARGET_ROOT)/include フォルダー内にない場合は、必要なすべてのパスの cell 配列を IncludePaths に割り当てます。
メモ: $(TARGET_ROOT) は、ARM® Cortex®-R ハードウェア ボードのターゲットのルート フォルダーを表すトークンであり、コード生成ソフトウェアによって解決されます。このトークンは、Create the Frameworkのタスクで自動的に割り当てられました。
7. Simulink® モデルのコードが生成された後に呼び出す MATLAB® 関数を定義します。
deployerObj.AfterCodeGenFcn = 'matlabshared.target.tirm46.onAfterCodeGenHook_FreeRTOS';
これで、'matlabshared.target.tirm46.onAfterCodeGenHook_freeRTOS' 関数は、ターゲットのオペレーティング システムとして FreeRTOS を指定し、事前定義の HALCoGen プロジェクト ファイルを使用し、TIRM46L852 デバイス構成向けの固有のソース ファイルを生成します。Activate the Application Deployment Featureで定義された以前の freeRunning 構成は上書きされています。
8. ターゲットを説明する情報をそのフレームワークに保存します。saveTarget(tgt);
9. FreeRTOS 固有のヘッダー ファイル、HALCoGen プロジェクト ファイル、FreeRTOS 固有の onAfterCodeGenHook_FreeRTOS.m ファイル、およびその他のファイルを TARGET_ROOT/src フォルダーにコピーします。
copyfile(fullfile(codertarget.arm_cortex_r.internal.getSpPkgRootDir(),...
'arm_cortex_r_examples', 'scheduler'),...
fullfile(tgt.Folder),'f');
10. スケジューラが正しく機能することをテストします。
testTarget(tgt,'scheduler')
テストが完了すると、結果の概要が表示されます。テストが PASSED の場合、次の機能の追加に進むことができます。それ以外の場合、テストが FAILED であれば、テストの概要の下にテスト診断ログへのリンクが表示されます。
メモ: エクスターナル モード機能がターゲットに追加されるまで、スケジューラは完全にはテストできず、テストで INCOMPLETE が返されます。
モデルが正常にビルドされることの確認
MATLAB® の [ホーム] タブで、[新規]、[Simulink モデル] を選択します。モデルの既定の名前は untitled です。[ファイル]、[名前を付けて保存] をクリックし、モデルを test として保存します。
モデルで [シミュレーション]、[モデル コンフィギュレーション パラメーター] を選択します。
[コンフィギュレーション パラメーター] ダイアログ ボックスで [ハードウェア実行] タブを選択します。
[ハードウェア ボード] を、登録したハードウェア (たとえば、TIRM46Lx2 Launchpad) に設定します。
[ソルバー] タブで、周期的なサンプル時間のタスク モードを [自動] に設定します。
[すべてのパラメーター] タブで、[ブロック削減] を見つけて無効にします。
[MAT ファイルのログ] を見つけて有効にします。
MATLAB® の [ホーム] タブで [Simulink® ライブラリ] を選択します。
Simulink® ライブラリで [Sources] を開き、Constant ブロックをモデルに追加します。Constant ブロックをダブルクリックし、[サンプル時間] を 1 に設定します。
別の Constant ブロックをモデルに追加します。Constant1 ブロックをダブルクリックし、[サンプル時間] を 2 に設定し、[定数値] を 2 に設定します。
Simulink® ライブラリで Sinks を開き、To Workspace ブロックをモデルに追加します。ブロックをクリックし、[保存形式] を [配列] に設定します。
この To Workspace ブロックをコピーしてモデルに貼り付けます。
Constant ブロックを To Workspace に接続し、Constant1 と To Workspace1 を接続します。
モデルをビルドします。ビルドが完了すると、コードがハードウェア上で実行されます。コードが実際に実行されるかどうかを検証する必要があります。検証に使用する手法は、ハードウェアに固有です。