スタートガイド
ARM® Cortex®-M マイクロコントローラ用の MDK バージョン 5 で
アプリケーションを作成する

2

序章

本書にある情報は、予告なく変更される場合があり、また、製造者の確約を表明するものではありません。本書に記載のソフトウェアは、使用許諾契約
または機密保持契約に基づき提供されており、当該契約の条件に従う場合のみ使用またはコピーが可能です。特に使用許諾契約または機密保持契約で許可されている場合を除き、本ソフトウェアをいかなる媒体にコピーすることも違法です。購入者はバックアップ目的で本ソフトウェアのコピーを 1 部
のみ作成できます。本書は、いかなる形態またはいかなる方法においても、電子的なものであれ機械的なものであれ、写真コピー、レコーディングまたは情報記憶および検索装置などを含め、書面による許可がなければ、購入者の個人的な使用以外の目的には、一切複製または送信できません。
Copyright © 1997-2015 ARM Germany GmbHAll rights reserved.

Keil®、µVision®、Cortex®、CoreSight™ および ULINK™ は ARM Germany Gmb
H および ARM Ltd. の商標または登録商標です。
Microsoft® および Windows™ は、Microsoft 社の商標または登録商標です。
PC® は、IBM 社の登録商標です。

注
本書は、Microsoft Windows、ハードウェア、Cortex®-M プロセッサの命令
セットに精通している読者を対象に作成しています。

本書では、記述の正確を期すため、また、参照されている個人、法人および商標の適切なクレジット表示をするため、あらゆる努力がなされています。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

序章
ARM® Keil® からご利用いただける MDK バージョン 5 マイクロコントローラ
開発キットをご利用いただき、ありがとうございます。Cortex-M プロセッ
サベースの組み込みアプリケーションを開発するための最適なソフトウェア
ツールを提供するために、当社ではソフトウェアエンジニアリングを簡単で生産性の高いものにするためのツールを設計しています。ARM では、ULINK™
デバッグ/トレースアダプタや幅広い評価ボードなどの補完製品もご用意しております。MDK は、さまざまなサードパーティ製ツール、
スタータキット、デバッグアダプタを使用して拡張することができます。

章の概要
本書では、まず MDK のインストールから説明し、ソフトウェアコンポーネントと、プロジェクトを開始してからハードウェアのデバッグを行うまでの完全なワークフローについて説明していきます。本書は以下の章から構成されています。
MDK の紹介 – MDK コアやソフトウェアパックの概要について、そしてサンプ
ルプロジェクトを使用した製品のインストールについて説明します。
CMSIS – Cortex-M ベースのマイクロコントローラ上で実行される組み込み
アプリケーション用のソフトウェアフレームワークです。ソフトウェアの再利用を簡単に行うための一貫したソフトウェアインタフェースとハードウェ
ア抽象化レイヤが揃っています。
ソフトウェアコンポーネント Compiler（コンパイラ） – さまざまな標準 I/O チャネルの I/O 関数のターゲット変更について説明します。
アプリケーションを作成する – CMSIS とデバイス関連ソフトウェアコン
ポーネントを使用してプロジェクトを作成および変更する方法をご案内します。実践型チュートリアルに、ツールオプションを設定するためのメインのコンフィギュレーションダイアログが示されます。
アプリケーションのデバッグ – 実際のハードウェアでアプリケーションをデバッグするプロセスと接続方法について説明します。
ミドルウェア – MDK-Professional エディションのユーザがご利用いただ
けるミドルウェアについての詳細を説明します。

3

4

序章

Middleware の使用 – MDK-Professional で使用可能なミドルウェアを使用したアプリケーションの作成方法について説明します。すぐに作業を開始するために不可欠なヒントやコツが記載されています。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

目次
序章 ..................................................... 3
MDK の紹介 ............................................... 8
MDK コア ........................................................... 8
ソフトウェアパック ................................................. 9
MDKのエディション .................................................. 9
インストール ...................................................... 10
ソフトウェアとハードウェアの要件.............................. 10
MDK コアのインストール........................................ 10
ソフトウェアパックのインストール.............................. 11
MDK-Professional 試用版ライセンス ............................. 13
サンプルプロジェクトを使用したインストールの検証 .............. 14
ソフトウェアパックの使用...................................... 20
マニュアルへのアクセス ............................................ 27
サポートのリクエスト .............................................. 28
学習用プラットフォーム ............................................ 28
クイックスタートガイド ............................................ 29

CMSIS ................................................... 29
CMSIS-CORE ........................................................ 30
CMSIS-CORE の使用............................................. 31
CMSIS-RTOS RTX .................................................... 35
ソフトウェアの概念............................................ 36
CMSIS-RTOS RTX の使用......................................... 37
CMSIS-RTOS システムとスレッドビューア ......................... 48
CMSIS-DSP ......................................................... 49
CMSIS ドライバ .................................................... 52
コンフィギュレーション........................................ 53
検証 ......................................................... 55

ソフトウェアコンポーネント .............................. 56
Compiler（コンパイラ） ............................................ 56
Board Support（ボードサポート） ................................... 59

5

6

序章

アプリケーションの作成 .................................. 60
CMSIS-RTOS RTX を使用した Blinky .................................. 61
無限ループ設計を使用した Blinky ................................... 72
デバイススタートアップの例 ........................................ 74
例：DAVE を使用する Infineon XMC1000 .......................... 74
サンプル：STM32Cube........................................... 78

デバッグアプリケーション ................................ 83
デバッガ接続 ...................................................... 83
デバッガの使用 .................................................... 84
デバッグツールバー............................................ 85［Command（コマンド）］ウィンドウ ............................. 86［Disassembly（逆アセンブリ）］ウィンドウ ..................... 87
ブレークポイント.............................................. 88［Watch（ウォッチ）］ウィンドウ ............................... 89［Call Stack and Locals（コールスタックとローカル）］ウィンドウ 8
9［Register（レジスタ）］ウィンドウ ............................ 91［Memory（メモリ）］ウィンドウ................................ 91
ペリフェラルレジスタ.......................................... 92
トレース .......................................................... 93
シリアルワイヤ出力を使用したトレース .......................... 95
トレースの例外 ............................................... 97［Event Viewer（イベントビューア）］ .......................... 98［Logic Analyzer（ロジックアナライザ）］ ...................... 99
デバッグ (printf) ビューア................................... 100［Event Counters（イベントカウンタ）］ ....................... 102
4 ピン出力を使用したトレース................................. 104
オンチップトレースバッファを使用したトレース ................. 104

ミドルウェア ........................................... 105
ネットワークコンポーネント ....................................... 107
ファイルシステム コンポーネント .................................. 109
USB コンポーネント ............................................... 110
グラフィックスコンポーネント ..................................... 112
ミドルウェアバージョン 7 への移行 ................................ 113
FTP サーバサンプル ............................................... 115

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

ミドルウェアの使用 ..................................... 117
USB デバイス HID サンプル ........................................ 119
ソフトウェアコンポーネントの追加............................. 120
ミドルウェアの設定........................................... 122
ドライバの設定 .............................................. 124
システムリソースの調整....................................... 125
アプリケーション機能の実装................................... 128
ビルドとダウンロード......................................... 131
検証とデバッグ .............................................. 132

索引 ................................................... 134

78

MDK の紹介

MDK の紹介
Keil マイクロコントローラ開発キット（MDK）は、ARM Cortex-M プロセッ
サベースのデバイス向けの組み込みアプリケーションを作成する際に役立ちます。MDK は強力でありながら、習得が簡単で開発システムを使用します。
MDK バージョン 5 は、MDK コアとデバイス固有のソフトウェアパックで構成されており、お使いのアプリケーションの要件に基づいてダウンロードし、インストールすることができます。
MDK バージョン 5 では、www.keil.com/mdk5/legacy から従来のサポートを
インストールすると、MDK バージョン 4 プロジェクトを使用することができます。こうすることで、ARM7、ARM9、および Cortex-R プロセッサベースのデバイスに対するサポートが追加されます。

MDK コア
MDK コアには、Cortex-M プロセッサベースのマイクロコントローラデバイ
ス用に組み込みアプリケーションを作成、ビルド、デバッグするのに必要なすべてのコンポーネントが含まれています。MDK コアにいつでも追加できる
ソフトウェアパックの管理は、Pack Installer によって行われます。こうすることで、ツールチェーンに関係なく、新しいデバイスのサポートとミド
ルウェアのアップデートを行うことができます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成するソフトウェアパック
ソフトウェアパックには、デバイスサポート、CMSIS ライブラリ、ミドル
ウェア、ボードサポート、コードテンプレート、サンプルプロジェクトが含まれています。

MDKのエディション
MDK には、C/C++ またはアセンブリ言語を使用してアプリケーションの作成とデバッグを行うツールと環境が用意されており、さまざまなエディション
にてご利用いただけます。各エディションには、µVision® IDE、デバッガ、
コンパイラ、アセンブラ、リンカ、ミドルウェアライブラリ、および CMSIS-RTOS RTX が含まれています。


MDK-Professional には、洗練された組み込みアプリケーション用の広範なミドルウェアライブラリに加え、MDK-Standard のすべての機能が含まれています。



MDK-Standard は、Cortex-M、一部の Cortex-R、ARM7 および ARM9 プロ
セッサベースのマイクロコントローラをサポートしています。



MDK-Cortex-M は、Cortex-M プロセッサベースのマイクロコントローラをサポートしています。



MDK-Lite は、コードサイズが 32 KB に制限されており、製品の評価、
小規模プロジェクト、教育市場を対象としています。

http://www.keil.com/mdk5/selector にある製品選択ガイドを見ると、各エディションで使用可能な機能の概要がわかります。

910

MDK の紹介

ライセンスの種類
MDK-Lite を除き、MDK エディションにはライセンスコードを使用したアクティブ化が必要です。以下のライセンスの種類を使用できます。


シングルユーザライセンス（ノードロック）では、1 人の開発者が2 台のコンピュータで同時に製品を使用できます。



フローティングユーザライセンスまたはFlexLM ライセンスでは、複数の開発者が数台のコンピュータで同時に製品を使用できます。



7 日間 MDK-Professional 試用版ランセンスでは、コードサイズの制限なしでミドルウェアを包括的にテストできます。

詳細については、『ライセンスユーザガイド』（www.keil.com/support/man/docs/license）を参照して下さい。

インストール
ソフトウェアとハードウェアの要件
以下は MDK のハードウェアとソフトウェアの最低要件です。


Microsoft Windows（32 ビットまたは 64 ビット）オペレーティングシス
テム搭載の PC

4 GB の RAM および 8 GB のハードディスク空き容量1280 x 800 以上のディスプレイ解像度、マウスまたはその他のポイン
ティングデバイス

MDK コアのインストール
MDK バージョン 5 を www.keil.com/download の［Product Downloads（製品ダウンロード）］からダウンロードし、インストーラを実行します。
指示に従って、MDK コアをローカルコンピュータにインストールします。このインストールにより、ARM CMSIS と MDK-Professional Middleware のソ
フトウェアパックも追加されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

MDK コアのインストールが完了すると、Pack Installer が自動的に起動するため、ここから補足のソフトウェアパックを追加できます。最低でも、お使いのターゲットマイクロコントローラデバイスをサポートするソフトウェアパックをインストールする必要があります。

ソフトウェアパックのインストール
Pack Installer は、ローカルコンピュータでソフトウェアパックを管理するためのユーティリティです。
Pack Installer はインストール時に自動で実行されますが、µVision
で［Project（プロジェクト）］ – ［Manage（管理）］ – ［Pack Inst
aller］の順にメニュー項目を選択して実行することもできます。デバ
イスやサンプルプロジェクトにアクセスするには、お使いのターゲット
デバイス、または評価ボードに関連したソフトウェアパックをインストールして下さい。

注
公開版のソフトウェアパックの詳細を得るために、Pack Installer は www.
keil.com/pack に接続します。

11

12

MDK の紹介Pack Installer の下にあるステータスバーには、インターネット接続とイ
ンストールの進行状況に関する情報が表示されます。
ヒント：デバイスデータベース（www.keil.com/dd2）には、使用可能なすべてのデバイスの一覧と、関連したソフトウェアパックをダウンロードするためのアクセスが記載されています。Pack Installer で www.
keil.com/pack にアクセスできない場合は、メニューコマンドの［File（ファイル）］ – ［Import（インポート）］を使用するか、*.PACK ファイルをダブルクリックして、手動でソフトウェアパック
をインストールすることができます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

MDK-Professional 試用版ライセンス
MDK には、MDK-Professional の 7 日間無料試用版ライセンスが組み込まれています。このライセンスを使うとコードサイズの制限がなくなるため、ミドルウェアを包括的に探索し、テストすることができます。
管理者権限で µVision を起動します。
1. µVision で、［File（ファイル）］ – ［License Management（ライセンス管理）...］に移動し、［Evaluate MDK Professional（MDK P
rofessional の評価）］をクリックします。

13

14

MDK の紹介

2. 次の画面で、［Start MDK Professional Evaluation for 7 Days（MDK
Professional の 7 日間評価を開始）］をクリックします。インス
トールが完了すると、有効期限の日時に関する情報が画面に表示されます。

注
このライセンスは FlexLM に基づいているため、7 日間の MDK Professional
試用版をアクティブにすると、［FlexLM License（FlexLM ライセンス）］タ
ブの［Use Flex Server（Flex サーバを使用する）］というオプションが有効になります。

サンプルプロジェクトを使用したインストールの検証
お使いのデバイスのソフトウェアパックを選択、ダウンロード、インストー
ルしたら、ソフトウェアパックに付属のサンプルの 1 つを使用して、インストールを検証することができます。ソフトウェアパックのインストールを検証する際は、通常、ターゲットボードで LED が点滅する Blinky サンプ
ルを使用することをお勧めします。
ヒント：http://www.keil.com/mdk5 のスタートガイドビデオで、評価キットの接続方法と作業方法を確認して下さい。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

サンプルプロジェクトのコピー
Pack Installer の［Examples（サンプル）］タブを選択します。ツー
ルバーのフィルタでサンプル一覧を絞り込みます。

［Copy（コピー）］をクリックし、作業ディレクトリの［Destination Folder（デスティネーションフォルダ）］の名前を入力します。

注
選択した作業ディレクトリにサンプルプロジェクトをコピーする必要があり
ます。

15

16

MDK の紹介［Launch µVision（µVision の起動）］を有効にして、サンプルプロ
ジェクトを IDE で直接開きます。

［Use Pack Folder Structure（パックフォルダ構造を使用）］を有効にして、サンプルプロジェクトを共通フォルダにコピーします。コピーしておくと、ファイルが他のサンプルプロジェクトで上書きされるのを防ぐことができます。［Use Pack Folder Structure（パックフォルダ構造を使用）］を無効にして、サンプルパスの複雑さを軽減させます。

［OK］をクリックして、コピープロセスを開始します。

µVision を使用したサンプルアプリケーションの使用
これで、µVision が起動してサンプルプロジェクトがロードされます。
ここでは以下のことができます。
アプリケーションをビルドします。関連するソースファイルのコンパイ
ルとリンクが行われます。
アプリケーションをダウンロードします。通常はデバイスのオンチップの Flash ROM 上にダウンロードされます。
デバッガを使用して、ターゲットハードウェア上でアプリケーションを実行します。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

これらのタスクの実行手順は、順を追って説明されています。サンプルのコ
ピーが終わると、µVision が起動し、以下のような画面が表示されます。

ヒント：ほとんどのサンプルプロジェクトには、操作方法とハードウェアコ

ンフィギュレーションに関する重要な情報が記載された「Abstract.
txt」というファイルが含まれています。

17

18

MDK の紹介

アプリケーションのビルド［Rebuild（再ビルド）］ツールバーボタンを使用して、アプリケー
ションをビルドします。
［Build Output（ビルド出力）］ウィンドウには、ビルドプロセスに関する情報が表示されます。エラーのないビルドについては、プログラムサイズに関する情報が表示されます。

アプリケーションのダウンロード
一般的に USB で接続するデバッグアダプタを使用して、ターゲットハードウェアをお使いのコンピュータに接続します。複数の評価ボードにオンボード型のデバッグアダプタが装備されています。
次に、デバッグアダプタの設定を確認します。通常、サンプルプロジェクト
は評価キットに合わせて事前に設定されているため、これらの設定を変更する必要はありません。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

19

ツールバーで［Options for Target（ターゲットのオプション）］をクリックし、［Debug（デバッグ）］タブを選択します。使用している評
価ボードに適したデバッグアダプタが選択され、有効になっていることを確認します。例えば、［CMSIS-DAP Debugger（CMSIS-DAP デバッガ）］は、複数のスタータキットの一部となっているデバッグアダプタです。

［Load Application at Startup（起動時にアプリケーションをロード）］を有効にして、デバッグセッションを開始するたびにアプリケー
ションを µVision デバッガにロードします。
［Run to main()（main() まで実行）］を有効にすると、main() 関数の最初の実行可能ステートメントまで命令が実行されます。この命令は、リセットのたびに実行されます。
ヒント：［Settings（設定）］ボタンをクリックして通信設定を確認し、ターゲットハードウェアの問題を診断します。詳細を確認するには、ダイアログの［Help（ヘルプ）］ボタンをクリックします。問題がある場合は、スタータキットのユーザガイドを参照して下さい。

20

MDK の紹介

ツールバーの［Download（ダウンロード）］をクリックすると、アプリ
ケーションがターゲットハードウェアにロードされます。

［Build Output（ビルド出力）］ウィンドウには、ダウンロードの進行状況に関する情報が表示されます。

アプリケーションの実行
ツールバーの［Start/Stop Debug Session（デバッグセッションの開始/停止）］をクリックすると、ハードウェア上のアプリケーションのデバッグが開始されます。
デバッグツールバーの［Run（実行）］をクリックすると、アプリケー
ションの実行が開始されます。ターゲットハードウェアの LED が点滅します。

ソフトウェアパックの使用
ソフトウェアパックには、アプリケーションの構成要素として使用可能なマ
イクロコントローラデバイスとソフトウェアコンポーネントに関する情報が含まれています。
デバイス情報によって開発ツールが事前設定され、選択したデバイスに関連したオプションのみが表示されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成するµVision を起動し、［Project（プロジェクト）］ – ［New µVision Pr
oject（新しい µVision プロジェクト）］メニューを使用します。
プロジェクトディレクトリを選択してプロジェクト名を指定したら、ターゲットデバイスを選択します。

ヒント：インストールされているソフトウェアパックの一部になっているデバイスのみが表示されます。デバイスが見つからない場合は、Pack
Installer を使用して関連したソフトウェアパックを追加します。
検索ボックスは、デバイス一覧を絞り込む際に役立ちます。

21

22

MDK の紹介

デバイスの選択が完了すると、［Manage Run-Time Environment（実行時環境の管理）］ウィンドウに、このデバイスに関連したソフトウェア
コンポーネントが表示されます。

ヒント：［Description（説明）］列のリンクをクリックすると、各ソフト

ウェアコンポーネントのマニュアルにアクセスできます。

注コンポーネントの参照には、「::<コンポーネントクラス>:<グループ>:<名前>」という表記が用いられます。例えば、::CMSIS:CORE は、上のダイ
アログで CMSIS-CORE コンポーネントが選択されていることを示します。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

23

ソフトウェアコンポーネントの概要
以下の表は、典型的なインストールに含まれているソフトウェアコンポーネントを示しています。選択したデバイスによっては、これらのソフトウェア
コンポーネントの一部が［Manage Run-Time Environment（実行時環境の管理）］ウィンドウに表示されないことがあります。追加のソフトウェアパックをインストールした場合は、さらに多くのソフトウェアコンポーネントを使用できます。
ページ

ソフトウェアコン
ポーネント

説明

Board Support（ボードサポート）

評価ボードのペリフェラルへのインタフェース。

59

CMSIS

CORE、DSP、CMSIS-RTOS などの CMSIS インタフェースコ
ンポーネント。

29

CMSIS Driver（CMSIS ドライバ）

ミドルウェアとユーザアプリケーション用の統一された
デバイスドライバ。

52

Compiler（コンパイラ）I/O 操作のターゲットを変更する際（printf スタイルのデバッグなど）の ARM コンパイラ固有のソフトウェアコ
ンポーネント。

52

Device（デバイス）

システムスタートアップ、および低レベルのデバイスド
ライバ。

62

File System（ファイルシステム）

さまざまなストレージデバイスの種類でファイルにアクセスするためのミドルウェアコンポーネント。

109

Graphics（グラフィックス）

グラフィカルユーザインタフェースを作成するためのミ
ドルウェアコンポーネント。

112

Network（ネットワーク）

イーサネット、またはシリアルプロトコルを使用した TC
P/IP ネットワークを設定するためのミドルウェアコン
ポーネント。

107

USB

標準の USB デバイスクラスをサポートする USB ホストと USB デバイスのためのミドルウェアコンポーネント。

110

ソフトウェアパックを使用した製品ライフサイクル管理
MDK では、複数バージョンのソフトウェアパックをインストールできます。
これによって、多くのプロジェクトでよく使用される製品ライフサイクル管理（PLM）が可能になります。

24

MDK の紹介スタートガイド：MDK バージョン 5 でアプリケーションを作成する

PLM には以下の 4 つのフェーズがあります。


概念：主なプロジェクト要件を定義し、関数プロトタイプを使用して調査
すること。



設計：最終的な技術的特徴と要件に基づいて、プロトタイプのテストと製品の実装を行うこと。



リリース：製品を製造して市場に投入すること。



サービス：顧客のサポートも含めた製品のメンテナンスを行うこと。最終的にフェーズアウトするか、耐用年数終了を迎えます。

概念フェーズと設計フェーズでは、新機能を盛り込んでバグをすばやく修正できるように、通常は最新版のソフトウェアパックを使用します。製品リ
リースの前には、ソフトウェアコンポーネントをテスト済みの既知の状態にフリーズさせます。製品のサービスフェーズでは、固定バージョンのソフト
ウェアコンポーネントを使用して、現場の顧客をサポートします。
［Select Software Packs（ソフトウェアパックの選択）］ダイアログを使用すると、プロジェクト内の各ソフトウェアパックのバージョンを管理する際に役立ちます。

25

26

MDK の紹介

プロジェクトが完了したら、［Use latest version of all installed Software Packs（インストールされているすべてのソフトウェアパックの最新版を使用する）］オプションを無効にして、［Selection（選択範囲）］の設定でソフトウェアパックを指定します。
latest（最新）：最新版のソフトウェアパックを使用します。新しいバー
ジョンのソフトウェアパックがインストールされると、ソフトウェアコン
ポーネントが更新されます。



fixed（固定）：インストールされているソフトウェアパックのバージョンを指定します。プロジェクトターゲットのソフトウェアコンポーネント
でこれらのバージョンが使用されます。



excluded（除外）：このソフトウェアパックのソフトウェアコンポーネン
トは使用されません。

色表示は、現在のプロジェクトターゲットにおけるソフトウェアコンポーネントの使用状況を示しています。
このパックの一部のソフトウェアコンポーネントが使用されています。
このパックの一部のソフトウェアコンポーネントが使用されていますが、パックは除外されます。
このパックのソフトウェアコンポーネントは使用されていません。

ソフトウェアバージョンコントロールシステム（SVCS）µVision では、ソフトウェアバージョンコントロールシステム（SVCS）をサ
ポートするために、GIT、SVN、CVS 用のテンプレートファイルを用意しています。
アプリケーションノート 279「Using Git for Project Management with µV
ision（µVision でのプロジェクト管理における Git の使用）」（www.keil.
com/appnotes/docs/apnt_279.asp）には、ソフトウェアパックを使用してプ
ロジェクトをバージョン管理する際の堅牢なワークフローの確立方法が記載
されています。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

27

マニュアルへのアクセス
MDK には、オンラインマニュアルとコンテキストヘルプが用意されています。
µVision の［Help（ヘルプ）］メニューを使用すると、『µVision ユーザガイド』、スタートガイドのマニュアル、コンパイラ、リンカ、アセンブラリ
ファレンスガイドなどが収録されたメインのヘルプシステムが表示されます。
多くのダイアログには、マニュアルにアクセスできて、ダイアログのオプションや設定に関する説明を確認できる、コンテキスト依存の［Help（ヘルプ）］ボタンがあります。
エディタで F1 キーを押すと、RTOS 関数、コンパイラディレクティブ、ライブラリルーチンなどの言語要素のヘルプにアクセスすることができます。
［Output（出力）］ウィンドウのコマンドラインで F1 キーを押すと、デバッグコマンドや、一部のエラーメッセージと警告メッセージに関するヘルプが表示されます。
［Books（ブック）］ウィンドウには、デバイスのリファレンスガイド、
データシート、ボードのマニュアルなどが収められています。独自のマニュアルを追加して、［Project（プロジェクト）］ – ［Manage（管理）］ – ［Components, Environment, Books（コンポーネント、環境、ブック）］ – ［Books（ブック）］の順にメニューを選択して［Books（ブック）］ウィンドウでそのマニュアルを有効にすることもできます。
［Manage Run-Time Environment（実行時環境の管理）］ダイアログでは、［Description（説明）］列のリンクからマニュアルにアクセスできます。
［Project（プロジェクト）］ウィンドウで、ソフトウェアコンポーネント
グループを右クリックし、対応する要素のマニュアルを開くことができます。
『µVision ユーザガイド』には、www.keil.com/support/man/docs/uv4 からオンラインでアクセスできます。

28

MDK の紹介

サポートのリクエスト
当社のソフトウェアに関してご提案がある場合や問題が生じた場合は、当社までご報告下さい。サポートおよび情報チャネルには、www.keil.com/suppo
rt からアクセスできます。
問題を報告する際は、ライセンスコードがある場合はライセンスコードと製品のバージョンをお知らせ下さい。この情報は、µVision メニューで［Help（ヘルプ）］ – ［About（バージョン情報）］の順に選択して確認できます。

学習用プラットフォーム
当社では、ARM Cortex ベースのマイクロコントローラのプログラミングについて詳しく知ることができる Web サイトをご用意しています。チュート
リアル、ビデオ、その他のマニュアル、さらに他の Web サイトへの役立つ
リンクが掲載されており、www.keil.com/learn からご利用いただけます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

29

クイックスタートガイド
クイックスタートガイドを参照すれば、お使いのターゲットハードウェアをすばやく使用できます。MDK を使用して開発ボードを立ち上げるのに必要な手順について説明されているほか、必要なソフトウェアパックの一覧や、デバッグアダプタを統合するためのドライバ要件も記載されています。

注
使用可能なクイックスタートガイドはすべて www.keil.com/mdk5/qsg から
参照できます。

CMSIS
Cortex マイクロコントローラソフトウェアインタフェース規格（CMSIS）は、
Cortex-M ベースのマイクロコントローラ上で実行される組み込みアプリ
ケーションの基礎となるソフトウェアフレームワークを提供します。CMSIS
により、プロセッサとペリフェラルとの間に一貫したシンプルなソフトウェ
アインタフェースを実現でき、ソフトウェアの再利用が簡素化されるため、マイクロコントローラ開発者にとって習熟に要する期間が短縮されます。

注
本章は参照セクションです。「アプリケーションの作成」の章（60 ページ）に、CMSIS を使用したアプリケーションコードの作成方法が記載されています。
さまざまなシリコンベンダとソフトウェアベンダが緊密に連携して定義された CMSIS は、インタフェースペリフェラル、リアルタイムオペレーティン
グシステム、およびミドルウェアコンポーネントに対して共通のアプローチを提供します。

30

CMSIS

CMSIS アプリケーションソフトウェアコンポーネントは以下のとおりです。


CMSIS-CORE：Cortex-M プロセッサコアとペリフェラルの API を定義します。整合性のあるシステム起動コードが付属しています。例外、割り込み、
デバイスペリフェラルを使用するネイティブプロセッサでアプリケーションを作成して実行するために必要なソフトウェアコンポーネントは、::CMSIS:CORE と ::Device:Startup だけです。



CMSIS-RTOS RTX：標準化されたリアルタイムオペレーティングシステム A
PI を提供しているほか、サポート対象の RTOS システム全体で機能する
ソフトウェアテンプレート、ミドルウェア、ライブラリ、その他のコン
ポーネントを使用できるようにします。本書では、CMSIS-RTOS RTX 実装の使用方法について説明しています。



CMSIS-DSP：固定小数点（小数 q7、q15、q31）や単精度浮動小数点（32 ビット）などのさまざまなデータ型に対応し、60 を超える関数を持つデジタル信号処理（DSP）用のライブラリコレクション。



CMSIS ドライバ：ミドルウェアスタックとユーザアプリケーションのペリ
フェラルドライバインタフェースについて記述しているソフトウェア API。
CMSIS ドライバ API は、汎用で特定の RTOS に依存しない設計になっているため、サポート対象の幅広いマイクロコントローラデバイス間で再利用することができます。

CMSIS-CORE
このセクションでは、Cortex-M プロセッサでネイティブに実行されるアプ
リケーションにおける CMSIS-CORE の使用方法について説明します。このよ
うな種類の操作では、リアルタイムオペレーティングシステムを使用しないため、「ベアメタル」とも呼ばれています。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

CMSIS-CORE の使用
CMSIS を使用するネイティブ Cortex-M アプリケーションでは、::CMSIS:CORE というソフトウェアコンポーネントを使用します。このコンポーネントは、::Device:Startup というソフトウェアコンポーネントと併用する必要があります。これらのコンポーネントには、以下の集中管理ファ
イルがあります。

注
実際のファイル名では、<デバイス> はマイクロコントローラデバイスの名前になります。


リセットハンドラと例外ベクタを持つ star
tup_<デバイス>.s ファイル

基本のデバイス
設定（クロックおよびメモリ BUS）の system_<デバイス>.c コン
フィギュレーション
ファイル。

<デバイス>.h には、マイクロコントローラデバイスへのユーザコードア
クセス用のファイルが含まれています。

<デバイス>.h ヘッダファイルが C ソースファイルに含まれており、以下を定義しています。


標準化されたレジスタレイアウトを使用したペリフェラルアクセス。



割り込みと例外、およびネスト型ベクタ割り込みコントローラ（NVIC）へのアクセス。



スリープモードをアクティブにするなどの特殊な命令を生成する組み込み
関数。

31

32

CMSIS



定期的なタイマの割り込みを構成および開始するための Systick タイマ（SYSTICK）関数。



オンチップの CoreSight™ を使用した printf 形式の I/O および ITM 通信に対するデバッグアクセス。

プロジェクトへのソフトウェアコンポーネントの追加::CMSIS:CORE コンポーネントと ::Device:Startup コンポーネントのファ
イルは、µVision の［Manage Run-Time Environment（実行時環境の管理）］
ダイアログを使用してプロジェクトに追加されます。以下の図と同じように
ソフトウェアコンポーネントを選択して下さい。

µVision 環境によって関連ファイルが追加されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

ソースコードの例
以下のソースコード行は、CMSIS-CORE レイヤの使用状況を示しています。
CMSIS-CORE レイヤの使用例#include "stm32f4xx.h"// File name depends on device used

uint32_t volatile msTicks;
uint32_t volatile frequency;// Counter for millisecond Interval// Frequency for timer

void SysTick_Handler (void) {msTicks++;}// SysTick Interrupt Handler// Increment Countervoid WaitForTick (void) {uint32_t curTicks;
curTicks = msTicks;
while (msTicks == curTicks) {__WFE ();}}
void TIM1_UP_IRQHandler (void) {; // Add user code here}// Save Current SysTick Value// Wait for next SysTick Interrupt// Power-Down until next Event// Timer Interrupt Handler

void timer1_init(int frequency) {// Set up Timer (device specific)
NVIC_SetPriority (TIM1_UP_IRQn, 1); // Set Timer priority
NVIC_EnableIRQ (TIM1_UP_IRQn);// Enable Timer Interrupt}// Configure & Initialize the MCU
void Device_Initialization (void) {if (SysTick_Config (SystemCoreClock / 1000)) {// SysTick 1ms: // Handle Error}
timer1_init (frequency);// Setup device-specific timer}// The processor clock is initialized by CMSIS startup + system file
int main (void) {// User application starts here
Device_Initialization ();// Configure & Initialize MCU
while (1) {__disable_irq ();// Get_InputValues ();__enable_irq ();// Process_Values ();WaitForTick ();// Endless Loop (the Super-Loop)// Disable all interrupts// Enable all interrupts// Synchronize to SysTick Timer

33

34

CMSIS
}

}

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

詳細については、［Project（プロジェクト）］ウィンドウの［CMSIS］グ
ループを右クリックして、［Open Documentation（マニュアルを開く）］を選択するか、CMSIS-CORE マニュアル（http://www.keil.com/cmsis/core）
を参照して下さい。

CMSIS-RTOS RTX
このセクションでは、CMSIS-RTOS RTX リアルタイムオペレーティングシス
テムを紹介し、その利点について説明した後、この RTOS のコンフィギュ
レーション設定と機能について解説します。

注
MDK は多くのサードパーティ製 RTOS ソリューションと互換性があります。
ただし、CMSIS-RTOS RTX は MDK に完全に統合されており、多機能で、組み込みシステムの要件に合わせて十分にカスタマイズされています。

35

36

CMSIS

ソフトウェアの概念
組み込みアプリケーションには、以下の 2 つの基本設計概念があります。


無限ループ設計：無限ループとしてプログラムが実行されます。割り込み
サービスルーチン（ISR）によりデータ処理を伴うタイムクリティカルなジョブが実行されている間、プログラム関数（スレッド）がループ内から呼び出されます。

RTOS 設計：リアルタイムオペレーティングシステム（RTOS）を使用した
いくつかのスレッドが実行されます。RTOS は、スレッド間通信と時間管理関数を提供します。プリエンプティブ RTOS により、タイムクリティカ
ルなデータ処理が最優先スレッドで実行されるので、割り込み関数の複雑さが緩和されます。

無限ループ設計
無限ループでの組み込みプログラムの実行は、単純な組み込みアプリケー
ションに適したソリューションです。通常はハードウェア割り込みによってトリガされるタイムクリティカルな機能は、必須のデータ処理が実行される
ISR 内で実行されます。メインループには、タイムクリティカルではなく、
バックグラウンドで実行される基本演算のみが含まれています。

RTOS カーネルのメリット
RTOS カーネルは、CMSIS-RTOS RTX と同様に、並列実行スレッド（タスク）の概念に基づいています。実際には、アプリケーションで複数の異なるタス
クに応じることが必要になります。RTOS ベースのアプリケーションは、お使いのソフトウェアでこのモデルを再現します。これにはさまざまな利点があります。


スレッドの優先順位と実行時のスケジューリングは、実証済みのコード
ベースを使用して RTOS カーネルによって処理されます。



RTOS は、スレッド間通信のための明確に定義されたインタフェースです。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

37



プリエンプティブなマルチタスクの概念により、大規模な開発チームでもアプリケーションの進行的な拡張が簡素化されます。重要性の高いスレッドの応答時間を気にせずに、新機能を追加することができます。



無限ループソフトウェアの概念では、発生した割り込みに対してポーリングが行われることがよくあります。これに対し、RTOS カーネル自体は割り込み駆動型であるため、ポーリングの大部分を排除することができます。
このため、CPU をスリープ状態にしたり、スレッド処理の頻度を増やしたりすることができます。

最近の RTOS カーネルは割り込みシステムに対して透過的です。これは、厳しいリアルタイム要件を持つシステムでは必須条件です。IRQ からタスクへの通信に通信機能を使用し、割り込みを上位半分/下位半分で処理することができます。

CMSIS-RTOS RTX の使用
CMSIS-RTOS RTX はライブラリとして実装されており、ヘッダファイルcmsis_os.h からその機能を公開します。
CMSIS-RTOS RTX の実行は、最初のスレッドとして main() 関数から始まります。このため、開発者はスレッドを内部作成する他のミドルウェアライブ
ラリを初期化しながらも、ユーザアプリケーションの残りの部分では main
スレッドのみを使用できるというメリットがあります。この結果、RTOS の使用状況はアプリケーションプログラマには表示されませんが、ライブラリ
で CMSIS-RTOS RTX 機能を使用することができます。
ソフトウェアコンポーネント ::CMSIS:RTOS:Keil RTX は、::CMSIS:CORE コ
ンポーネントおよび ::Device:Startup コンポーネントと併用する必要があります。これらのコンポーネントを選択すると、以下の集中管理 CMSIS-RTO
S RTX ファイルが得られます。

注
実際のファイル名では、<デバイス> がマイクロコントローラデバイスの名前になります。
<デバイスコア> はデバイスプロセッサファミリを表します。

38



CMSIS

RTX_<コア>.lib ファイ
ルは、RTOS 関数を持つライブラリです。



スレッドオプション、タ
イマコンフィギュレー
ション、RTX カーネル設定を定義する RTX_Conf_
CM.c コンフィギュレー
ションファイル。



ヘッダファイル cmsis_os.h は、RTX 機能をユー
ザアプリケーションに公
開します。



main() 関数はスレッドとして実行されます。

これらのファイルがプロジェクトの一部になったら、開発者は CMSIS-RTOS
RTX 関数の使用を開始することができます。以下のコードサンプルは、CMSI
S-RTOS RTX 関数の使用状況を示しています。
CMSIS-RTOS RTX 関数の使用例#include "cmsis_os.h"// CMSIS RTOS header filevoid job1 (void const *argument) {// execute some code
osDelay (10);}// Function 'job1'

osThreadDef(job1, osPriorityLow, 1, 0);
int main (void) {osKernelInitialize ();// setup and initialize peripherals
osThreadCreate (osThread(job1), NULL);
osKernelStart ();}// Delay execution for 10ms// Define job1 as thread// Initialize RTOS kernel// Create the thread// Start kernel & job1 thread

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

39

ヘッダファイル cmsis_os.h
cmsis_os.h ファイルは CMSIS-RTOS RTX のテンプレートヘッダファイルで、以下が含まれています。


CMSIS-RTOS API 関数定義。



パラメータと戻り値型の定義。



CMSIS-RTOS API 関数で使用されているステータスと優先順位の値。



スレッドや、ミューテックス、セマフォ、メモリプールなどの他のカーネ
ルオブジェクトを定義するマクロ。

CMSIS-RTOS 関数に対して一意の名前空間を指定するために、すべての定義には os という接頭辞が付いています。os_ という接頭辞が付いている定義
はアプリケーションコードで使用されず、このヘッダファイルに対してローカルになります。モジュールに属するすべての定義と関数はグループ化され、スレッドの場合は osThread と付くなど、共通の接頭辞が付けられます。

オブジェクト定義の定義と参照#define osObjectsExternal を使用すると、オブジェクトは外部シンボルとして定義されます。これによって、以下に示すように、プロジェクト全体で一貫したヘッダファイルを作成できます。
ヘッダファイルの例：osObjects.h#include "cmsis_os.h"// CMSIS RTOS header

extern void thread_1 (void const *argument);
osThreadDef (thread_1, osPriorityLow, 1, 100);// Function prototype// Thread definition

osPoolDef (MyPool, 10, long);// Pool definition

このヘッダファイルは「osObjects.h」と呼ばれ、C/C++ ソースファイルにインクルードされた場合にすべてのオブジェクトを定義します。ヘッダファ
イルのインクルードの前に #define osObjectsExternal が存在する場合、オブジェクトは外部シンボルとして定義されます。このため、1 つの一貫したヘッダファイルをプロジェクト全体で使用することができます。

40

CMSIS

C ファイルでの一貫したヘッダファイルの使用#define osObjectExternal#include "osObjects.h"// Objects defined as external symbols// Reference to the CMSIS-RTOS objects

詳細については、オンラインマニュアル（www.keil.com/cmsis/rtos）の「Header File Template: cmsis_os.h（ヘッダファイルテンプレート：cmsis_os.h）」セクションを参照して下さい。

CMSIS-RTOS RTX コンフィギュレーション
RTX_Conf_CM.c ファイルには、CMSIS-RTOS RTX のコンフィギュレーション
パラメータが含まれています。このファイルのコピーは、RTX コンポーネン
トを使用したあらゆるプロジェクトの一部になります。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

スレッドスタックのパラメータの設定、Tick タイマの設定、ラウンドロビ
ンタイムスライスの設定、スレッドのユーザタイマ動作の定義などを行うことができます。
コンフィギュレーションオプションの詳細については、［Manage Run-Time
Environment（実行時環境の管理）］ウィンドウから RTX のマニュアルをご覧下さい。「Configuration of CMSIS-RTOS RTX（CMSIS-RTOS RTX のコン
フィギュレーション）」セクションに、使用可能なすべての設定の説明が記載されています。お使いのアプリケーションでの適応を必要とする、最も重要な設定を以下に示します。

スレッドスタックコンフィギュレーション
スレッドは osThreadDef() 関数を使用してコード内で定義されます。stacksz パラメータはスレッドのスタック要件を指定するもので、スタックの割り当て方法に影響を及ぼします。CMSIS-RTOS RTX では、次の 2 つの方法で
RTX_Conf_CM.c ファイルにスタック要件を割り当てることができます。


固定メモリプールを使用する：stacksz パラメータが 0 の場合は、［Default Thread stack size [bytes]（デフォルトのスレッドのスタックサ
イズ [バイト]）］に指定された値で、スレッド関数のスタックサイズが設定されます。



ユーザ空間を使用する：stacksz が 0 でない場合は、ユーザ空間からス
レッドスタックが割り当てられます。このユーザ空間の合計サイズは、［Total stack size [bytes] for threads with user-provided stack size
（ユーザが指定したスタックサイズのスレッドの合計スタックサイズ [バイト]）］で指定されます。

［Number of concurrent running threads（同時実行中のスレッド数）］では、固定サイズのメモリプールからスタックを割り当てるスレッドの最大数が指定されます。

41

42

CMSIS

［Default Thread stack size [bytes]（デフォルトのスレッドのスタック
サイズ [バイト]）］では、ユーザ指定のスタックなしで定義されたスレッ
ドのスタックサイズ（ワード単位）が指定されます。
［Main Thread stack size [bytes]（メインスレッドのスタックサイズ [バイト]）］は、main() 関数のスタック要件です。
［Number of threads with user-provided stack size（ユーザが指定したスタックサイズのスレッド数）］では、特定のスタックサイズで定義されたスレッド数が指定されます。
［Total stack size [bytes] for threads with user-provided stack size
（ユーザが指定したスタックサイズでのスレッドの合計スタックサイズ [バイト]）］は、特定のスタックサイズで定義されたすべてのスレッドの要件（ワード単位）を合計したものです。
［Stack overflow checking（スタックオーバーフローの確認）］では、スレッドの切り替え時にスタックオーバーフローを確認できます。このオプションを有効にすると、スレッド切り替えにかかる時間が少し長くなります。
［Stack usage watermark（スタック消費量の透かし）］では、スレッド作
成時に、スレッドスタックが透かしパターンで初期化されます。これにより、
各スレッドのスタック消費量を監視して（スレッド切り替え時だけではなく）、スレッド内でスタックオーバーフローの問題を見つけるのに役立てることができます。このオプションを有効にすると、osThreadCreate() の実
行にかかる時間が非常に長くなります。

注
これらの設定は慎重に検討して下さい。十分なメモリを割り当てなかったり、十分なスレッドを指定しなかったりすると、アプリケーションは機能しません。

RTX カーネルのタイマ Tick コンフィギュレーション
CMSIS-RTOS RTX 関数は、タイマ tick の値から派生した遅延をミリ秒単位で指定します。1 ミリ秒の間隔が生成されるようにタイマ Tick を設定する
ことをお勧めします。これよりも長い間隔を設定するとエネルギー消費量は減りますが、タイムアウトの粒度に影響します。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

43［Use Cortex-M Systick timer as RTX Kernel Timer（Cortex-M Systick
タイマを RTX カーネルタイマに使用する）］を有効にすることをお勧めします。こうすることで、クロックソースとしてプロセッサクロックを使用する組み込み SysTick タイマが選択されます。この場合、［RTOS Kernel Tim
er input clock frequency（RTOS カーネルのタイマ入力クロック周波数）］を起動ファイル system_<デバイス>.c の CMSIS 変数 SystemCoreClock と同じにする必要があります。
詳細については、オンラインドキュメントの「Configuration of CMSIS-RTO
S RTX – Tick Timer Configuration（CMSIS-RTOS RTX のコンフィギュレー
ション – Tick タイマコンフィギュレーション）」セクションを参照して下さい。

CMSIS-RTOS ユーザコードテンプレート
MDK には、アプリケーションの C ソースコードを作成するために使用できるユーザコードテンプレートが用意されています。
［Project（プロジェクト）］ウィンドウで、グループを右クリック
し、［Add New Item to Group（新規項目をグループに追加）］を選択します。［User Code Template（ユーザコードテンプレート）］を選択し、任意のテンプレートを選択して、［Add（追加）］をクリックしま
す。

44

CMSIS

CMSIS-RTOS RTX API 関数
以下の表には、CMSIS-RTOS RTX で使用できるさまざまな API 関数のカテゴ
リが示されています。
API カテゴリ

説明

スレッド管理スレッド関数を定義、作成、および制御します。

タイマ管理

タイマとコールバック関数を作成および制御します。

信号管理

シグナルフラグを制御または待機します。

ミューテックス管理

スレッドの実行とミューテックスを同期させます。

セマフォ管理共有リソースへのアクセスを制御します。

メモリプール管理

固定サイズのメモリプールを定義および管理します。

メッセージキュー管理

メッセージを制御、送受信、または待機します。

メールキュー管理

メールを制御、送受信、または待機します。

ヒント： www.keil.com/pack/doc/CMSIS/RTX/html/index.html で見ることができる CMSIS-RTOS RTX チュートリアルでは、API 関数の使用方
法について説明します。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

45

スレッド管理スレッド管理関数を使用すると、システムで独自のスレッド関数を定義、作成、および制御できます。関数 main() はシステムの初期化時に開始される
特殊なスレッド関数で、初期優先順位は osPriorityNormal です。

上記の図からわかるように、CMSIS-RTOS RTX は、スレッドがスケジュール
されていると想定しています。スレッドの状態は、以下のように変化します。


スレッドは osThreadCreate() 関数を使用して作成されます。これにより、スレッドは「READY（準備完了）」または「RUNNING（実行中）」状態になります（スレッドの優先順位に基づく）。



CMSIS-RTOS はプリエンプティブです。最も高い優先順位が設定されたア
クティブなスレッドは、イベントを待機していない場合、「RUNNING（実行中）」スレッドになります。スレッドの初期優先順位は osThreadDef()を使用して定義されますが、実行中に osThreadSetPriority() 関数を使用して変更できます。

「RUNNING（実行中）」スレッドは、イベントの待機中は「WAITING（待機中）」状態に移行します。

46



CMSIS

アクティブなスレッドは、osThreadTerminate() 関数を使用していつでも終了できます。また、通常の永久ループ から抜けたり、スレッド関数から戻る だけでもスレッドを終了することができます。終了したスレッド
は［INACTIVE（非アクティブ）］状態になり、通常は動的メモリリソー
スを消費しません。

シングルスレッドプログラム
標準 C プログラムは、main() 関数を使用して実行を開始します。組み込み
アプリケーションの場合、通常、この関数は無限ループとなり、連続して実行される 1 つのスレッドと見なされます。

プリエンプティブなスレッド切り替え
優先順位が同じスレッドで他のタスクを実行するには、ラウンドロビンタイ
ムアウトまたは osDelay() 関数を明示的に呼び出す必要があります。以下の例では、job2 の優先順位が job1 よりも高い場合、job2 の実行が直ちに開始されます。job2 は job1 の実行に対してプリエンプティブになります（このタスク切り替えは高速で行われ数ミリ秒しかかかりません）。
ラウンドロビンタスク切り替えを使用した簡単な RTX プログラム#include "cmsis_os.h"
int counter1;
int counter2;
void job1 (void const *arg) {while (1) {counter1++;}}
void job2 (void const *arg) {while (1) {counter2++;}}// Loop forever// Increment counter1// Loop forever// Increment counter2

osThreadDef (job1, osPriorityNormal, 1, 0);
osThreadDef (job2, osPriorityNormal, 1, 0);// Define thread for job1// Define thread for job2

int main (void) {osKernelInitialize ();// main() runs as thread// Initialize RTX

スタートガイド：MDK バージョン 5 でアプリケーションを作成する}

osThreadCreate (osThread (job1), NULL);
osThreadCreate (osThread (job2), NULL);// Create and start job1// Create and start job2

osKernelStart ();// Start RTX kernel

while (1) {osThreadYield ();}// Next thread

47

48

CMSIS

スレッドの優先順位が高い job2 の開始:
osThreadDef (osThread (job2), osPriorityAboveNormal, 1, 0);:

CMSIS-RTOS システムとスレッドビューア
CMSIS-RTOS RTX カーネルには、RTOS 認識デバッグのサポートが組み込みまれています。デバッグ中に、［Debug（デバック）］［OS Support（OSサポート）］の順に開き、［System and Thread Viewer（システムとスレッドビューア）］を選択します。このウィンドウには、シ
ステム状態情報および実行中のスレッドが表示されます。

［System（システム）］プロパティには、アプリケーションの RTOS コン
フィギュレーションに関する一般的な情報が表示されます。［Thread Usage（スレッド使用状況）］には、使用可能なスレッドと現在アクティブになっている使用済みスレッドの数が表示されます。
［Threads（スレッド）］プロパティには、アプリケーションのスレッド実行に関する詳細が表示されます。スレッドごとに、優先順位、実行状態、およびスタック消費量に関する情報が表示されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

49

RTX_Conf_CM.c ファイルの［Thread Configuration（スレッドコンフィギュ
レーション）］に対して［Stack usage watermark（スタック消費量の透かし）］オプションを有効にすると、［Stack Usage（スタック消費量）］
フィールドに［cur:］および［max:］のスタックロードが表示されます。
［cur:］の値は、実際のプログラム位置における現在のスタック消費量です。
［max:］の値は、スタック消費量の透かしパターンの上書きに基づく、ス
レッド実行中に発生した最大スタックロードです。これを使用すると、以下のことができるようになります。


スレッド実行中のスタックオーバーフローを識別する。



スレッドに使用するスタック空間を最適化して縮小する。

注
トレースを使用する場合、デバッガには詳しいタイミング情報を表示する
ビューも用意されています。詳細については、「［Event Viewer（イベントビューア）］」セクション（98ページ）を参照して下さい。

CMSIS-DSPCMSIS-DSP ライブラリは、一般的なデジタル信号処理（DSP）関数のセットです。ライブラリは、さまざまな Cortex-M プロセッサ用に最適化されたい
くつかのバリアントで使用できます。
ソフトウェアコンポーネント ::CMSIS:DSP を［Manage Run-Time Environment（実行時環境の管理）］ダイアログで有効にすると、選択したデバイスの最適なライブラリが自動的にプロジェクトに含められます。

50

CMSIS

以下のコードは、CMSIS-DSP ライブラリ関数の使用例です。
DSP 関数を使用する 2 つのマトリックスの乗算#include "arm_math.h"// ARM::CMSIS:DSP

const float32_t buf_A[9] = {1.0, 32.0, 4.0,
1.0, 32.0, 64.0,
1.0, 16.0, 4.0,};// Matrix A buffer and values

float32_t buf_AT[9];float32_t buf_ATmA[9] ;// Buffer for A Transpose (AT)// Buffer for (AT * A)

arm_matrix_instance_f32 A;
arm_matrix_instance_f32 AT;
arm_matrix_instance_f32 ATmA;// Matrix A// Matrix AT(A transpose)// Matrix ATmA( AT multiplied by A)

uint32_t rows = 3;
uint32_t cols = 3;// Matrix rows// Matrix columns

int main(void) {// Initialize all matrixes with rows, columns, and data array
arm_mat_init_f32 (&A, rows, cols, (float32_t *)buf_A); // Matrix A
arm_mat_init_f32 (&AT, rows, cols, buf_AT);// Matrix AT
arm_mat_init_f32 (&ATmA, rows, cols, buf_ATmA);// Matrix ATmA
arm_mat_trans_f32 (&A, &AT);// Calculate A Transpose (AT)arm_mat_mult_f32 (&AT, &A, &ATmA); // Multiply AT with A
while (1);}

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

詳細については、www.keil.com/cmsis/dsp にある CMSIS-DSP のマニュアルを参照して下さい。

51

52

CMSIS

CMSIS ドライバ
デバイス固有の CMSIS ドライバには、ミドルウェアとマイクロコントロー
ラペリフェラル間のインタフェースが用意されています。これらのドライバ
は、MDK-Professional Middleware に限らず、他のさまざまなミドルウェア
スタックがペリフェラルを使用するときにも便利です。
通常、デバイス固有のドライバはソフトウェアパックの一部になっており、
マイクロコントローラデバイスをサポートし、CMSIS ドライバ標準に準拠しています。www.keil.com/dd2 のデバイスデータベースには、デバイスのソ
フトウェアパックに含まれているドライバが一覧表示されています。

通常、ミドルウェアコンポーネントにはさまざまなコンフィギュレーション
ファイルが含まれており、これらのドライバに接続します。ほとんどのデバ
イスでは、RTE_Device.h ファイルによって、マイクロコントローラデバイ
スの実際のピン接続にドライバが設定されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

53

ミドルウェア/アプリケーションコードは、control struct を介してドライ
バインスタンスに接続します。この control struct の名前にはデバイスのペリフェラルインタフェースが反映されます。多くの通信ペリフェラルのド
ライバは、デバイスサポートを提供するソフトウェアパックの一部です。
指定していないドライバを実装するには、CMSIS ドライバ標準に従って従来の C ソースコードを使用します。
CMSIS ドライバの API インタフェースの詳細については、www.keil.com/cm
sis/driver を参照して下さい。

注
アプリケーションノート 250「Creating a Software Pack with a New Peri
pheral Driver（新しいペリフェラルドライバを使用したソフトウェアパックの作成）」では、ソフトウェアパックに存在しない新しいペリフェラルド
ライバを作成する方法について説明しています。
www.keil.com/appnotes を参照して下さい。

コンフィギュレーション
CMSIS ドライバを設定する方法は、いくつかあります。標準的な方法は、デバイスサポートに付属している RTE_Device.h ファイルを使用することです。
その他のデバイスは、ユーザがデバイスのピン位置および対応するドライバを設定できる、サードパーティ製のグラフィカルコンフィギュレーション
ツールを使用して設定できます。通常、これらのコンフィギュレーション
ツールは、µVision プロジェクトにインポートするために必要な C コードを自動的に作成します。

54

CMSIS

RTE_Device.h の使用
ほとんどのデバイスでは、RTE_Device.h ファイルによって、マイクロコン
トローラデバイスの実際のピン接続にドライバが設定されます。

［Configuration Wizard（コンフィギュレーションウィザード）］ビューを使用すると、ドライバインタフェースのヘッダファイルの #defines を手動で編集することなく、そのドライバインタフェースをグラフィカルモードで設定することができます。

STM32CubeMX の使用
MDK は、STM32CubeMX を使用して CMSIS ドライバのコンフィギュレーショ
ンをサポートしています。このグラフィカルソフトウェアコンフィギュレー
ションツールでは、STMicroelectronics デバイス用のグラフィカルウィ
ザードを使用して、C 初期化コードを生成できます。
必要な操作は、［Manage Run-Time Environment（実行時環境の管理）］ウ
ィンドウで必要な CMSIS ドライバを選択し、Device:STM32Cube Framework(API):STM32CubeMX を選択するだけです。これにより、デバイスとドライバ
コンフィギュレーションに必要な STM32CubeMX が開きます。終了すると、コンフィギュレーションコードを生成して、µVision にインポートします。
詳細については、www.keil.com/pack/doc/STM32Cube/General/html/index.h
tml のオンラインマニュアルを参照して下さい。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

55

検証
CMSIS ドライバ検証テスト用のソフトウェアパックは、www.keil.com/packから入手できます。このソフトウェアパックには、CMSIS ドライバ検証ス
イートのソースコードとマニュアルの他に、必要なコンフィギュレーション
ファイル、さまざまなターゲットプラットフォームでの使用方法を示す例が含まれています。
CMSIS ドライバ検証スイートは、以下のテストを実行します。
API 関数呼び出しの一般的な検証

コンフィギュレーションパラメータの検証

ループバックとの通信テストの検証

通信速度などの通信パラメータの検証

イベント関数の検証

テスト結果は、コンソールに印刷したり、ITM printf を介して出力したり、
メモリバッファに出力したりできます。www.keil.com/cmsis/driver で見ることができる CMSIS ドライバマニュアルの「Driver Validation（ドライバの検証）」セクションを参照して下さい。

56

ソフトウェアコンポーネント

ソフトウェアコンポーネント
Compiler（コンパイラ）
ソフトウェアコンポーネント［Compiler（コンパイラ）］を使用すると、標準 C ランタイムライブラリの I/O 関数のターゲットを変更できます。入出力操作を実行するために、アプリケーションコードでは、printf()、scanf()、または fgetc() などの標準的な I/O ライブラリ関数がよく使用されます。
標準的な ARM コンパイラ C ランタイムライブラリ内のこれらの関数の構造は、以下のようになります。

高レベル関数および低レベル関数はターゲットに依存せず、ハードウェアとのインタフェースにシステム I/O 関数を使用します。
ARM コンパイラ C ランタイムライブラリの MicroLib は、低レベル関数を介してハードウェアとインタフェースをとります。MicroLib が実装する一連の高レベル関数は制限されているため、システム I/O 関数は実装されません。
ソフトウェアコンポーネント［Compiler（コンパイラ）］は、さまざまな標
準 I/O チャネル（File、STDERR、STDIN、STDOUT、および TTY）に合わせて
I/O 関数のターゲットを変更します。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

I/O チャネル

説明

File（ファイル）

すべてのファイル関連操作チャネル（fscanf、fprintf、fopen、fclose な
ど）。

STDERR

診断メッセージを出力するアプリケーションの標準エラーストリーム。

STDIN

アプリケーションの一部になる標準入力ストリーム（scanf など）。

STDOUT

アプリケーションの標準出力ストリーム（printf など）。

TTY

エラー出力の最後の手段となるテレタイプ端末。

バリアントを選択すると、I/O チャネルのハードウェアインタフェースを変更できます。
バリアント

説明

File System（ファイルシス
テム）

ファイルシステムコンポーネントは、ファイル関連操作のインタフェースとして使用します。

Breakpoint（ブレークポイ
ント）

I/O チャネルを使用すると、アプリケーションは BKPT 命令で停止します。

ITM

デバッガを介した I/O 通信用のインストルメンテーショントレースマクロセル（ITM）を使用します。

User（ユーザ）

I/O 関数をユーザ定義ルーチン（USART、キーボードなど）にターゲット変更し
ます。

57

58

ソフトウェアコンポーネント

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

59

ソフトウェアコンポーネント［Compiler（コンパイラ）］は、バリアントの設定に応じて設定される retarget_io.c ファイルを追加します。［User（ユーザ）］バリアントの場合、ユーザコードテンプレートを使用すると、独自の機能を実装する際に役立ちます。詳細については、マニュアルを参照
して下さい。
Cortex-M3/M4/M7 の ITM は printf 形式のデバッ
グをサポートしています。バリアント［ITM］を選択すると、I/O ライブラリ関数は、［Debug (printf) Viewer（デバッグ (printf) ビューア）］ウィンドウで I/O 操作を実行します。

Board Support（ボードサポート）
LED、プッシュボタン、ジョイスティック、A/D および D/A コンバータ、LC
D、タッチスクリーンなどの開発ボードや、温度計、加速度計、磁力計、ジャイロスコープなどの外部センサでよく使用されるインタフェースがいく
つかあります。
ボードサポートインタフェース API では、これらのインタフェースに対し、標準化されたアクセスを行います。これにより、ソフトウェア開発者は、特定の GPIO に切り替えるためにレジスタ設定についてデバイスのマニュアル
を確認するのではなく、アプリケーションコードに集中することができます。

60

アプリケーションの作成

多くのデバイスファミリパック（DFP）にはボードサポートが含まれています。ボードサポートは［Manage Run-Time Environment（実行時環境の管理）］ウィンドウで選択できます。

特定の開発ボードに対して正しいピン設定を行うことができるように、適切な［Variant（バリアント）］を選択して下さい。
ボードのソフトウェアパックに必要なサポートファイルを作成すると、カス
タムボードにボードサポートを追加できます。http://www.keil.com/pack/doc/mw/Board/html/index.html で見ることができる API マニュアルを参照
して下さい。

アプリケーションの作成
本章では、前の章で説明した CMSIS を使用して、プロジェクトを作成および変更するために必要な手順について説明します。

注
このセクションのサンプルコードは、MCB1800 評価ボード（LPC1857 を搭載）に対応しています。別のスタータキットまたはボードを使用する場合は、コードとポートピンの設定を適合させて下さい。
チュートリアルでは、Blinky プロジェクトを次の 2 つの基本設計概念で作成します。
CMSIS-RTOS RTX を使用した RTOS 設計。



RTOS カーネルのないベアメタルシステム用の無限ループ設計。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

CMSIS-RTOS RTX を使用した Blinky
このセクションでは、以下の手順を使用してプロジェクトの作成方法を説明します。


プロジェクトのセットアップ：プロジェクトファイルを作成し、マイク
ロコントローラデバイスおよび関連する CMSIS コンポーネントを選択します。



デバイスクロック周波数の設定：デバイスのシステムクロック周波数とCMSIS-RTOS RTX カーネルを設定します。



ソースコードファイルの作成：アプリケーションファイルを追加および作成します。



アプリケーションイメージのビルド：アプリケーションをコンパイルおよびリンクして、マイクロコントローラデバイスのオンチップフラッシュ
メモリにダウンロードします。

「デバッガの使用」セクション（84 ページ）では、評価ボードを PC に接続し、アプリケーションをターゲットにダウンロードする手順について説明
しています。

Blinky プロジェクトでは、以下のアプリケーションファイルを作成します。

main.c

このファイルには main() 関数が含まれており、RTOS カーネル、
ペリフェラルを初期化し、スレッドの実行を開始します。

LED.c

このファイルには、GPIO ポートと blink_LED() スレッド関数を初期化して制御する関数が含まれています。LED_Initialize()
関数は、GPIO ポートピンを初期化します。LED_On() 関数と LED_Off() 関数は、LED とのインタフェースをとるポートピンを制
御します。

LED.h

ヘッダファイルには関数の関数プロトタイプが LED.c に含まれており、ヘッダファイルは main.c ファイルに含まれています。

また、システムクロックと CMSIS-RTOS RTX を設定します。

61

62

アプリケーションの作成

プロジェクトのセットアップµVision メニューバーで、［Project（プロジェクト）］ – ［New µVision
Project（新しい µVision プロジェクト）］を選択します。
空のフォルダを選択し、「Blinky」などのプロジェクト名を入力します。［Save（保存）］をクリックします。指定された名前で空のプロ
ジェクトファイル（Blinky.uvproj）が作成されます。
次に、［Select Device for Target（ターゲットのデバイスを選択）］ダイ
アログが開きます。
LPC1857 を選択し、［OK］をクリックします。
デバイス選択によって、コンパイラ制御、リンカのメモリレイアウト、フラッシュプログラミングアルゴリズムなどの基本的なツール設定が定義されます。
［Manage Run-Time Environment（実行時環境の管理）］ダイアログが開き、インストール済みで、選択したデバイスで使用できるソフトウェアコンポー
ネントが表示されます。
::CMSIS:RTOS(API) を拡張して :Keil RTX を有効にします。
::Device を拡張して :GPIO と :SCU を有効にします。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する［Validation Output（検証出力）］フィールドには、他のソフトウェア
コンポーネントとの依存関係が表示されます。この場合、::Device:Startup
コンポーネントは必須です。
ヒント：メッセージをクリックすると、関連するソフトウェアコンポーネン

トがハイライトされます。

63

64

アプリケーションの作成［Resolve（解決）］をクリックします。
すべての依存関係が解決され、他の必須ソフトウェアコンポーネント（ここでは、::CMSIS:Core と ::Device:Startup）
が有効になります。
［OK］をクリックします。
選択したソフトウェアコンポーネントは、ス
タートアップファイル、RTX コンフィギュレー
ションファイル、および CMSIS システムファイ
ルと共にプロジェクトに含められます。［Project（プロジェクト）］ウィンドウには、選択したソフトウェアコンポーネントおよび関連するファイルが表示されます。エディタで開くには、ファイルをダブルクリックします。

デバイスクロック周波数の設定
システムまたはコアクロックは system_<デバイス>.c ファイルに定義されます。コアクロックは RTOS カーネルタイマの入力クロックでもあるため、RTX コンフィギュレーションファイルはこの設定に一致する必要があります。

注
一部のデバイスは、main 関数の一部としてシステムセットアップを実行したり、外部のユーティリティを使用して設定されるソフトウェアフレーム
ワークを使用したりします。
詳細については、「デバイススタートアップの例」セクション（74 ページ）を参照して下さい。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

65

アプリケーションのクロックコンフィギュレーションは、クロックソース（XTAL またはオンチップオシレータ）や、メモリおよびペリフェラルの要件などのさまざまな要因に応じて異なります。シリコンベンダはデバイス固有のファイル system_<デバイス>.c を用意しているため、関連するドキュ
メントを読む必要があります。
ヒント：マイクロコントローラクロックシステムの詳細については、［Books（ブック）］ウィンドウのリファレンスマニュアルを開いて下さい。
MCB1800 開発キットは、外部の 12 MHz XTAL を使用して実行されます。PLLは 180 MHz のコアクロック周波数を生成します。これはデフォルトであるため、変更する必要はありません。ただし、system_LPC18xx.c ファイルのカスタム開発ボードの設定は変更できます。

system_LPC18xx.c ファイルを編集するには、［Device（デバイス）］グ
ループを［Project（プロジェクト）］ウィンドウで拡張します。ファイ
ル名をダブルクリックして、以下のコードを変更します。

system_LPC18xx.c の PLL パラメータの設定:/* PLL1 output clock: 180MHz, Fcco: 180MHz, N = 1, M = 15, P = x*/#define PLL1_NSEL
0/* Range [0 3]: Pre-divider ratio N */#define PLL1_MSEL 14/* Range [0 - 255]: Feedback-div ratio M */#define PLL1_PSEL
0/* Range [0 3]: Post-divider ratio P */#define PLL1_BYPASS 0#define PLL1_DIRECT 1#define PLL1_FBSEL 0:/* 0: Use PLL, 1: PLL is bypassed/* 0: Use PSEL, 1: Don't use PSEL/* 0: FCCO is used as PLL feedback/* 1: FCLKOUT is used as PLL feedback

*/
*/
*/
*/

66

アプリケーションの作成

CMSIS-RTOS RTX カーネルのカスタマイズ［Project（プロジェクト）］ウィンドウで、［CMSIS］グループを拡張
し、RTX_Conf_CM.c ファイルを開きます。次に、エディタの下部にある［Configuration Wizard（コンフィギュレーションウィザード）］タブ
をクリックします。
［RTX Kernel Timer Tick Configuration（RTX カーネルタイマ Tick
コンフィギュレーション）］を拡張し、［Timer clock value（タイマ
クロック値）］をコアクロックに一致させます。

ヒント：コンパイラ定義の設定と system_<デバイス>.c をサンプルプロ
ジェクトからコピーできます。エディタでファイル名を右クリック
し、［Open Containing Folder（含んでいるフォルダを開く）］を選択してファイルを検索します。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

ソースコードファイルの作成
ソフトウェアコンポーネントの機能に似たルーチンを含んでいる、事前設定されたユーザコードテンプレートを使用して、アプリケーションコードを追加します。
［Project（プロジェクト）］ウィンドウで、［Source Group 1（ソースグループ 1）］を右クリックして、［Add New Item to Group（新規項目をグループに追加）］ダイアログを開きます。

［User Code Template（ユーザコードテンプレート）］をクリックして、プロジェクトに含まれているソフトウェアコンポーネントに使用できるコードテンプレートを表示します。［CMSIS-RTOS ‘main’ functi
on（CMSIS-RTOS ‘main’ 関数）］を選択して［Add（追加）］をク
リックします。

main.c ファイルがプロジェクトグループ［Source Group 1（ソースグループ1）］に追加されます。これで、アプリケーション固有のコードをこのファイルに追加できます。

67

68

アプリケーションの作成

main.c ファイル内の空白行を右クリックして、［Insert ‘#include fil
es’（‘#include files’ を挿入）］を選択します。選択したデバイスのヘッダファイル LPC18xx.h を含めます。
次に、下のコードを追加して blink_LED() 関数を作成します。評価
キットの LED が点滅します。osThreadDef() を使用して blink_LED()を RTOS スレッドとして定義し、osThreadCreate() で開始します。
main.c のコード/*-----------------------------------------------------------------------* CMSIS-RTOS 'main' function template*----------------------------------------------------------------------*/#define osObjectsPublic#include "osObjects.h"#include "LPC18xx.h"#include "LED.h"// Define objects in main module// RTOS object definitions// Device header// Initialize and set GPIO Port/** main: initialize and start the system*/
int main (void) {osKernelInitialize ();// Initialize CMSIS-RTOS// initialize peripherals here
LED_Initialize ();// Initialize LEDs// create 'thread' functions that start executing,// example: tid_name = osThreadCreate (osThread(name), NULL);
Init_BlinkyThread ();// Start Blinky thread
osKernelStart ();// Start thread execution
while (1);}

スタートガイド：MDK バージョン 5 でアプリケーションを作成する［Add New Item to Group（新規項目をグループに追加）］ダイアログを使用して LED.c という名前の空の C ファイルを作成します。コードを追加して初期化し、LED を制御する GPIO ポートピンにアクセスします。
LED.c のコード/*-----------------------------------------------------------------------* File LED.c*----------------------------------------------------------------------*/#include "SCU_LPC18xx.h"#include "GPIO_LPC18xx.h"#include "cmsis_os.h"// ARM::CMSIS:RTOS:Keil RTX
void blink_LED (void const *argument);// Prototype function

osThreadDef (blink_LED, osPriorityNormal, 1, 0); // Define blinky thread
void LED_Initialize (void) {GPIO_PortClock(1);// Enable GPIO clock/* Configure pin: Output Mode with Pull-down resistors */SCU_PinConfigure (13, 10, (SCU_CFG_MODE_FUNC4|SCU_PIN_CFG_PULLDOWN_EN));GPIO_SetDir(6, 24, GPIO_DIR_OUTPUT);GPIO_PinWrite(6, 24, 0);}
void LED_On (void) {GPIO_PinWrite(6, 24, 1);}// LED on: set port

void LED_Off (void) {GPIO_PinWrite(6, 24, 0);}// LED off: clear port// Blink LED function
void blink_LED(void const *argument) {for (;;) {LED_On ();osDelay (500);
LED_Off ();osDelay (500);}}// Switch LED on// Delay 500 ms// Switch off// Delay 500 ms

void Init_BlinkyThread (void) {osThreadCreate (osThread(blink_LED), NULL);}// Create thread

69

70

アプリケーションの作成

注
Board Support（ボードサポート） コンポーネント（59 ページに説明）が指定する関数を使用することもできます。

［Add New Item to Group（新規項目をグループに追加）］ダイアログを使用して LED.h という名前の空のヘッダファイルを作成し、LED.cの関数プロトタイプを定義します。
LED.h のコード/*-----------------------------------------------------------------------* File LED.h*----------------------------------------------------------------------*/
void LED_Initialize ( void );// Initialize GPIO
void LED_On ( void );// Switch Pin on
void LED_Off ( void );// Switch Pin off
void blink_LED ( void const *argument );void Init_BlinkyThread ( void );// Blink LEDs in a thread// Initialize thread

アプリケーションイメージのビルド
アプリケーションをビルドします。すべての関連するソースファイルのコンパイルおよびリンクが行われます。
［Build Output（ビルド出力）］に、ビルドプロセスに関する情報が表示されます。エラーのないビルドについては、プログラムサイズ情報、
エラーゼロ、および警告ゼロが表示されます。

「デバッガの使用」セクション（84 ページ）では、評価ボードをワークス

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

テーションに接続し、アプリケーションをターゲットハードウェアにダウンロードする方法について説明しています。
ヒント：LED を 1 秒間隔でチェックすることで、ターゲットハードウェアの正しいクロックと RTOS コンフィギュレーションを検証できます。

71

72

アプリケーションの作成

無限ループ設計を使用した Blinky
前の例に基づき、無限ループ設計を使用し、CMSIS-RTOS RTX 関数を使用せずに、Blinky アプリケーションを作成します。このプロジェクトには、以下のユーザコードファイルが含まれています。

main.c

このファイルには、main() 関数、システム Tick タイマを初期化する Systick_Init() 関数、およびそのハンドラ関数 Sy
sTick_Handler() が含まれています。Delay() 関数は一定
時間待機します。

LED.c

ファイルには、GPIO ポートピンを初期化し、ポートピンをオン
またはオフに設定する関数が含まれています。LED_Initialize() 関数は GPIO ポートピンを初期化します。LED_On() 関数とLED_Off() 関数は、ポートピンを有効または無効にします。

LED.h

ヘッダファイルには LED.c で作成された関数プロトタイプが含まれており、main.c ファイルに含める必要があります。

［Manage Run-Time Environment（実行時環境の管理）］を開き、ソフト
ウェアコンポーネント ::CMSIS:RTOS (API):Keil RTX の選択を解除します。

main.c ファイルを開きます。コードを追加してシステム Tick タイマ
を初期化し、システム Tick タイマ割り込みハンドラおよび delay 関
数を書き込みます。
/*-----------------------------------------------------------------------* file main.c*----------------------------------------------------------------------*/#include "LPC18xx.h"#include "LED.h"// Device header// Initialize and set GPIO Port

int32_t volatile msTicks = 0;// Interval counter in ms// Set the SysTick interrupt interval to 1ms
void SysTick_Init (void) {if (SysTick_Config (SystemCoreClock / 1000)) {// handle error}}// SysTick Interrupt Handler function called automatically
void SysTick_Handler (void) {msTicks++;// Increment counterスタートガイド：MDK バージョン 5 でアプリケーションを作成する}// Wait until msTick reaches 0
void Delay (void) {while (msTicks < 499);
msTicks = 0;}
int main (void) {// initialize peripherals here
LED_Initialize ();SystemCoreClockUpdate();SysTick_Init ();while (1) {LED_On ();Delay ();
LED_Off ();Delay ();}// Wait 500ms// Reset counter// Initialize LEDs// Update SystemCoreClock to 180 MHz// Initialize SysTick Timer// Switch on// Delay// Switch off// Delay}LED.c ファイルを開き、不要な関数を削除します。コードは以下のようになります。
/*-----------------------------------------------------------------------* File LED.c*----------------------------------------------------------------------*/#include "SCU_LPC18xx.h"#include "GPIO_LPC18xx.h"
void LED_Initialize (void) {GPIO_PortClock(1);// Enable GPIO clock/* Configure pin: Output Mode with Pull-down resistors */SCU_PinConfigure (13, 10, (SCU_CFG_MODE_FUNC4 | SCU_PIN_CFG_PULLDOWN_EN));GPIO_SetDir(6, 24, GPIO_DIR_OUTPUT);GPIO_PinWrite(6, 24, 0);}
void LED_On (void) {GPIO_PinWrite(6, 24, 1);}// LED on: set port

void LED_Off (void) {GPIO_PinWrite(6, 24, 0);}// LED off: clear port

73

74

アプリケーションの作成

LED.h ファイルを開き、コードを修正します。
/*-----------------------------------------------------------------------* file: LED.h*----------------------------------------------------------------------*/
void LED_Initialize (void);// Initialize LED Port Pins
void LED_On (void);// Set LED on
void LED_Off (void);// Set LED off

アプリケーションイメージのビルド
アプリケーションをビルドします。すべての関連するソースファイルのコンパイルおよびリンクが行われます。
「デバッガの使用」セクション（84 ページ）では、評価ボードを PC に接続し、アプリケーションをターゲット ハードウェアにダウンロードする方法について説明しています。
ヒント：LED を 1 秒間隔でチェックすることで、ターゲットハードウェアの正しいクロックコンフィギュレーションを検証できます。

デバイススタートアップの例
一部のデバイスは、デバイスハードウェア抽象化レイヤ（HAL）の一部としてシステムセットアップにおいて重要な役割を果たしているため、デバイスの初期化は main 関数内から実行されます。このようなデバイスでは、外部ユー
ティリティで構成されたソフトウェアフレームワークがよく使用されます。
そのため、::Device ソフトウェアコンポーネントには、デバイスを起動するために必要な追加のコンポーネントが含まれる可能性があります。詳細については、オンラインヘルプシステムを参照して下さい。以下のセクション
では、デバイス起動の例をご紹介します。

例：DAVE を使用する Infineon XMC1000
Infineon の DAVE™ を使用すると、いわゆる DAVE アプリケーションに基づ
くコードを自動的に生成できます。Eclipse ベースの IDE 内で、使用アプ
リケーションに合うように、このアプリケーションを追加、設定、および接続することができます。このプロセス中に、CLOCK_XMC_1_0 アプリケーショ

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

ン（XMC1000 ファミリの場合）を使用してクロック設定を指定します。このアプリケーションは、コア内で正しいレジスタを設定して、目的の周波数にします。コード生成の終わりに、CMSIS 関数 SystemCoreClockUpdate() を呼び出します。
DAVE プロジェクトを µVision にインポートするためのすべての手順については、http://www.keil.com/appnotes/docs/apnt_258.asp にある「アプリケーションノート 258」を参照して下さい。
µVision がプロジェクトのインポートを完了すると、［Manage Run-Time En
vironment（実行時環境の管理）］ウィンドウに、::DAVE3 グループとコン
ポーネントとして生成されたアプリケーションが表示されます。

µVision 内部で、コンポーネント ::DAVE はロックされます。アプリケー
ションのコンフィギュレーションを変更するには、開始ボタンを使用
して DAVE を開きます。

clock_xmc1_conf.c ファイルには、クロックレジスタを設定するためのデータ構造が含まれています。以下の例は、DAVE がツール内からコンフィギュ
レーションに従って値を設定する方法を示しています。

75

76

アプリケーションの作成

clock_xmc1_conf.c のコード:/*************************************************************************** DATA STRUCTU
RES**************************************************************************/
const XMC_SCU_CLOCK_CONFIG_t CLOCK_XMC1_0_CONFIG ={.pclk_src = XMC_SCU_CLOCK_PCLKSRC_DOUBLE_MCLK,.rtc_src = XMC_SCU_CLOCK_RTCCLKSRC_DCO2,.fdiv = 0U, /**< Fractional divider */.idiv = 1U, /**< 8Bit integer divider */};DAVE を使用したクロックセットアップの変更
クロック値を変更する必要がある場合は、［Manage Run-Time Environment（実行時環境の管理）］ウィンドウを開き、開始ボタンを押して DAV
E を開きます。［Configure APP Instance（アプリケーションインスタンスの設定）…］を使用して、クロック設定を変更します。

DAVE でコード生成を再実行します。

生成されたファイルが変更され、µVision により自動的に認識されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する［Yes（はい）］をクリックして、変更されたファイルをリロードします。

77

78

アプリケーションの作成

サンプル：STM32Cube
多くの STM32 デバイスは STM32Cube Framework を使用しており、RTE_Devi
ce.h コンフィギュレーションファイルを使用する従来の方法で設定したり、
STM32CubeMX を使用して設定したりできます。
従来の STM32Cube Framework コンポーネントには固有のユーザコードテン
プレートがあり、これを使用してシステムセットアップを実装します。STM3
2CubeMX を使用すると、起動に必要な main.c ファイルおよび他のソース
ファイルが、STM32CubeMX:Common Sources グループの下にあるプロジェク
トにコピーされます。

従来のフレームワークを使用したプロジェクトのセットアップ
この例では、従来の方法を使用して STM32F746G-Discovery キットのプロジェクトを作成します。［Manage Run-Time Environment（実行時環境の管理）］ウィンドウで、以下のように選択します。
::Device:STM32Cube Framework (API) を拡張し、:Classic を有効にします。
::Device を拡張し、:Startup を有効にします。

［Resolve（解決）］をクリックして他の必要なソフトウェアコンポー
ネントを有効にしてから、［OK］をクリックします。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する［Project（プロジェクト）］ウィンドウで、［Source Group 1（ソースグループ 1）］を右クリックして、［Add New Item to Group（新規項目をグループに追加）］ダイアログを開きます。

［User Code Template（ユーザコードテンプレート）］をクリックして、プロジェクトに含まれているソフトウェアコンポーネントに使用できるコードテンプレートを表示します。［‘main’ module for STM32C
ube（STM32Cube の ‘main’ モジュール）］を選択して［Add（追加）］をクリックします。

main.c ファイルには SystemClock_Config() 関数が含まれています。ここでは、クロックセットアップを以下のように設定する必要があります。
main.c のコード:
static void SystemClock_Config (void) {RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;/* Enable HSE Oscillator and activate PLL with HSE as source */RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25;
RCC_OscInitStruct.PLL.PLLN = 432;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 9;
HAL_RCC_OscConfig(&RCC_OscInitStruct);/* Activate the OverDrive to reach the 216 MHz Frequency */HAL_PWREx_EnableOverDrive();

79

80

アプリケーションの作成/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7);}:

STM32CubeMX を使用したプロジェクトのセットアップ
この例では、STM32CubeMX を使用して前回と同じプロジェクトを作成します。
［Manage Run-Time Environment（実行時環境の管理）］ウィンドウで、以下のように選択します。
::Device:STM32Cube Framework (API) を拡張し、:STM32CubeMX を有効にします。::Device を拡張し、:Startup を有効にします。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する［Resolve（解決）］をクリックして他の必要なソフトウェアコンポー
ネントを有効にしてから、［OK］をクリックします。STM32CubeMX を起動するよう求める新しいウィンドウが表示されます。

STM32CubeMX が起動し、適切なデバイスが選択されました。

81

82

アプリケーションの作成

必要に応じてデバイスを設定します。設定が終了したら、［Project（プロジェクト）］［Generate Code（コードの生成）］の順に移動して、GPDSC ファイルを作成します。µVision では以下のウィンドウが表示されます。

［Yes（はい）］をクリックして、プロジェクトをインポートします。main.c ファイルおよび他の生成ファイルが STM32CubeMX:Common Sources という名前のフォルダに追加されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

83

デバッグアプリケーション
ARM CoreSight テクノロジは、ARM Cortex-M プロセッサベースのデバイスに統合され、強力なデバッグおよびトレース機能を提供します。これによって実行制御が可能になり、プログラム、ブレークポイント、メモリアクセス、およびフラッシュプログラミングを開始したり停止したりできます。サンプ
リング、データトレース、プログラムカウンタ（PC）割り込みを含む例外、インストルメンテーショントレースなどの機能をほとんどのデバイスで使用できます。デバイスは、ETM、ETB、または MTB を使用して命令トレースを統合し、プログラム実行の解析を行います。デバッグおよびトレース機能の詳しい概要については、www.keil.com/coresight を参照して下さい。

デバッガ接続MDK には、さまざまなデバッグ/トレースアダプタに接続する µVision デ
バッガが含まれており、フラッシュメモリをプログラミングすることができます。単純ブレークポイント、複合ブレークポイント、ウォッチポイント、
実行制御などの従来の機能をサポートしています。トレースを使用すると、イベント/例外ビューア、ロジックアナライザ、実行プロファイラ、コード
カバレッジなどの追加の機能がサポートされます。


ULINK2 および ULINK-ME デバッグアダ
プタは、JTAG/SWD デバッグコネクタとインタフェースをとり、シリアルワイ
ヤ出力（SWO）でトレースをサポートします。また、ULINKpro デバッグ/トレースアダプタは ETM トレースコネ
クタともインタフェースをとり、ストリーミングトレーステクノロジを使用して、コードカバレッジと実行プロファイリングに必要なすべての命令
トレースをキャプチャします。詳細については、www.keil.com/ulink を参照して下さい。

CMSIS-DAP ベースの USB JTAG/SWD デ
バッグインタフェースは、一般に評価
ボードまたはスタータキットの一部であり、統合されたデバッグ機能を備えています。MDK では、類似したテクノロジを備えた独自のインタフェースを他にもいくつかサポートしています。

84



デバッグアプリケーション

MDK は、Segger J-Link や J-Trace などのサードパーティ製デバッグソ
リューションに接続します。一部のスタータキットボードには、オンボー
ドソリューションと同様の J-Link Lite テクノロジがあります。

デバッガの使用
次に、ハードウェアに関する前の章で作成した Blinky アプリケーションをデバッグします。デバッグ接続とフラッシュプログラミングユーティリティを設定する必要があります。
デバッグアダプタを選択し、デバッグオプションを設定します。
ツールバーで［Options for Target（ターゲットのオプション）］を選択し、［Debug（デバッグ）］タブをクリックします。［Use（使用）］を有効にして適切なデバッグドライバを選択します。

デバイス選択では、オンチップメモリのフラッシュプログラミングアルゴリ
ズムが既に設定されています。［Settings（設定）］ボタンを使用してコン
フィギュレーションを確認します。
アプリケーションをフラッシュメモリにプログラミングします。
ツールバーで［Download（ダウンロード）］を選択します。［Build Ou
tput（ビルド出力）］ウィンドウに、ダウンロードの進行状況に関するメッセージが表示されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

85

ハードウェアでデバッグを開始します。ツールバーで［Start/Stop Deb
ug Session（デバッグセッションの開始/停止）］を選択します。

デバッグセッションの開始中に、µVision によりアプリケーションがロードされ、起動コードが実行されて、main C 関数で停止します。
ツールバーの［Run（実行）］をクリックします。LED が 1 秒間隔で点滅します。

デバッグツールバー
デバッグツールバーでは、以下のデバッグコマンドにすぐにアクセスできます。
［Step（ステップ）］は、プログラムをステップスルーして、関数呼び出しにステップインします。
［Step Over（ステップオーバー）］は、プログラムをステップスルー
して、関数呼び出しをステップオーバーします。

86

デバッグアプリケーション［Step Out（ステップアウト）］は、現在の関数からステップアウトします。
［Stop（停止）］は、プログラムの実行を停止します。
［Reset（リセット）］は、CPU リセットを実行します。
［Show（表示）］は、次（現在の PC の場所）のステートメントを実行するステートメントを示します。

［Command（コマンド）］ウィンドウ［Command（コマンド）］ウィンドウにデバッグコマンドを入力することもできます。

［Command Line（コマンドライン）］にデバッグコマンドを入力するか、F1
キーを押すと、詳細なヘルプ情報にアクセスできます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

87［Disassembly（逆アセンブリ）］ウィンドウ［Disassembly（逆アセンブリ）］ウィンドウには、プログラムの実行がア
センブリコードとソースコード（使用可能な場合）が混在して表示されます。
このウィンドウがアクティブになっている場合、すべてのデバッグステップ
実行コマンドはアセンブリレベルで動作します。
ウィンドウの余白には、ブレークポイントやブックマーク用のマーカ、および次の実行ステートメント用のマーカが表示されます。

88

デバッグアプリケーション

ブレークポイント以下のように、ブレークポイントを設定できます。
プログラムソースコードを作成または編集しているとき。エディタのグ
レーの余白または［Disassembly（逆アセンブリ）］ウィンドウをクリッ
クして、ブレークポイントを設定します。



ツールバーのブレークポイントボタンを使用する。

［Debug（デバッグ）］ – ［Breakpoints（ブレークポイント）］メニューを使用する。

［Command（コマンド）］ウィンドウにコマンドを入力する。

［Disassembly（逆アセンブリ）］ウィンドウのコンテキストメニューまたはエディタを使用する。

［Breakpoints（ブレークポイント）］ウィンドウ［Breakpoints（ブレークポイント）］ウィンドウを使用して精密なブレーク
ポイントを定義できます。
［Debug（デバッグ）］メ
ニューから［Breakpoints（ブレークポイント）］ウィンドウを開きます。
［Current Breakpoints（現在のブレークポイント）］フィー
ルドのチェックボックスを使用
して、ブレークポイントを有効
または無効にします。定義を変更するには、既存のブレークポ
イントをダブルクリックします。
新しいブレークポイントを追加するには、［Expression（式）］を入力します。式に応じて、以下のブレークポイントタイプのいずれかが定義されます。


実行ブレークポイント（E）：式でコードアドレスが指定されたときに作成され、このコードアドレスに到達したときに呼び出されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

89

アクセスブレークポイント（A）：式でメモリアクセス（読み出し、書き込み、またはその両方）が指定されたときに作成され、このメモリアドレ
スにアクセスしたときに呼び出されます。比較（==）演算子を使用して、指定した値を比較できます。

ブレークポイントに［Command（コマンド）］を指定すると、µVision に
よってそのコマンドが実行され、ターゲットプログラムの実行が再開します。
［Count（カウント）］の値は、ブレークポイントがプログラムの実行を停止する前に、ブレークポイント式が true となる回数を指定します。

［Watch（ウォッチ）］ウィンドウ［Watch（ウォッチ）］ウィンドウでは、プログラムシンボル、レジスタ、メモリ領域、および式を確認できます。
ツールバーまたはメニューで［View（表示）］ – ［Watch Win
dows（ウォッチウィンドウ）］の順に選択して、［Watch（ウォッチ）］ウィンドウを開きます。
［Watch（ウォッチ）］ウィンドウに変数を追加します。
［<Enter expression>（<式の入力>）］フィールドをクリックして式をダブルクリックするか、F2 キーを押します。



エディタで、カーソルが変数の上に置かれている場合は、コンテキストメ
ニューを使用して［Add <item name> to… （<項目名> を追加...）］を選択します。



変数を［Watch（ウォッチ）］ウィンドウにドラッグアンドドロップします。

［Command（コマンド）］ウィンドウで、WATCHSET コマンドを使用します。

プログラムの実行が停止した場合や、プログラムの実行中に［View（表示）］ – ［Periodic Window Update（ウィンドウを定期的に更新）］を有効にした場合は、このウィンドウの内容が更新されます。

［Call Stack and Locals（コールスタックと

90

デバッグアプリケーション

ローカル）］ウィンドウ［Call Stack + Locals（コールスタックとローカル）］ウィ
ンドウには、現在のプログラム
位置の関数ネストと変数が表示されます。
ツールバーまたはメニューで［表示（View）］ – ［Call Stack Window（コールス
タックウィンドウ）］の順に選択して、［Call Stack+ Locals（コールスタックとローカル）］ウィンドウを開きます。
プログラムの実行が停止すると、［Call Stack + Locals（コールスタックとローカル）］ウィンドウに現在の関数ネストおよびローカル変数が自動的に表示されます。CMSIS-RTOS RTX を使用するアプリケーションのスレッドが表示されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する［Register（レジスタ）］ウィンドウ［Register（レジスタ）］ウィンドウには、マ
イクロコントローラのレジスタの内容が表示されます。
ツールバーまたは［View（表示）］ – ［Registers
Window（レジスタウィンドウ）］メニューから、［Registers（レジスタ）］ウィ
ンドウを開きます。

レジスタの値をダブルクリックするか、F2 キーを押して選択した値を編集することで、レジスタの内容を変更できます。現在変更されているレジスタは、青色でハイライトされます。プログラムの実行が停止すると、ウィンドウの値が更新されます。

［Memory（メモリ）］ウィンドウ［Memory Windows（メモリウィンドウ）］を使用してメモリ領域を監視します。
ツールバーまたはメニュー
で［View（表示）］ –［Memory Windows（メモリウィンドウ）］の順に選択して、［Memory（メモリ）］ウィンドウを開
きます。

91

92

デバッグアプリケーション

［Address（アドレス）］フィールドに式を入力して、メモリ領域を監視します。



メモリの内容を監視するには、［Memory（メモリ）］ウィンドウのコンテ
キストメニューの［Modify Memory at（メモリの変更） …］
コマンドを使用して、値をダブルクリックします。



コンテキストメニューを使用して、出力形式を選択できます。

［Memory（メモリ）］ウィンドウを定期的に更新するには、［View（表示）］ – ［Periodic Window Update（ウィンドウを定期的に更新）］を有効にします。ウィンドウを手動で更新するには、［Toolbox（ツールボックス）］の［Update Windows（ウィンドウを更新）］を使用します。
［Memory（メモリ）］ウィンドウの更新を停止するには、［Lock（ロック）］ボタンをクリックします。ロック機能を使用して同じアドレス空間の値を比較するには、2 番目の［Memory（メモリ）］ウィンドウで同じセクションを表示します。

ペリフェラルレジスタ
ペリフェラルレジスタは、プロセッサがペリフェラルを制御するために書き込みおよび読み出しを行うことができる、メモリマップされたレジスタです。
［Peripherals（ペリフェラル）］メニューを使用すると、ネスト型ベクタ
割り込みコントローラやシステム Tick タイマなどのコアペリフェラルにア
クセスできます。［System Viewer（システムビューア）］を使用すると、デバイスのペリフェラルレジスタにアクセスできます。

注［Peripherals（ペリフェラル）］メニューの内容は、選択されているマイクロコントローラによって変わります。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

93

System Viewer（システムビューア）［System Viewer（システムビューア）］ウィンドウには、デバイスのペリフェラルレ
ジスタに関する情報が表示されます。
ツールバー、またはメニューの［Periph
erals（ペリフェラル）］ – ［System
Viewer（システムビューア）］から、ペリフェラルレジスタを開きます。
［System Viewer（システムビューア）］を使用すると、以下の操作を実行できます。



ペリフェラルレジスタのプロパティと値を表示します。［View（表示）］ –［Periodic Window Update（ウィンドウを定期的に更新）］が有効にすると、
値は定期的に更新されます。



デバッグ時にプロパティ値を変更する。



検索フィールドの［TR1 Regular Expressions（TR1 正規表現）］を使用
して、特定のプロパティを検索します。正規表現の構文については、『µV
ision ユーザガイド』の付録で説明しています。

ペリフェラルレジスタへのアクセス方法とその使用方法の詳細については、
オンラインマニュアルを参照して下さい。

トレース
前述のとおり、デバッグの実行 - 停止には、モータ制御や通信アプリケー
ションなど、処理時間が重視されるプログラムをテストするときに明らかになる制限がいくつかあります。例えば、ブレークポイントやシングルステッ
プコマンドによってシステムの動的動作が変わります。デバッグの代替として、このセクションで説明するトレース機能を使用して実行中のシステムを解析します。

94

デバッグアプリケーション

Cortex-M プロセッサは、次のトレース情報を生成できる CoreSight ロジッ
クを統合します。


データウォッチポイントはデータ値とプログラムアドレスと共にメモリア
クセスを記録し、必要に応じてプログラムの実行を停止します。



例外トレースは、割り込みと例外の詳細を出力します。



インストルメント化トレース
はプログラムのイベントを通信し、printf 形式のデバッグ
メッセージと RTOS イベント
ビューアを有効にします。



命令トレースは完全なプログ
ラム実行をストリーミングし、記録と解析を行います。

トレースポートインタフェースユ
ニット（TPIU）はほとんどの Cortex-M3、Cortex-M4、および Cortex-M7 プ
ロセッサベースのマイクロコントローラで利用でき、以下を介して上記のト
レース情報を出力します。
シリアルワイヤトレース出力（SWO）は、JTAG ではなくシリアルワイヤデ
バッグモードと組み合わせた場合にのみ動作し、命令トレースをサポート
しません。



4 ピントレース出力は、ハイエンドのマイクロコントローラで利用でき、
命令トレースに必要な高帯域幅を使用できます。

一部のマイクロコントローラでは、標準デバッグインタフェースを使用して読み取ることができるオンチップトレースバッファにトレース情報を格納できます。
Cortex-M3、Cortex-M4、および Cortex-M7 には、前述のすべてのトレースデータを格納する、オプションの Embedded Trace Buffer（ETB）が用意されています。

Cortex-M0+ には、命令トレースのみをサポートする、オプションのマイクロトレースバッファ（MTB）が用意されています。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

95

必須のトレースインタフェースは、マイクロコントローラとデバッグアダプ
タの両方でサポートされている必要があります。以下の表に、さまざまなデバッグアダプタでサポートされているトレース方法を示します。
機能ULINKproULINKpro-DULINK2

ST-Link v2

200 MHz

200 MHz3.75 MHz

2 MHz

シリアルワイヤ出力（SWO）
最大 SWO クロック周波数
ストリーミング用 4 ピントレー
ス出力
Embedded Trace Buffer（ETB）
マイクロトレースバッファ（MTB）

シリアルワイヤ出力を使用したトレース
シリアルワイヤトレース出力（SWO）を使用するには、次の手順に従います。
ツールバーで［Options for Target（ターゲットのオプション）］をクリックし、［Debug（デバッグ）］タブを選択します。適切なデバッグ
アダプタが選択され有効になっていることを確認します。

［Settings（設定）］ボタンをクリックします。［Debug（デバッグ）］ダイアログで、デバッグの［Port:（ポート：）］で［SW］を選択し、デバイスのデバッグユニットと通信するための［Max Clock（最大クロック）］周波数を設定します。

96

デバッグアプリケーション［Trace（トレース）］タブをクリックします。［Core Clock（コアクロック）］の設定が正しいことを確認します。［Trace Enable（トレースを有効化）］をオンにして、監視する［Trace Events（トレースイベント）］を選択します。
printf 形式のデバッグを行うには、［ITM Stimulus Port（ITM スティ
ムラスポート）］の［0］をオンにします。
RTOS イベントを表示するには、［ITM Stimulus Port（ITM スティムラ
スポート）］の［31］をオンにします。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

注
多くのトレース機能を有効にすると、シリアルワイヤ出力の通信がオーバーフローする場合があります。このような接続エラーは µVision ステータス
バーに表示されます。
ULINKpro デバッグ/トレースアダプタには高帯域幅トレースが用意されているため、このような通信のオーバーフローが起こることはまれです。トレース通信でオーバーフローを避けるために現在必要とされているトレース機能のみを有効にして下さい。

トレースの例外［Exception Trace（例外トレース）］ウィンドウには、例外と割り込みに関する統計データが表示されます。
［Trace Windows（トレースウィンドウ）］をクリックし、ツールバーから［Trace Exceptions（トレースの例外）］を選択するか、メニューで［View（表示）］ – ［Trace（トレース）］ – ［Trace Exceptions（トレースの例外）］の順に選択してウィンドウを開きます。

［Trace Exceptions（トレースの例外）］ウィンドウでデータを取得するには、次の手順に従います。


上記で説明したように、［Debug Settings Trace（デバッグ設定のトレース）］ダイアログの［Trace Enable（トレースを有効化）］を設定します。

［EXCTRC: Exception Tracing（EXCTRC：例外のトレース）］をオンにし
ます。

97

98



デバッグアプリケーション［Timestamps Enable（タイムスタンプを有効化）］を設定します。

注
ロジックアナライザで設定された変数アクセスも［Trace Data（トレースデータ）］ウィンドウに表示されます。

［Event Viewer（イベントビューア）］［Event Viewer（イベントビューア）］には、RTOS スレッドだけでなく、割り込みおよび例外のタイミング情報も表示されます。このウィンドウを開くには、メニューで［Debug（デバッグ）］ – ［OS Support（OS サポート）］ – ［Event Viewer（イベントビューア）］の順に選択します。

［Event Viewer（イベントビューア）］ウィンドウでデータを取得するには、次の手順に従います。


上記で説明したように、［Debug Settings Trace（デバッグ設定のトレース）］ダイアログの［Trace Enable（トレースを有効化）］を設定します。

CMSIS-RTOS スレッドのタイミング情報に対する［ITM Stimulus Port（ITM スティムラスポート）］の［31］をオンにします。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

割り込みおよび例外のタイミング情報の［EXCTRC: Exception Tracing（EXCTRC：例外トレース）］をオンにします。

［Timestamps Enable（タイムスタンプを有効化）］を設定します。

注
デバッガからは、トレースを行わなくても入手できる詳細な RTOS およびス
レッドのステータス情報も得られます。詳細については、「CMSIS-RTOS シ
ステムとスレッドビューア」セクション（48 ページ）を参照して下さい。

［Logic Analyzer（ロジックアナライザ）］［Logic Analyzer（ロジックアナライザ）］ウィンドウには、変数値の変化が経時的に表示されます。監視できる変数は最大 4 つです。［Logic Analyzer（ロジックアナライザ）］に変数を追加するには、デバッグモードの while
文で変数を右クリックし、［Add <variable> to…（<変数> を … に追加）］– ［Logic Analyzer（ロジックアナライザ）］の順に選択します。［Logic An
alyzer（ロジックアナライザ）］ウィンドウを開くには、［View（表示）］ –［Analysis Windows（解析ウィンドウ）］ – ［Logic Analyzer（ロジックア
ナライザ）］の順に選択します。

［Logic Analyzer（ロジックアナライザ）］ウィンドウでデータを取得するには、次の手順に従います。

99

100

デバッグアプリケーション



上記で説明したように、［Debug Settings Trace（デバッグ設定のトレース）］ダイアログの［Trace Enable（トレースを有効化）］を設定します。

［Timestamps Enable（タイムスタンプを有効化）］を設定します。

注［Logic Analyzer（ロジックアナライザ）］で監視する変数アクセスは、［Trace Data（トレースデータ）］ウィンドウにも表示されます。詳細については、『µVision ユーザガイド』の「Debugging（デバッグ）」を参照して下さい。

デバッグ (printf) ビューア
［Debug (printf) Viewer（デバッグ（printf）ビューア）］ウィンドウには、［ITM Stimulus Port（ITM スティムラスポート）］の［0］を通じて順に送信されるデータストリームが表示されます。printf() デバッグを有効にするには、56 ページで説明されているように、Compiler（コンパイラ）
ソフトウェアコンポーネントを使用します。
この fputc() 関数は、printf() メッセージを［Debug (printf) Viewer（デバッグ（printf）ビューア）］にリダイレクトします（下図を参照）。
int seconds;:
while (1) {LED_On ();delay ();
LED_Off ();delay ();
printf ("Seconds=%d\n", seconds++);}// Second counter// Switch on// Delay// Switch off// Delay// Debug output

ウィンドウを開くには、［Serial Windows（シリアルウィンドウ）］をクリックして、ツールバーから［Debug (printf) Viewer（デバッグ（printf）ビューア）］を選択するか、メニューで［View（表示）］ –［Serial Windows（シリアルウィンドウ）］ – ［Debug (printf) Viewer（デバッグ（printf）ビューア）］の順に選択します。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

101

102

デバッグアプリケーション［Debug (printf) Viewer（デバッグ（printf）ビューア）］ウィンドウでデータを取得するには、次の手順に従います。


上記で説明したように、［Debug Settings Trace（デバッグ設定のトレース）］ダイアログの［Trace Enable（トレースを有効化）］を設定します。

［Timestamps Enable（タイムスタンプを有効化）］を設定します。

［ITM Stimulus Port（ITM スティムラスポート）］の［0］をオンにします。

［Event Counters（イベントカウンタ）］［Event Counters（イベントカウンタ）］には、イベントをトリガした回数を示す累積数が表示されます。
ツールバーで［Trace Windows（トレースウィンドウ）］ – ［Event Co
unters（イベントカウンタ）］の順に選択します。
メニューで［View（表示）］ – ［Trace（トレース）］ – ［Event Counters（イベントカウンタ）］の順に選択します。
このウィンドウでデータを取得するには、次の手順に従います。


上記で説明したように、［Debug Settings Trace（デバッグ設定のトレース）］ダイアログの［Trace Enable（トレースを有効化）］を設定します。



必要に応じて、ダイアログで［Event Counters（イベントカウンタ）］を有効にします。

イベントカウンタは、次の項目を示すパフォーマンスインジケータです。


CPICNT：例外オーバーヘッドサイクル：フラッシュのウェイト状態を示します。



EXCCNT：命令あたりのエクストラサイクル：例外の頻度を示します。



SLEEPCNT：スリープサイクル：スリープモードに費した時間を示します。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

103

104

デバッグアプリケーション



LSUCNT：ロードストアユニットサイクル：マルチサイクルロードストア命
令を実行するために必要な追加サイクルを示します。



FOLDCNT：Folded 命令：ゼロサイクルで実行する命令を示します。

4 ピン出力を使用したトレース
4 ピントレース出力を使用すると、「シリアルワイヤ出力を使用したトレース」セクションに記載されているすべての機能を使用できますが、トレース
通信帯域幅は高くなります。命令トレースも可能です。
ULINKpro デバッグ/トレースアダプタは、プログラムの実行を詳細に把握できるこのパラレル 4 ピントレース出力（ETM トレースとも呼ばれる）をサ
ポートしています。

注
以下に記載されている機能の詳細については、『µVision ユーザガイド』の「Debugging（デバッグ）」を参照して下さい。
ULINKpro と組み合わせて使用すると、MDK は以下の高度な解析機能の命令
トレースデータをストリーミングできます。
［Code Coverage（コードカバレッジ）］は、実行済みのコードをマーク
し、コード実行に関する統計を提供します。この機能は突発的な実行エ
ラーの特定に役立つため、ソフトウェア認証の要件となっていることがよくあります。

［Performance Analyzer（パフォーマンスアナライザ）］では、関数およびプログラムブロックの実行時間を記録し、それを表示します。ここにはプロセッサのサイクル使用状況が表示され、アルゴリズムのホットス
ポットを特定して最適化できます。

［Trace Data（トレースデータ）］ウィンドウには、Cortex-M デバイスで実行された命令の履歴が表示されます。

オンチップトレースバッファを使用したトレース


場合によっては、マイクロコントローラまたはターゲットハードウェアでトレース出力ピンを使用できないことがあります。代替方法として、［Trace Data（トレースデータ）］ウィンドウをサポートするオンチップト
レースバッファを使用できます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

ミドルウェア
今日のマイクロコントローラデバイスには、多くのエンベデッド設計要件を満
たすさまざまな通信ペリフェラルが用意されています。このような複雑なオンチップペリフェラルを効率的に使用するには、ミドルウェアが不可欠です。

注
本章では、MDK-Professional に含まれているミドルウェアについて説明しま
す。MDK は、他のさまざまなベンダのミドルウェアでも使用できます。
公開されているソフトウェアパックの一覧については、http://www.keil.com/p
ack を参照して下さい。
MDK-Professional ソフトウェアパックには、TCP/IP ネットワーク、USB ホ
ストと USB デバイスの通信、データ保存用のファイルシステム、およびグ
ラフィカルユーザインタフェースのコンポーネントを備えた、ロイヤルティ
フリーのミドルウェアが含まれています。
MDK-Professional の一部として提供されているミドルウェアの詳細については、www.keil.com/mdk5/middleware を参照して下さい。

105

106

ミドルウェア

この Web ページには、以下のミドルウェアの概要とリンクが記載されています。


MDK-Professional Middleware のユーザガイドデバイス固有のドライバに関する情報を記載したデバイスリスト



サンプルプロジェクトの情報と使用方法

ミドルウェアは、デバイス固有の CMSIS ドライバを使用してデバイスペリ
フェラルとのインタフェースをとります。詳細については、「CMSIS ドライ
バ」セクション（52 ページ）を参照して下さい。
マイクロコントローラアプリケーションでは、複数のコンポーネントを組み合わせることがよくあります。［Manage Run-Time Environment（実行時環境の管理）］ダイアログを使用すると、MDK-Professional Middleware を簡単に選択して組み合わせることができます。ソフトウェアパックとして提供されているサードパーティ製コンポーネントをミドルウェアコンポーネントのリストに追加することもできます。
MDK-Professional Middleware の一般的な使用例は次のとおりです。


ストレージ機能を備えた Web サーバ：ネットワークおよびファイルシス
テムコンポーネントUSB メモリスティック：USB デバイスおよびファイルシステムコンポーネント表示およびログ機能を備えた産業用制御ユニット：グラフィックス、USB
ホスト、およびファイルシステムコンポーネント

複数のミドルウェアコンポーネントの組み合わせ例を示した「FTP サーバ
サンプル」セクション（115 ページ）を参照して下さい。

これ以降のセクションでは、MDK-Professional Middleware の各ソフトウェ
アコンポーネントの概要について説明します。

注
インストールすると、MDK-Professional の 7 日間評価ライセンスが付与されます。詳細については、「インストール」の章（10 ページ）を参照して下さい。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

107

ネットワークコンポーネント
ネットワークコンポーネントは TCP/IP 通信プロトコルを使用し、サービス、
プロトコルソケット、および物理通信インタフェースをサポートしています。
IPv4 および IPv6 接続がサポートされています。

さまざまなサービスから、共通ネットワークタスク用のプログラムテンプ
レートが提供されています。
コンパクト Web サーバは Web ページを ROM に保存し、フル Web サーバ
は［File System（ファイルシステム）］コンポーネントを使用してページ
データを保存します。どちらのサーバも、CGI スクリプト、AJAX、およびSOAP テクノロジを使用して、動的なページコンテンツをサポートします。

FTP または TFTP はファイル転送をサポートします。FTP はすべてのファ
イル操作コマンドを備え、TFTP はリモートデバイスをブートロードできます。どちらもクライアントとサーバで使用できます。



Telnet サーバは、IP ネットワークのコマンドラインインタフェースを提
供します。



SNMP エージェントは、シンプルネットワークマネージメントプロトコルを使用して、ネットワークマネージャにデバイス情報を通知します。

108

ミドルウェア

DNS クライアントは、それぞれの IP アドレスに対してドメイン名を解決します。自由に設定可能なネームサーバを利用します。



SNTP クライアントはクロックを同期し、デバイスがデータネットワーク
上で正確な時間信号を取得できるようになります。



SMTP クライアントは、簡易メール転送プロトコルを使用してステータス
電子メールを送信します。

すべてのサービスは通信ソケットに依存しており、これは、TCP（接続指向、信頼性の高いフルデュプレックスプロトコル）、UDP（データストリーミン
グを行うトランザクション指向プロトコル）、または BSD（バークレーソ
ケットインタフェース）のいずれかである可能性があります。
物理インタフェースは、イーサネット（LAN 接続向け）か、PPP（2 つのデバイス間の直接接続向け）または SLIP（シリアル接続を介したインター
ネットプロトコル）などのシリアル接続のいずれかである可能性があります。
インタフェースによっては、ネットワークコンポーネントがデバイス固有のハードウェアインタフェースを提供するために CMSIS ドライバに依存するものがあります。イーサネットではイーサネット MAC および PHY ドライバが必要で、シリアル接続（PPP/SLIP）では UART またはモデムドライバが必
要になります。
ネットワークコアは、さまざまな診断メッセージを備えたデバッグ バリア
ント、およびこれらの診断を省略するリリース バリアントで使用できます。
IPv4 および IPv6 を使用した IP 通信をサポートします。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

109

ファイルシステム コンポーネント
ファイルシステムコンポーネントを使用すると、組み込みアプリケーションを使用して、RAM、NAND や NOR 型フラッシュ、メモリカード、または USB
メモリスティックなどのストレージデバイスでファイルの作成、保存、読み出し、変更を行うことができます。

各ストレージデバイスは、ドライブとしてアクセスおよび参照できます。
ファイルシステムコンポーネントは同じ種類の複数のドライブをサポートします。例えば、システムで複数のメモリカードを使用することができます。
ファイルシステムコアはスレッドセーフで、複数のドライブに同時にアクセスでき、8.3 形式の短いファイル名と最大 255 文字の長いファイル名の 2つのファイル名バリアントで使用できる FAT システムを使用します。
NAND および NOR 型フラッシュチップや、MCI または SPI を使用したメモリ
カードなどの物理メディアにアクセスするには、CMSIS ドライバが必要です。

110

ミドルウェアUSB コンポーネント
USB デバイスコンポーネントは USB ホストおよびデバイスの機能を実装し、ほとんどのコンピュータシステムで使用できる標準デバイスドライバクラス
を使用します。ホストドライバを開発する必要はありません。

ヒューマンインタフェースデバイスクラス（HID）は、キーボード、ジョイスティック、またはマウスを実装します。ただし、HID は単純なデータ交換にも使用できます。



マスストレージクラス（MSC）は、ファイル交換に使用します（USB メモ
リスティックなど）。



通信デバイスクラス（CDC）は、仮想シリアルポート（サブクラス ACM を使用）またはネットワーク接続（サブクラス NCM を使用）を実装します。

オーディオデバイスクラス（ADC）は、オーディオストリーミングを行います。

カスタムクラスは、新しい USB クラスかサポートされていない USB クラスに使用します。

USB コンポーネントは、複数のデバイスクラスを実装する複合 USB デバイ
スをサポートします。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

このコンポーネントには、USB CMSIS ドライバが必要です。アプリケーション
によっては、USB 1.1（Full-Speed USB）や USB 2.0（High-Speed USB）仕様に準拠する必要があります。

111

112

ミドルウェアグラフィックスコンポーネント
グラフィックスコンポーネントは、グラフィカルユーザインタフェースの構築に必要な内容がすべて含まれている、包括的なライブラリです。

中心的な機能は次のとおりです。


任意の数のウィンドウまたはダイアログを操作するウィンドウマネージャ。



そのままの状態で使用できるフォント、およびウィジェットやダイアロ
グと呼ばれるウィンドウ要素。

JPEG やその他の一般的な形式を含む、ビットマップサポート。



表示を滑らかにするアンチエイリアシング。



柔軟性が高く設定可能なディスプレイおよびユーザインタフェースパラ
メータ。



ユーザインタフェースは、タッチスクリーンやジョイスティックなどの入力デバイスを使用して制御できます。

グラフィックスコンポーネントは、一般的なディスプレイ向けに事前設定されたインタフェースを使用して、さまざまなディスプレイコントローラとのインタフェースをとります。新しいディスプレイ向けのサポートを追加する
インタフェーステンプレートに対応します。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

113

VNC サーバを使用すると、ネットワークコンポーネントを使用して TCP/IP
を介してグラフィカルユーザインタフェースをリモート制御できます。
デモはすべての主要機能を示し、GUI の豊富なコードスニペットの基になります。

ミドルウェアバージョン 7 への移行
MDK には、µVision プロジェクトを新しいミドルウェアバージョン 7 に移行するときに役立つ内蔵機能が揃っています。大部分のコンポーネントでは、コンフィギュレーションファイルの更新のみが必要になります（以下を参照）。ただし、ネットワークコンポーネントは、IPv4 のみのサポートから
IPv4/IPv6 のデュアルスタックサポートに変更されるため、それ以外の移行作業も必要となります。

ネットワークコンポーネントの変更点
コアの変更
これまで、ネットワークコンポーネントのコアは Release または Debug バ
リアントで利用できました。ミドルウェア v7 では、これが IPv4/IPv6 Release または IPv4/IPv6 Debug に変更されます。旧コンポーネントでプロジェクトを開くと、［Build Output（ビルド出力）］ウィンドウにエラーが表示されます。対応する新しいバリアントに変更して下さい。

114

ミドルウェアコンフィギュレーションファイルの更新µVision の［Project（プロジェクト）］ウィンドウに特別なアイコンが表示され、更新が必要なコンフィギュレーションファイルがハイライトされます。これまでのコンフィギュレーションファイルを上書きするか、更新して内容をマージするかを選択できます。

［Tools（ツール）］［Configure Merge Tool（マージツールの設定）］に移動し、選択するマージツールを指定します。

API の変更点
ネットワークコンポーネントのマニュアルには、旧 API から新 API へのプ
ロジェクトの移行方法に関するセクションが用意されています。このセクションには、サービス、ソケット、およびインタフェースの移行に関する一
般的な推奨事項や、ミドルウェア v5/v6 から移行しているのか RL-TCPnet
から移行しているのるかに応じた API の対照比較が記載されています。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

FTP サーバサンプル
FTP サーバサンプルは、複数のミドルウェアコンポーネントの組み合わせを示す参照アプリケーションです。使用できるさまざまなサンプルプロジェク
トの詳細については、「サンプルプロジェクトを使用したインストールの検証」セクション（14 ページ）を参照して下さい。
FTP サーバを使用すると、TCP/IP ネットワーク上でファイルを交換および操作できます。ミドルウェアのマニュアルには、FTP サーバおよび参照アプ
リケーションの詳細が記載されています。

115

116

ミドルウェア

複数のミドルウェアコンポーネントがこの FTP サーバのビルディングブ
ロックになっています。ファイルシステムはファイル操作を行うときに必要です。ネットワークコンポーネントのさまざまなパーツがネットワーキング
インタフェースを構築します。
FTP サーバサンプルを作成するには、MDK-Professional Middleware の以下のソフトウェアコンポーネントが必要です。

前述のとおり、CMSIS ドライバには、マイクロコントローラペリフェラルと
MDK-Professional Middleware 間のインタフェースが装備されています。
［Manage Run-Time Environment（実行時環境の管理）］ダイアログには、FTP サーバサンプル用に選択されたソフトウェアコンポーネントが示されています。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

ミドルウェアの使用
MDK-Professional Middleware コンポーネントを使用して、独自のアプリ
ケーションを作成します。詳細については、『MDK-Professional Middlewar
e ユーザガイド』を参照して下さい。このガイドには、以下の内容について
コンポーネントごとに説明しているセクションがあります。
「サンプルプロジェクト」では、ソフトウェアコンポーネントの主要な製品機能について概説します。サンプルは、複数の評価ボードでテスト、実装、および実証されています。参照アプリケーションまたは開発の基礎として使用して下さい。

「リソース要件」では、CMSIS-RTOS およびメモリフットプリントのス
レッドおよびスタックリソースについて説明します。

「アプリケーションの作成」には、組み込みアプリケーションのコンポー
ネントを使用するときに必要な手順が記載されています。

「参考文献」には、API およびファイルドキュメントが含まれています。

学習プラットフォーム（www.keil.com/learn）には、ミドルウェアの一般的な使用事例を示すチュートリアルやビデオが用意されています。また、以下のアプリケーションノートも参照して下さい。
www.keil.com/appnotes/docs/apnt_268.asp – ファイルシステムおよびグラフィカルユーザインタフェースを使用した USB ホストアプリケー
ション。

117

118

ミドルウェアの使用

www.keil.com/appnotes/docs/apnt_271.asp – Web 対応 MEMS センサプ
ラットフォーム。

www.keil.com/appnotes/docs/apnt_272.asp – Web 対応ボイスレコーダ。

www.keil.com/appnotes/docs/apnt_273.asp – USB デバイスインタ
フェースを備えたアナログ/デジタルデータロガー。

さまざまなミドルウェアコンポーネントを使用する一般的な手順は以下のとおりです。


ソフトウェアコンポーネントの追加（120 ページ）：［Manage Run-Time
Environment（実行時環境の管理）］ダイアログで、アプリケーションに必要なソフトウェアコンポーネントを選択します。



ミドルウェアの設定（122 ページ）：関連するコンフィギュレーション
ファイルで、ソフトウェアコンポーネントのパラメータを調整します。



ドライバの設定（124 ページ）：ミドルウェアコンポーネントをマイクロ
コントローラの物理 I/O ピンに接続するペリフェラルインタフェースを識別して設定します。



システムリソースの調整（125 ページ）：ミドルウェアコンポーネントはRTOS、メモリ、およびスタックリソースを使用し、これにより、CMSIS-RT
OS RTX などへの設定が暗黙的に行われる場合があります。



アプリケーション機能の実装（128 ページ）：選択したコンポーネントのAPI 関数を使用して、アプリケーション固有の動作を実装します。コード
テンプレートを使用すると、関連するソースコードを簡単に作成できます。



ビルドとダウンロード（131 ページ）：アプリケーションのコンパイルとリンク付けを行った後、「デバッガの使用」の章（84 ページ）で説明す
る手順に従って、イメージをターゲットハードウェアにダウンロードします。



検証とデバッグ（132 ページ）：テストユーティリティとデバッグおよびトレース機能については、「アプリケーションの作成」の章（60 ページ）で説明しています。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

USB デバイス HID サンプル

前述の手順は一般的なものであり、MDK-Professional Middleware のすべてのコンポーネントに適用されますが、以下の USB デバイス HID サンプ
ルではこれらの手順を実践しています。このサンプルでは、USB を介してマイクロコントローラをホストコンピュータに接続する USB HID デバイ
スアプリケーションを作成します。PC でユーティリティプログラム HIDC
lient.exe を使用して、開発ボードの LED を制御します。



この USB デバイス HID サンプルでは、LPC1857 マイクロコントローラが搭載された MCB1800 開発ボードを使用します。このサンプルは、「CMSIS-RTOS RTX を使用した Blinky」プロジェクト（61 ページ）、ソース
ファイル main.c、LED.c、LED.h、およびコンフィギュレーションファイ
ルを基にしています。

注
他のスタータキットまたは評価ボードでこのサンプルを使用する場合は、
コードおよびピン設定を調整する必要があります。このサンプルは、CMSIS
ドライバをサポートしている多くのマイクロコントローラデバイスファミリの Pack Installer でビルド済みプロジェクトとして使用できます。

119

120

ミドルウェアの使用

ソフトウェアコンポーネントの追加
USB デバイス HID サンプルを作成するには、「CMSIS-RTOS RTX を使用した
Blinky」プロジェクト（61 ページ）から始めます。
［Manage Run-Time Environment（実行時環境の管理）］ダイアログを使用して、特定のソフトウェアコンポーネントを追加します。
USB コンポーネント（110 ページで説明）から、以下の操作を行います。
::USB:CORE を選択して、USB 通信に必要な基本機能を含めます。

::USB:Device を［1］に設定して、1 つの USB デバイスインスタンスを作成します。

::USB:Device:HID を［1］に設定して、HID デバイスクラスインスタン
スを作成します。同じクラスの複数のインスタンスを選択したり、他のデ
バイスクラスを含めたりした場合は、複合 USB デバイスが作成されます。

USB コンポーネント（110 ページで説明）から、以下の操作を行います。
::Drivers:USB Device (API) から、アプリケーションに適したドライバを選択します。デバイスによっては USB Full-Speed および High-Speed
向けの固有のドライバが用意されている場合もあるほか、複合版ドライバを備えたマイクロコントローラもあります。ここでは、［USB0］を選択します。

ヒント：［Description（説明）］列のハイパーリンクをクリックすると、各ソ

フトウェアコンポーネントの詳細なマニュアルが表示されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

以下の図は、これらのコンポーネントを追加した後の［Manage Run-Time En
vironment（実行時環境の管理）］ダイアログです。

121

122

ミドルウェアの使用

ミドルウェアの設定
すべての MDK-Professional Middleware コンポーネントには、アプリケー
ション固有のパラメータを調整してドライバインタフェースを決定するコン
フィギュレーションファイルのセットがあります。これらのコンフィギュ
レーションファイルには、コンポーネントクラスグループの［Project（プロジェクト）］ウィンドウからアクセスします。通常、ファイル名は <コン
ポーネント名>_Config_0.c または <コンポーネント名>_Config_0.h のようになります。
これらのファイルの設定の中には、ドライバおよびデバイスのコンフィギュ
レーションファイル（RTE_Device.h）に対応する設定が必要なものがあります。これについては次のセクションで説明します。
USB HID デバイスサンプルには、USBD_Config_0.c と USBD_Config_HID_0.hの 2 つのコンフィギュレーションファイルがあります。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

123

USBD_Config_0.c ファイルには、特定の USB デバイス用の重要な設定が数多く含まれています。
［Connect to Hardware via Driver_USBD#（Driver_USBD# を介してハードウェアに接続）］設定では、ペリフェラルインタフェースを反映する c
ontrol struct を指定します。この場合は、デバイスインタフェースとして使用する USB コントローラです。USB コントローラが 1 つしかないマ
イクロコントローラの場合、数字は「0」です。詳細については、「CMSIS
ドライバ」セクション（52 ページ）を参照して下さい。

USB コントローラでサポートされている場合は、［High-Speed（高速）］を選択します。この設定を使用するには、USB High-Speed 通信をサポートするドライバが必要です。

［Vendor ID（ベンダ ID）］（VID）をプライベート VID に設定します。
USB Implementer’s Forum（http://www.usb.org/developers/vendor）には、有効なベンダ ID の適用方法に関する詳細な情報が記載されています。

各デバイスには固有の製品 ID が必要です。ホストコンピュータのオペ
レーティングシステムは、製品 ID を VID と共に使用して、デバイスに適したドライバを検出します。

PC のオペレーティングシステムで USB デバイスを識別するために、［Manufacturer（製造元）］および［Product String（製品文字列）］を設定します。

USBD_Config_HID_0.h ファイルには、デバイスクラス固有のエンドポイント
設定が含まれています。このサンプルでは、変更する必要はありません。

124

ミドルウェアの使用

ドライバの設定
ドライバには、I/O ピン割り当て、クロック設定、DMA チャネルの使用法な
どの属性を定義する所定のプロパティがあります。多くのデバイスでは、このようなドライバプロパティは RTE_Device.h コンフィギュレーションファ
イルに含まれています。通常は、アプリケーションが使用する実際のペリ
フェラルインタフェースの設定が必要です。マイクロコントローラデバイス
によっては、別のハードウェアペリフェラルを有効にしたり、ピン設定を指定したり、実装するクロック設定を変更したりできる場合があります。
USB HID デバイスサンプルは、以下のように設定する必要があります。
［USB0 Controller（USB0 コントローラ）］をオンにして、このセクションを拡張します。



以下に示すように、［Pin Configuration（ピン設定）］を変更します。

Device:High-speed をオンにします。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

125

システムリソースの調整
各ミドルウェアコンポーネントには所定のメモリおよび RTOS リソースの要件があります。『MDK-Professional Middleware ユーザガイド』の「リソース要件」セクションには、各コンポーネントの要件が記載されています。

ほとんどのミドルウェアコンポーネントでは CMSIS-RTOS を使用します。要件をサポートするように RTOS が設定されていることが重要です。
CMSIS-RTOS RTX では、RTX_Conf_CM.c ファイルによってスレッドおよびス
タックが設定されます。詳細については、「CMSIS-RTOS RTX コンフィギュ
レーション」セクション（40 ページ）を参照して下さい。
USB HID デバイスサンプルでは、以下の設定が適用されます。
::USB:Device コンポーネントには、USBDn_CoreThread という 1 つのス
レッドとユーザが指定した 512 バイトのスタックが必要です。



また、::USB:Device:HID コンポーネントには、USBD_HIDn_Thread という 1 つのスレッドとユーザが指定した 512 バイトのスタックが必要です。

126

ミドルウェアの使用

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

これらの要件を RTX_Conf_CM.c ファイルの設定に反映させます。
［Number of concurrent running threads（同時実行中のスレッド数）］：
USB デバイスコンポーネントの 2 つのスレッドを同時に実行するには 6（デフォルト）で十分です。ユーザアプリケーションでさらに多くのスレッ
ドを実行する場合は、この設定を調整します。

［Default Thread stack size [bytes]（デフォルトのスレッドのスタッ
クサイズ [バイト]）］：USB コンポーネントはユーザが指定したスタックで実行されるため、この設定は重要ではありません。

［Main Thread stack size [bytes]（メインスレッドスタックサイズ[バイト]）］：値は 512。USB デバイスコンポーネントを初期化する API
呼び出しにはスタックが必要です。

［Number of threads with user-provided stack size（ユーザが指定したスタックサイズのスレッド数）］：値は 2。ユーザが指定したスタックを持つ
2 つのスレッド（::USB:Device および ::USB:Device:HID 用）を指定します。

［Total stack size [bytes] for threads with user-provided stack size
（ユーザが指定したスタックサイズのスレッドの合計スタックサイズ [バイト]）」：値は 1024。2 つのスレッドの合計スタックサイズを指定します。

［Timer Clock value [Hz]（タイマクロック値 [Hz]）］はシステムク
ロック（180000000）と一致する必要があります。

127

128

ミドルウェアの使用

アプリケーション機能の実装
アプリケーション固有の機能を実装するコードを作成します。ここには、CM
SIS-RTOS RTX を使用した Blinky プロジェクト（61 ページ）で最初に作成された main.c、LED.c、および LED.h ファイルに対する変更が含まれています。
このミドルウェアは、アプリケーションソフトウェアの基礎として、ユーザ
コードテンプレートを提供します。
［Project（プロジェクト）］ウィンドウで、［Source Group 1（ソースグループ 1）］を右クリックし、［Add New Item to Group（新規項目をグループに追加）］ダイアログを開きます。::USB:Device:HID – ［USBDevice HID (Human Interface Device)（USB デバイス HID（ヒューマン
インタフェースデバイス））］でユーザコードテンプレートを選択し、［Add（追加）］をクリックします。

PC USB アプリケーションをマイクロコントローラデバイスに接続するには、
USBD_HID0_SetReport() 関数を変更します。この関数は USB ホストのデー
タを処理します。例えば、データは HIDClient.exe ユーティリティを使用して作成されます。

スタートガイド：MDK バージョン 5 でアプリケーションを作成するエディタで USBD_User_HID_0.c ファイルを開き、以下のようにコードを変更します。こうすることによって、評価ボードの LED を制御します。
#include "LED.h"// access functions to LEDs:
bool USBD_HID0_SetReport (uint8_t rtype, uint8_t req, uint8_t rid,
const uint8_t *buf, int32_t len) {uint8_t i;switch (rtype) {case HID_REPORT_OUTPUT:
for (i = 0; i < 4; i++) {if (*buf & (1 << i)) LED_On (i);else
LED_Off (i);}break;
case HID_REPORT_FEATURE:
break;}
return true;
}

129

130

ミドルウェアの使用

LED.c ファイルで関数を拡張してボード上の複数の LED を制御し、LED を点滅させるスレッドはもう必要ないため削除します。
エディタで LED.c ファイルを開き、以下のようにコードを変更します。
/*-----------------------------------------------------------------------* File LED.c*----------------------------------------------------------------------*/#include "SCU_LPC18xx.h"#include "GPIO_LPC18xx.h"#include "cmsis_os.h"// ARM::CMSIS:RTOS:Keil RTX
const GPIO_ID LED_GPIO[] = {{ 6, 24 },{ 6, 25 },{ 6, 26 },{ 6, 27 }};void LED_Initialize (void) {GPIO_PortClock(1);// LED GPIO definitions// Enable GPIO clock/* Configure pin: Output Mode with Pull-down resistors */SCU_PinConfigure (13, 10, (SCU_CFG_MODE_FUNC4|SCU_PIN_CFG_PULLDOWN_EN));GPIO_SetDir(6, 24, GPIO_DIR_OUTPUT);GPIO_PinWrite(6, 24, 0);
SCU_PinConfigure (13, 11, (SCU_CFG_MODE_FUNC4|SCU_PIN_CFG_PULLDOWN_EN));GPIO_SetDir(6, 25, GPIO_DIR_OUTPUT);GPIO_PinWrite(6, 25, 0);
SCU_PinConfigure (13, 12, (SCU_CFG_MODE_FUNC4|SCU_PIN_CFG_PULLDOWN_EN));GPIO_SetDir(6, 26, GPIO_DIR_OUTPUT);GPIO_PinWrite(6, 26, 0);
SCU_PinConfigure (13, 13, (SCU_CFG_MODE_FUNC4|SCU_PIN_CFG_PULLDOWN_EN));GPIO_SetDir(6, 27, GPIO_DIR_OUTPUT);GPIO_PinWrite(6, 27, 0);}
void LED_On (uint32_t num) {GPIO_PinWrite(LED_GPIO[num].port, LED_GPIO[num].num, 1);}
void LED_Off (uint32_t num) {GPIO_PinWrite(LED_GPIO[num].port, LED_GPIO [num].num, 0);}スタートガイド：MDK バージョン 5 でアプリケーションを作成するエディタで LED.h ファイルを開き、LED.c に対して行った変更と一致するように変更します。LED_On() および LED_Off() 関数にはパラメー
タがあります。
/*-----------------------------------------------------------------------* File LED.h*----------------------------------------------------------------------*/
void LED_Initialize ( void );void LED_On ( uint32_t num );void LED_Off ( uint32_t num );main.c ファイルを以下のように変更します。LED を点滅させるスレッドを開始させずに、USB デバイスコンポーネントを初期化して開始する
コードを追加します。詳細については、『ミドルウェアユーザガイド』
を参照して下さい。
/*-----------------------------------------------------------------------* File main.c*----------------------------------------------------------------------*/#define osObjectsPublic// define objects in main module#include "osObjects.h"// RTOS object definitions#include "LPC18xx.h"// Device header#include "LED.h"// Initialize and set GPIO Port
#include "rl_usb.h"// Keil.MDK-Pro::USB:CORE/** main: initialize and start the system*/
int main (void) {osKernelInitialize ();// Initialize CMSIS-RTOS// initialize peripherals here
LED_Initialize ();// Initialize LEDs
USBD_Initialize (0);USBD_Connect (0);// USB Device 0 Initialization// USB Device 0 Connect

osKernelStart ();while (1);// Start thread execution}

ビルドとダウンロード「アプリケーションの作成」の章（60 ページ）および「デバッガの使用」の章（84 ページ）の説明に従って、プロジェクトをビルドしてターゲットにダウンロードします。

131

132

ミドルウェアの使用検証とデバッグ
別の USB ケーブルを使用して、PC に開発ボードを接続します。これで、マイクロコントローラの USB デバイスペリフェラルに接続されます。ボードが接続されると、USB HID デバイスのデバイスドライバがインストールされたことを示す通知が表示されます。
MDK に含まれている HIDClient.exe ユーティリ
ティプログラムにより、PC と開発ボード間の接続をテストできます。このユーティリティは、MD
K インストールフォルダ .\Keil\ARM\Utilities\HID_Client\Release にあります。

USB HID デバイスの機能をテストするには、HIDC
lient.exe ユーティリティを実行して、次の手順に従います。


通信チャネルを確立するデバイスを選択します。この例では、［Keil USB
Device（Keil USB デバイス）］です。

［Outputs (LEDs)（出力（LED））］チェックボックスを変更して、アプ
リケーションをテストします。開発ボードで、それぞれの LED が切り替わります。

開発ボードとの接続に問題がある場合は、デバッガを使用すると根本原因を明らかにできます。
ツールバーで［Start/Stop Debug Session（デバッグセッションの開始/停止）］を選択します。

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

デバッグウィンドウを使用して問題を絞り込みます。例えば、［Call Stack+ Locals（コールスタックとローカル）］ウィンドウを使用して、USBD_Use
r_HID_0.c ファイルのローカル変数の値を調べます。ブレークポイントは、コードの所定の行で停止して変数の内容を調べるときに役立ちます。

注
通信プロトコルのデバッグは難しい場合があります。デバッガを開始したり
ブレークポイントを使用したりすると、通信プロトコルのタイムアウト時間を超える場合があるため、アプリケーションのデバッグが難しくなります。
ブレークポイントは慎重に使用して下さい。
USB接続に失敗した場合は、USB 接続を切断して、ターゲットハードウェア
をリセットし、アプリケーションを実行してから、もう一度 PC に接続して
下さい。

133

134

索引

索引
［

I

［Code Coverage（コードカバレッジ）］............................... 96

I/O 出力のターゲット変更 ......... 53［Debug（デバッグ）］タブ .... 19, 78

M［Performance Analyzer（パフォーマン
スアナライザ）］ ............... 96

MDK：インストールの要件 .......... 10［Start/Stop Debug Session（デバッグセッションの開始/停止）］ ...... 20

MDK：コア ........................ 8［デバッグセッションの開始/停止］（Start/Stop Debug Session） . 79, 123

MDK：ライセンスの種類 ............ 10B

MDK：エディション................. 9

MDK：コアのインストール .......... 10

MDK：紹介 ........................ 8
MDK：試用版ライセンス ............ 13

Board Support（ボードサポート） .. 55

CP
Pack Installer................... 11

CMSIS ............................ 28
CMSIS：CORE ...................... 29

R

CMSIS：DSP ....................... 46

RTOS デバッグ：［Event Viewer（イベントビューア）］ .............. 92

CMSIS：ソフトウェアコンポーネント、一覧............................. 29

RTOS デバッグ：ITM スティムラス .. 92

CMSIS：ユーザコードテンプレート .. 41

RTOS：システムとスレッドビューア . 45

cmsis_os.h ....................... 64

RTOS：シングルスレッドプログラム . 44

CMSIS-DAP ........................ 77

RTOS：スレッド管理 ............... 43

CoreSight ........................ 88

RTOS：プリエンプティブなスレッド切り
替え .......................... 44

D

RTX ............................. 33

DAVE ............................. 69

RTX：API 関数.................... 42

H

RTX：RTOS カーネルのメリット ..... 34

HIDClient.exe ................... 123

RTX：RTX の使用.................. 35
RTX：コンフィギュレーション ...... 38
RTX：スレッドスタックコンフィギュスタートガイド：MDK バージョン 5 でアプリケーションを作成する

レーション ..................... 39オ

RTX：タイマ Tick コンフィギュレー
ション ......................... 40

オブジェクト定義の定義と参照 ..... 37

RTX：概念 ........................ 34

ク

RTX_Conf_CM.c ................... 117

クイックスタートガイド ........... 28U

グ

ULINK ............................ 77

グラフィックスコンポーネント：
VNC サーバ ................... 105

ULINKpro ..................... 91, 96
USB デバイス：ADC ............... 102
USB デバイス：CDC ................ 102
USB デバイス：HID ............... 102
USB デバイス：MSC ............... 102

グラフィックスコンポーネント：
アンチエイリアシング ......... 104
グラフィックスコンポーネント：
ウィジェット ................. 104

USB デバイス：複合デバイス ...... 102

グラフィックスコンポーネント：
ウィンドウマネージャ ......... 104

ア

グラフィックスコンポーネント：
ジョイスティック ............. 104

アプリケーション：CMSIS-RTOS RTX を使用した Blinky ................ 57

グラフィックスコンポーネント：
ダイアログ ................... 104

アプリケーション：RTX タイマのカスタマイズ ................... 62

グラフィックスコンポーネント：
タッチスクリーン ............. 104

アプリケーション：ソースコードの追加........................... 63

グラフィックスコンポーネント：
ディスプレイ ................. 104

アプリケーション：デバイスクロック
周波数の設定 ................... 60

グラフィックスコンポーネント：
デモ ......................... 105

アプリケーション：デバッグ ....... 77

グラフィックスコンポーネント：
ビットマップサポート ......... 104

アプリケーション：ビルド ......... 66
アプリケーション：プロジェクトのセットアップ ................... 58
アプリケーション：ユーザコード
テンプレート ................... 63

グラフィックスコンポーネント：
フォント ..................... 104
グラフィックスコンポーネント：
ユーザインタフェース ......... 104

アプリケーション：作成 ........... 56

サ

アプリケーション：実行時環境の管理........................... 58

サポート ........................ 27
サンプルコード：Blinky、

135

136

索引

RTOS................... 64, 65, 66
サンプルコード：Blinky、
無限ループ ................. 67, 68

ソフトウェアパックのバージョン
管理 .......................... 24
ソフトウェアパックの選択 ......... 24

サンプルコード：CMSIS-CORE
レイヤ ......................... 32

タ

サンプルコード：CMSIS-DSP
ライブラリ関数 ................. 47

ターゲットのオプション ....... 19, 78

サンプルコード：CMSIS-RTOS RTX
関数........................... 36
サンプルコード：DAVE のマクロ定義........................... 70
サンプルコード：osObjectsExternal 37
サンプルコード：PLL パラメータの設定........................... 61
サンプルコード：STM32Cube のクロックセットアップ ........... 73
サンプルプロジェクト ......... 14, 98

ソ
ソフトウェアコンポーネント：
Compiler（コンパイラ） ......... 53
ソフトウェアコンポーネント：概要 . 23
ソフトウェアパック ................ 9デ
デバイスデータベース ............. 12
デバイス起動の例：DAVE の使用 .... 69
デバイス起動の例：DAVE を使用したクロックセットアップの変更 .. 71
デバイス起動の例：STM32Cube ...... 72
デバイス起動の例：プロジェクトのセットアップ、STM32Cube ... 72, 74
デバッグ (printf) ビューア ....... 94
デバッグ：［Breakpoints（ブレークポイント）］ウィンドウ .......... 82
デバッグ：［Command（コマンド）］ウィンドウ .................... 80
デバッグ：［Disassembly（逆アセンブリ）］ウィンドウ .............. 81

ソフトウェアパック：インストール . 11

デバッグ：［Memory（メモリ）］ウィン
ドウ .......................... 85

ソフトウェアパック：インストールの検証........................... 14

デバッグ：［Register（レジスタ）］
ウィンドウ .................... 85

ソフトウェアパック：バージョンの管理........................... 24

デバッグ：［Stack and Locals（スタックとローカル）］ウィンドウ .... 84

ソフトウェアパック：使用 ......... 20

デバッグ：［System Viewer（システムビューア）］ウィンドウ ........ 87

ソフトウェアパック：手動でインストール ....................... 12

デバッグ：［Watch（ウォッチ）］ウィ
ンドウ ........................ 83

ソフトウェアパック：製品ライフサイクル ................... 23

デバッグ：セッションの開始 ....... 79

ソフトウェアパック：選択 ......... 24

デバッグ：ツールバー ............. 79

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

デバッグ：デバッガの使用 ......... 78
デバッグ：ブレークポイント ....... 82
デバッグ：ペリフェラルレジスタ ... 86

ネ
ネットワークコンポーネント：BSD . 100

デバッグ：接続 ................... 77

ネットワークコンポーネント：
DNS クライアント ............. 100

トネットワークコンポーネント：FTP .. 99

トレース ......................... 87
トレース：［Debug (printf) Viewer（デバッグ（printf）ビューア）］ 9
4
トレース：［Event Counters（イベントカウンタ）］ ................... 95
トレース：［Event Viewer（イベントビューア）］ ................... 92
トレース：［Logic Analyzer（ロジック
アナライザ）］ ................. 93

ネットワークコンポーネント：PPP . 100
ネットワークコンポーネント：
SLIP ......................... 100
ネットワークコンポーネント：
SMTP クライアント ............ 100
ネットワークコンポーネント：
SNMP エージェント .............. 99
ネットワークコンポーネント：
SNTP クライアント ............ 100
ネットワークコンポーネント：TCP . 100

トレース：［Trace Data（トレースデータ）］ウィンドウ ............... 96

ネットワークコンポーネント：
Telnet サーバ ................. 99

トレース：4 ピントレース出力 . 88, 96

ネットワークコンポーネント：TFTP . 99

トレース：ETB .................... 88

ネットワークコンポーネント：
UART ......................... 100

トレース：ITM スティムラス ... 90, 94
トレース：MTB .................... 88
トレース：SWO ................ 88, 89
トレース：TPIU ................... 88
トレース：インストルメント化トレース............................... 88

ネットワークコンポーネント：UDP . 100
ネットワークコンポーネント：
Web サーバ .................... 99
ネットワークコンポーネント：
イーサネット ................. 100

トレース：データウォッチポイント . 88

ネットワークコンポーネント：
モデム ....................... 100

トレース：トレースの例外 ......... 91

バ

トレース：トレースバッファ ... 88, 96
トレース：例外トレース ........... 88
トレース：命令トレース ........... 88

バージョンコントロール ........... 25

ビ
ビルド出力 .......... 18, 20, 66, 78

137

138

索引

フ

ミドルウェア：アプリケーション
機能の実装 .............. 110, 119

ファイル：cmsis_os.h ..... 35, 36, 37

ミドルウェア：グラフィックスコンポー
ネント ....................... 104

ファイル：device.h ............... 30
ファイル：osObjects.h ............ 37
ファイル：
RTE_Device.h . 49, 51, 72, 114, 116
ファイル：RTX_<コア>.lib ......... 36
ファイル：RTX_Conf_CM.c36, 38, 39, 4
6, 62, 118

ミドルウェア：コンポーネントの使用 ......................... 110
ミドルウェア：サンプルプ
ロジェクト ................... 109
ミドルウェア：システムリソースの調整 .................... 110, 117

ファイル：startup_<デバイス>.s ... 30

ミドルウェア：ソフトウェアコンポーネントの追加 ............... 31, 112

ファイル：system_<デバイス>.c30, 41,
60, 61, 62

ミドルウェア：デバッグ ..... 110, 123

ファイル：ヘッダファイルの一貫した使用........................... 38
ファイルシステム：FAT ........... 101
ファイルシステム：フラッシュ ..... 101

ブ
ブレークポイント：アクセス ....... 83
ブレークポイント：コマンド ....... 83
ブレークポイント：実行 ........... 82

ママニュアル ....................... 26

ミ
ミドルウェア ..................... 97
ミドルウェア：FTP サーバサンプル 107
ミドルウェア：USB HID サンプル .. 111
ミドルウェア：USB デバイスコン
ポーネント .................... 102
ミドルウェア：アプリケーションの作成.......................... 109

ミドルウェア：ドライバの設定 110, 116
ミドルウェア：ネットワークコンポーネント .......................... 98
ミドルウェア：バージョン 7 への移行 ......................... 105
ミドルウェア：ファイルシステムコン
ポーネント ................... 101
ミドルウェア：リソース要件 ...... 109
ミドルウェア：使用 .............. 109
ミドルウェア：設定 ......... 110, 114

メ
メモリ領域の比較................. 86

ユユーザコードテンプレート .... 41, 119

学
学習用プラットフォーム ........... 27

従従来のサポート.................... 8

スタートガイド：MDK バージョン 5 でアプリケーションを作成する

新

新規項目をグループに追加 ........ 119

139