MDK5 Getting Started (JP)

MDK5 Getting Started (JP)
スタートガイド
ARM® Cortex®-M マイクロコントローラ用
の MDK バージョン 5 で
アプリケーションを作成する
2
序章
本書にある情報は、予告なく変更される場合があり、また、製造者の確約を
表明するものではありません。本書に記載のソフトウェアは、使用許諾契約
または機密保持契約に基づき提供されており、当該契約の条件に従う場合の
み使用またはコピーが可能です。特に使用許諾契約または機密保持契約で許
可されている場合を除き、本ソフトウェアをいかなる媒体にコピーすること
も違法です。購入者はバックアップ目的で本ソフトウェアのコピーを 1 部
のみ作成できます。本書は、いかなる形態またはいかなる方法においても、
電子的なものであれ機械的なものであれ、写真コピー、レコーディングまた
は情報記憶および検索装置などを含め、書面による許可がなければ、購入者
の個人的な使用以外の目的には、一切複製または送信できません。
Copyright © 1997-2015 ARM Germany GmbH
All 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 Fold
er(デスティネーションフォルダ)]の名前を入力します。
注
選択した作業ディレクトリにサンプルプロジェクトをコピーする必要があり
ます。
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 Soft
ware 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 Counter
void 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_o
s.h は、RTX 機能をユー
ザアプリケーションに公
開します。

main() 関数はスレッド
として実行されます。
これらのファイルがプロジェクトの一部になったら、開発者は CMSIS-RTOS
RTX 関数の使用を開始することができます。以下のコードサンプルは、CMSI
S-RTOS RTX 関数の使用状況を示しています。
CMSIS-RTOS RTX 関数の使用例
#include "cmsis_os.h"
// CMSIS RTOS header file
void 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)の「H
eader File Template: cmsis_os.h(ヘッダファイルテンプレート:cmsis_o
s.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() 関数を使用してコード内で定義されます。stack
sz パラメータはスレッドのスタック要件を指定するもので、スタックの割
り当て方法に影響を及ぼします。CMSIS-RTOS RTX では、次の 2 つの方法で
RTX_Conf_CM.c ファイルにスタック要件を割り当てることができます。

固定メモリプールを使用する:stacksz パラメータが 0 の場合は、[Def
ault Thread stack size [bytes](デフォルトのスレッドのスタックサ
イズ [バイト])]に指定された値で、スレッド関数のスタックサイズが
設定されます。

ユーザ空間を使用する:stacksz が 0 でない場合は、ユーザ空間からス
レッドスタックが割り当てられます。このユーザ空間の合計サイズは、[To
tal 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-DSP
CMSIS-DSP ライブラリは、一般的なデジタル信号処理(DSP)関数のセット
です。ライブラリは、さまざまな Cortex-M プロセッサ用に最適化されたい
くつかのバリアントで使用できます。
ソフトウェアコンポーネント ::CMSIS:DSP を[Manage Run-Time Environme
nt(実行時環境の管理)]ダイアログで有効にすると、選択したデバイスの
最適なライブラリが自動的にプロジェクトに含められます。
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
arm_mat_init_f32 (&A, rows, cols, (float32_t *)buf_A);
arm_mat_init_f32 (&AT, rows, cols, buf_AT);
arm_mat_init_f32 (&ATmA, rows, cols, buf_ATmA);
array
// Matrix A
// Matrix AT
// 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 (prin
tf) 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/d
oc/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 システムファイ
ルと共にプロジェクトに含められます。[Proje
ct(プロジェクト)]ウィンドウには、選択し
たソフトウェアコンポーネントおよび関連する
ファイルが表示されます。エディタで開くには、
ファイルをダブルクリックします。
デバイスクロック周波数の設定
システムまたはコアクロックは 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
#define
#define
#define
output clock: 180MHz, Fcco: 180MHz,
PLL1_NSEL
0
/* Range [0
PLL1_MSEL 14
/* Range [0
PLL1_PSEL
0
/* Range [0
#define PLL1_BYPASS 0
#define PLL1_DIRECT 1
#define PLL1_FBSEL 0
:
/*
/*
/*
/*
0:
0:
0:
1:
N = 1, M = 15, P = x
*/
3]: Pre-divider ratio N */
- 255]: Feedback-div ratio M */
3]: Post-divider ratio P */
Use PLL, 1: PLL is bypassed
Use PSEL, 1: Don't use PSEL
FCCO is used as PLL feedback
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 ();
// Switch LED on
osDelay (500);
// Delay 500 ms
LED_Off ();
// Switch off
osDelay (500);
// 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 divid
ers */
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(はい)]をクリックして、プロジェクトをインポートします。mai
n.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)] – [Ca
ll Stack Window(コールス
タックウィンドウ)]の順
に選択して、[Call Stack
+ Locals(コールスタック
とローカル)]ウィンドウ
を開きます。
プログラムの実行が停止すると、[Call Stack + Locals(コールスタック
とローカル)]ウィンドウに現在の関数ネストおよびローカル変数が自動的
に表示されます。CMSIS-RTOS RTX を使用するアプリケーションのスレッド
が表示されます。
スタートガイド:MDK バージョン 5 でアプリケーションを作成する
[Register(レジスタ)]ウィンドウ
[Register(レジスタ)]ウィンドウには、マ
イクロコントローラのレジスタの内容が表示さ
れます。
ツールバーまたは[View
(表示)] – [Registers
Window(レジスタウィンド
ウ)]メニューから、[Reg
isters(レジスタ)]ウィ
ンドウを開きます。
レジスタの値をダブルクリックするか、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
必須のトレースインタフェースは、マイクロコントローラとデバッグアダプ
タの両方でサポートされている必要があります。以下の表に、さまざまなデ
バッグアダプタでサポートされているトレース方法を示します。
機能
ULINKpro
ULINKpro-D
ULINK2
ST-Link v2
200 MHz
200 MHz
3.75 MHz
2 MHz
シリアルワイヤ出力(SWO)
最大 SWO クロック周波数
ストリーミング用 4 ピントレー
ス出力
Embedded Trace Buffer(ETB)
マイクロトレースバッファ(MT
B)
シリアルワイヤ出力を使用したトレース
シリアルワイヤトレース出力(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(I
TM スティムラスポート)]の[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(シリアル
ウィンドウ)]をクリックして、ツールバーから[De
bug (printf) Viewer(デバッグ(printf)ビュー
ア)]を選択するか、メニューで[View(表示)] –
[Serial Windows(シリアルウィンドウ)] – [Debu
g (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(表示)] – [Tr
ace(トレース)] – [Event Count
ers(イベントカウンタ)]の順に選
択します。
このウィンドウでデータを取得するには、次の手順に従います。

上記で説明したように、[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 デバイス
で実行された命令の履歴が表示されます。
オンチップトレースバッファを使用したトレース

場合によっては、マイクロコントローラまたはターゲットハードウェアで
トレース出力ピンを使用できないことがあります。代替方法として、[Tr
ace 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 Rel
ease または 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(実行時環境の管理)]ダイアログには、F
TP サーバサンプル用に選択されたソフトウェアコンポーネントが示されて
います。
スタートガイド: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 デバイスを識別するために、[Ma
nufacturer(製造元)]および[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 – [USB
Device 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
[デバッグセッションの開始/停止](S
tart/Stop Debug Session) . 79, 123
MDK:ライセンスの種類 ............ 10
B
MDK:エディション................. 9
MDK:コアのインストール .......... 10
MDK:紹介 ........................ 8
MDK:試用版ライセンス ............ 13
Board Support(ボードサポート) .. 55
C
P
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
クイックスタートガイド ........... 28
U
グ
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
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement