株式会社 エル・アンド・エフ ●お使いになる前に必ずお読み下さい ソフトウェアの使用条件と保障 ■著作権 本ソフトウェアは著作権法により保護されています。株式会社エル・アンド・エフが本ソフト ウェアの著作権を保有します。 したがって、本ソフトウェアを弊社に無断で、売却、譲渡、賃貸またはその他いかなる方法で あっても第三者に使用させることはできません。 ■保障 弊社は、本ソフトウェアのディスクおよびマニュアルに物理的欠陥がある場合、ご購入日から 30日以内であれば無料で交換いたします。 ■免責 弊社は、前項に定める場合を除き、本ソフトウェアの使用、あるいは使用結果に対していかな る責任も負いません。 弊社は、本ソフトウェアによって生成される2次的ソフトウェアに関して、いかなる制限も与 えません。またいかなる保障もいたしません。 1 もくじ 第1章 第2章 第3章 第4章 第5章 はじめに---------------------------------------------------- 3 内容物一覧------------------------------------------------------ 3 動作環境-------------------------------------------------------- 3 ユーザ登録およびサポートについて-------------------------------- 4 表記方法-------------------------------------------------------- 6 YCシリーズCコンパイラの構成------------------------------------- 6 商品構成-------------------------------------------------------- 8 許可ファイルと評価バージョン------------------------------------ 8 インストール---------------------------------------------------- 9 使用許可ファイルのインストール---------------------------------- 11 インストール後のフォルダ構造------------------------------------ 12 イエロースコープのインストール---------------------------------- 13 旧バージョンのYellowIDE6をお使いの方へ-------------------------- 14 YellowIDE6からの変更(主要部分のみ)---------------------------- 14 印刷されていないマニュアル-------------------------------------- 16 準備------------------------------------------------- 17 デバッグ方式の決定---------------------------------------------- 17 ROMライタの用意------------------------------------------------- 19 ターミナル機能について------------------------------------------ 19 この後どうするか------------------------------------------------ 22 ファームウェアの作成--------------------------------- 23 RAMチェックプログラムの作成------------------------------------- 23 スタートアップルーチンの修正------------------------------------ 30 ダウンローダの作成---------------------------------------------- 38 イエロースコープのモニタの作成---------------------------------- 41 フラッシュROMライタFWRITE2について------------------------------ 44 プログラムの作成------------------------------------- 47 プロジェクトについて-------------------------------------------- 48 プロジェクトの作成---------------------------------------------- 49 ソースファイルの登録-------------------------------------------- 50 プロジェクトの設定---------------------------------------------- 54 ソースファイルの記述-------------------------------------------- 63 メイク---------------------------------------------------------- 65 実行コマンド---------------------------------------------------- 67 プログラミングヒント--------------------------------- 68 サンプルプログラムについて-------------------------------------- 68 IOアクセス------------------------------------------------------ 69 割り込みプログラミング------------------------------------------ 74 2 第1章 はじめに この度はYCシリーズCコンパイラをご購入いただきありがとうございました。本パッケージに は次のものが含まれています。 ■内容物一覧 □インストールCD □ユーザ登録依頼書 1枚 1枚 (CDケースにユーザーID貼付け) 上記以外に注意書きなどが含まれている場合があります。 環境保護の観点から、冊子マニュアルの添付は終了させて頂きました。 ■動作環境 Windows8(32/64bit),Windows 7(32/64bit),Vista(32/64bit)が動作するPC Windows95/98/Me/NT/2000/XPは動作保証外です。 RS232Cポートを装備するパソコン RS232Cポートがない場合は市販のUSB-RS232C変換機などをご利用下さい。 USB-RS232C変換機には相性問題がございますのでご注意ください。 正常動作確認済み製品 ラトックシステム REX-USB60F (推奨) バッファロー SRC06-USB バッファロー SRC06-USM ※1製品1環境の評価であり、全ての環境で正常動作を保証するものではありません。 正常動作しない製品 アイ・オー・データ USB-RSAQ3 アイ・オー・データ USB-RSAQ5 サンワサプライ USB-CVRS9 3 ■ユーザ登録およびサポートについて ユーザ登録 添付のユーザ登録依頼書にて登録して下さい。また弊社ホームページの“ユーザ”のコーナか ら登録することもできます。 登録されていない場合は弊社のすべてのサポートを受けることができません。 使用の制限 個人登録の場合は、登録された個人のみが使用、およびサポートを受けることができます。登 録名義を変更することはできません。 法人登録の場合は、教育目的を除いて、同一会社、同一部署内で10人以下の複数人が使用する ことができます。ただしサポートは部署内で登録された一人に限らせていただきます。 登録名義はサポートを受ける担当者のみの変更が可能です。異なる会社への変更はできません。 サポート期限 無料サポートの期限はご購入から1年です。サポートの継続は別途年間サポート料が必要です。 サポート期限が切れている場合は、サポートの要請があった時に弊社からサポートを継続するか どうかをお尋ねします。 サポートの範囲 弊社ソフトウェアの使い方の説明およびバグなどの対処がサポートの範囲になります。次のこ とがらはサポート範囲外になります。 ユーザプログラム自体の問題 CPUのアーキテクチャや周辺IOの使い方に関する問題 パソコンの基本的な使い方に関する問題 アルゴリズムや回路などの問題 4 サポートをお受けになる時の注意点 サポートは電子メールにてお受けしております。 電子メール toiawase@l-and-f.co.jp また、弊社ホームページはぜひご覧下さい。よくある質問やユーザが間違えやすい事項をまと めてあります。 サポートをお受けになる場合はユーザIDを明示して下さい。ユーザIDの明示がない場合はお断 りする場合もあります。また会社名、名前など連絡先もお知らせ下さい。 ユーザIDと登録された方のお名前が一致しない場合はサポートをお断りする場合もございま す。 ご質問内容の注意事項 問題点をはっきりさせて下さい。「ただプログラムが動かない」だけではお答えできません。 まず、何をしようとしているのか、どこまで進んでどこからうまく行かないのか、期待した結 果とどう違うのかなど、わかる範囲でかまいませんので詳細にかつ正確にお伝え下さい。 エラーメッセージについては正確に記録して伝えて下さい。 ご質問の問題点がはっきりしている場合はすぐお答えできます。また、できる限り掘り下げて お答えします。しかし問題点が不明確な場合は、すべてに正確に答えようとするとあらゆる可能 性に配慮しなければいけませんので膨大な回答と時間が必要になります。そのようなことはでき ませんので一般的な注意点を示すだけに終わってしまいます。 特に初心者の方は問題点がどこにあるか分からない場合もあります。何がいけないのかが分か らない場合もあります。そのような場合は、とりあえず状況や設定などをできる限り詳しくお知 らせ下さい。例えば、ただ単に 「エラーがでる」 だけではお答えできません。プログラムを数行示し、 「この場所で、XXXXXXXXというエラーがでます。最初は出なかったのですが、プロジェクトの 設定をXXXに変更すると出るようになりました。」 このようにご質問いただければすぐ回答できます。 マニュアルは印刷されたものはすべてお読み下さい。マニュアルの中に書かれていることはプ ログラムを作成するための必須の知識が書かれています。また弊社ホームページ上には、よくあ るご質問や間違えやすい項目をQ&Aでまとめてあります。そちらも参考にして下さい。 また、アルゴリズムなどお客様のプログラム自体の問題やCPUの周辺IOの使い方などは、弊社 ソフトウェアと関係ありませんのでお答えできません。 5 ■表記方法 このマニュアルでは、キー、メニューバーの項目などを次のように表記します。 [] () キーボードのキー [A]はキーボードのAのキーを押します。 [A]+[B]はAのキーを押したままBのキーを押します。 メニュー項目、アイコン名を表します。 (ファイル)→(開く)はメニューバーから(ファイル)を選び、続いてプルダウ ンメニューから(開く)を選びます。 フォルダの表記 フォルダが階層構造になっている場合は円記号(\)でつなげて表記します。例えばCドライブ のYellowIDE7というフォルダの中のBINというフォルダを表記する場合は C:\YellowIDE7\BIN と表記します。 ■YCシリーズCコンパイラの構成 YCシリーズCコンパイラのパッケージは、たくさんのソフトウェアの集合体からなります。 大きく分けて統合開発環境のYellowIDEとコンパイラ、アセンブラ、リンカなどからなります。 YellowIDEはグラフィカルユーザインターフェースによってプログラムを作成するための編集か らメイク、プログラムの実行、デバッガの起動などトータルにサポートするソフトウェアです。 プログラマはYellowIDEを通してすべての作業が行えます。 コンパイラ、アセンブラ、リンカはYellowIDEから起動されユーザが直接起動することはあり ません。 YCシリーズCコンパイラはCのソースファイルあるいはアセンブラのソースファイルから最終 的に機械語のプログラムをインテルHEXファイル、モトローラSフォーマットファイルに出力しま す。またデバッグ情報の入ったYEXファイルを作成します。YEXファイルはデバッガのイエロース コープが読み込むファイルです。 名称 統合開発環境は今後YellowIDEあるいは略してYIDEと呼びます。 H8用のCコンパイラは今後YCH8と呼びます。 H8用のアセンブラはYAH8と呼びます。 SH用のCコンパイラは今後YCSHと呼びます。 SH用のアセンブラはYASHと呼びます。 RX用のCコンパイラは今後YCRXと呼びます。 RX用のアセンブラはYARXと呼びます。 リンカは共通でYLINKと呼びます。 デバッガはイエロースコープと呼びます。 上記のCコンパイラやアセンブラ、リンカはユーザが直接起動することはありません。すべて YellowIDEが起動します。 コマンドラインからの使用は、動作保障外となりサポートできません。 6 Cコンパイラ Cソース 編集 YCH8/YCSH 起動 ASMソース アセンブラ 起動 YellowIDE YAH8/YASH オブジェクト リンカ 起動 YLINK HEX/Sファイル YEXファイル *インテルHEXファイ ルまたはモトローラS ファイル イエ ロースコープ 起動 (別売) 起動 ROM ライタ (市販品あるいは弊社製FWRITE2) YCシリーズCコンパイラの構成 7 ■商品構成 イエローソフトのソフトウェアは、次のような商品構成になっています。 Cコンパイラ YCH8 統合開発環境 YellowIDE Cコンパイラ YCH8.EXE アセンブラ YAH8.EXE リンカ YLINK.EXE Cコンパイラ YCSH 統合開発環境 YellowIDE Cコンパイラ YCSH.EXE アセンブラ YASH.EXE リンカ YLINK.EXE Cコンパイラ YCRX 統合開発環境 YellowIDE Cコンパイラ YCRX.EXE アセンブラ YARX.EXE リンカ YLINK.EXE デバッガ イエロースコープH8/300H/H8S版 イエロースコープ YSCOPE.EXE デバッガ イエロースコープSH1/SH2/SH2A版 イエロースコープ YSCOPE.EXE デバッガ イエロースコープRX版 イエロースコープ YSCOPE.EXE YellowIDEとYLINKは共通です。 ■許可ファイルと評価バージョン YellowIDEをインストールすると、Cコンパイラ、イエロースコープなど弊社のすべてのソフト ウェアがインストールされます。しかし、それぞれの使用許可ファイルがインストールされてい ない場合、プログラムサイズが制限された評価バージョンとなります。具体的な制限を下記に示 します。 H8/300H,H8S版 SH1/SH2/SH2A版 RX版 Cコンパイラ 許可ファイル イエロースコープ 許可ファイル 未インストール 未インストール 16KB以下のプログラム作成、デバッグが可能 インストール 未インストール 任意サイズのプログラム作成、16KB以下のプログラム のデバッグが可能 インストール インストール 制限無し 未インストール 未インストール 24KB以下のプログラム作成、デバッグが可能 インストール 未インストール 任意サイズのプログラム作成、24KB以下のプログラム のデバッグが可能 インストール インストール 制限無し 未インストール 未インストール 16KB以下のプログラム作成、デバッグが可能 インストール 未インストール 任意サイズのプログラム作成、16KB以下のプログラム のデバッグが可能 インストール インストール 制限無し 8 制限 ■インストール インストールは管理者権限のあるユーザで行って下さい。CD-ROMをドライブに入れるとインス トーラが起動しますので、指示に従ってインストールして下さい。 初期状態ではWindowsがインストールされたドライブの下に「YellowIDE7」というフォルダが 作成され、そこにインストールされます。このフォルダ名はインストールの途中で変更できます。 ただし、変更する場合は、フォルダ名に空白やピリオドを含めないで下さい。 例えば「Program Files」というフォルダにはインストールしないで下さい。 YellowIDE6以前のバージョンをご使用の方へ YellowIDE7は、YellowIDE6以前のバージョンとは別のフォルダへインストールされます。また 以前のバージョンの設定を変えることもありません。以前のバージョンと新バージョンを両方使 うこともできます。 イエ ロースコープ H8/300H Cコンパイラ YCH8 イエ ロースコープ SH YellowIDE7 NORTi for YC H8版 SH版 Cコンパイラ YCSH すべて同じフォルダにインストールされます ただし、旧バージョンは除く 9 重要!! すでにYellowIDE7以上がインストールされているパソコンに2度以上インストールするこ とはできません。特にYellowIDEはYCSH、YCH8など複数の製品に納められていますが、バージ ョンが同じ場合は任意の一つだけインストールすれば十分です。 バージョンアップやインストールのしなおしなど、同じパソコンに2回以上インストールする 場合は前のバージョンを削除して下さい。削除の方法はWindows 7ではコントロールパネルの「プ ログラムのアンインストール」から、Windows XP SP3ではコントロールパネルの「アプリケーシ ョンの追加と削除」で行います。YellowIDEを選択し、「削除」ボタンを押してください。削除 が済んだら、もう一度インストールして下さい。またYellowIDE7のフォルダが残りますが、それ もすべて削除して下さい。 Windows 7の場合 Windwos XP SP3の場合 インストールできないとき まず、すべてのアプリケーションプログラムを終了して、もう一度実行してみて下さい。 自動でインストーラ起動画面が開かない場合は、CD-ROMのアイコンを開いて、その中の YellowSelector.exeというプログラムを起動して下さい。 YellowSelector.exeというプログラムが起動しない場合はYCH8またはYCSHフォルダ内の SETUP.EXEを実行して下さい。同様にYIDE7というフォルダ内のSETUP.EXEも実行して下さい。 10 ■使用許可ファイルのインストール YellowIDEのインストールが終了したら、使用許可ファイルのインストールを行って下さい。 使用許可ファイルのインストールを行わないとプログラムの作成はできません。使用許可ファイ ルはCD-ROMを挿入したときに出る下記画面の「YCxx使用許可ファイルのインストール」ボタンを クリックすればインストールされます。 11 ■インストール後のフォルダ構造 YellowIDE7 BIN コンパイラ本体、 イエロース コープ本体 LIB 標準関数ライブラリ INCLUDE H8系標準関数ヘッ ダファイル H8 SH SH系標準関数ヘッダファイル ※CSTARTUP C言語スタートアッ プルーチン ※STARTUP アセンブリ言語スタートアッ プルー チン YellowIDE6互換用 ※LOADER ダウンローダ ※REM-MON リモートデバッグ用モニタ ※SAMPLE サンプル RAMCHECK RAM チェッ クプログラム FWRITE2 フラッシュROMライタ LCDFONT LCDエ ディタフォントファイル ※マニュアル はじめの一歩 各種マニュアル 弊社、および市販のC PUボードによ る簡単説明 ルートのYellowIDE7というフォルダ名のみインストール時に変更できます。サブフォルダに関 しては絶対に名前を変更したり場所を移動したりしないで下さい。 H8用Cコンパイラのみご購入の場合もSH用のファイルが含まれますが、YCSHをご購入していな い場合は評価バージョンとなります。 SH用Cコンパイラのみご購入の場合もH8用のファイルが含まれますが、YCH8をご購入していな い場合は評価バージョンとなります。 イエロースコープのアップデート版も含まれますが、イエロースコープを購入していない場合 は評価バージョンとなります。 ※印のフォルダの中身はユーザが内容を確認したり、変更したりする可能性のあるフォルダで す。それ以外は、ユーザは特に中身を意識する必要はありません。 12 ■イエロースコープのインストール イエロースコープ本体はYellowIDEの中に含まれています。したがって、イエロースコープは YellowIDEのインストール時に同時にインストールされます。イエロースコープCD-ROMはイエロ ースコープの使用許可ファイルをインストールために使用されます。また、許可ファイルをイン ストールしない場合、プログラムサイズが制限された評価バージョンとして使用できます。プロ グラムサイズ制限は下記の通りです。 イエロースコープ H8/300H/H8S版 SH1/SH2/SH2A版 プログラムサイズ制限 16KB以下 24KB以下 Cコンパイラとイエロースコープを同時に購入された場合は、イエロースコープの使用許可フ ァイルのみインストールして下さい。イエロースコープに付属のYellowIDEは、Cコンパイラ付属 のものとまったく同一ですからインストールの必要はございません。 Cコンパイラ付属のYellowIDEとイエロースコープ付属のYellowIDEのバージョンが異なる場合 は新しいバージョンのものをインストールして下さい。 以下はイエロースコープを過去にご購入された方のみお読み下さい。 YellowIDEをインストールすると、イエロースコープの最新版も同時にインストールされます。 ただし、イエロースコープを購入し、イエロースコープ使用許可ファイルがインストールされて いな場合、サイズ制限なしでは使用できません。イエロースコープの使用許可ファイルは旧バー ジョンのものでも使用できます。 13 ■旧バージョンのYellowIDE6をお使いの方へ 必ず、お読み下さい!! ●YellowIDE7をインストールしても、YellowIDE6は従来どおり使用できます。 ●YellowIDE6で作ったプロジェクトをそのまま読み込んで使用することができます。ただし、 YellowIDE7の新機能を使う場合はスタートアップルーチンの変更が必要です。新機能については 後述します。 重要!! SH7065に関しては、YellowIDE6とのプロジェクトの互換性はありません。SH7065のプロジェク トの場合は、スタートアップルーチンをYellowIDE7付属のC言語のものに変更する必要がありま す。 ●スタートアップルーチン、ダウンローダ、モニタはYellowIDE6のものをそのまま使用できます。 ただし、混合はできません。たとえばスタートアップルーチンはYellowIDE6のものを使用し、ダ ウンローダはYellowIDE7のものを利用することはできません。またYellowIDE7の新機能を使う場 合は、すべてYellowIDE7のものを使用する必要があります。 ●YellowIDE7からスタートアップルーチンがC言語になった関係で、スタートアップルーチンフ ォルダが[STARTUP]から[CSTARTUP]に変更になりました。ただし、互換性維持のため従来のスタ ートアップフォルダ[STARTUP]もインストールされます。 ■YellowIDE6からの変更点(主要部分のみ) ●スタートアップルーチンがC言語で記述できるようになりました。これによりスタートアップ ルーチンの移植がやりやすくなりました。 C言語のスタートアップルーチンは[CSTARTUP]というフォルダにあります。一方、従来のアセン ブリ言語によるスタートアップルーチンは従来どおり[STARTUP]フォルダにあります。 重要!! プログラム記述言語とスタートアップルーチンの記述言語は統一する必要はありません。基 本的にC言語のプログラムでも、アセンブリ言語のプログラムでも、C言語で記述されたスタート アップルーチンをご利用下さい。アセンブリ言語のスタートアップルーチンは旧バージョンとの 互換性のために格納しているだけで、新しくプログラムを作成する場合は必ず、C言語で記述さ れたスタートアップルーチンをご利用下さい。 また、C言語のスタートアップルーチンを使用しないと以下で説明するYellowIDE7の新機能は 利用できません。 ●スタートアップルーチンの移植ができれば、プロジェクトの設定をするだけで、ダウンローダ、 モニタが完成するようになりました。従来はそれぞれ移植していましたが、スタートアップルー チンの移植だけで、すべてができるようになりました。これにより新しいCPUへの適用がスムー ズに行えるようになりました。 14 ●RLL機能(ROMリンクライブラリ)が追加になりました。標準関数ライブラリやファイルシステ ム、およびユーザ作成の関数群やライブラリを、モニタやダウンローダと一緒にあらかじめROM に書き込んでおくことができます。 これにより、プログラムのRAMへのダウンロード時間が大幅に短縮できます。また、従来RAM容量 が少なくてリモートデバッグできなかった場合でもできる可能性が出てきます。たとえば、内蔵 RAMだけでもリモートデバッグ可能になります。 さらに一部の関数がROMで動作することにより、「完全ROM化」のプログラムと実行速度の差が少 なくなるメリットもあります。 ●割り込みベクタの設定をソースファイル上でできるようになりました。従来のプロジェクトの 設定での設定も併用できます。 例 void interrupt __vectno__ {16} int_func(void) 15 ■印刷されていないマニュアル YellowIDE7をインストールすると各種マニュアルのPDFファイルが同時にインストールされま す。これらを読むにはAdobe Acrobat Readerが必要です。Adobe Acrobat ReaderはAdobe社のホ ームページから入手可能です。 マニュアルは以下の物が含まれています。 ファイル名 YellowIDE7.PDF YellowScope_スタートアップガイド.pdf LcdEditマニュアル.PDF YAH8言語仕様.PDF YASH言語仕様.PDF YAH8構造化命令仕様.PDF はじめの一歩(フォルダ) 説明 このマニュアル イエロースコープ スタートアップガイド LCDエディタのマニュアル アセンブラYAH8の言語仕様書 アセンブラYASHの言語仕様書 YAH8の構造化命令の言語仕様書 イエローソフト製のCPUボードで開発をする場合の 簡略版マニュアル 「はじめの一歩」は弊社の“開発セット”を購入すると対応するCPUボードについては印刷さ れたものが付属しますが、弊社のすべてのCPUボード用のものがPDFファイルで含まれます。 弊社以外にも、他社のCPUボード用のものが含まれる場合もあります。 「はじめの一歩」は各CPUボードに特化した説明がありますので、もし「はじめの一歩」の中 にご自分のCPUボード用のものがありましたら、読んでみて下さい。 このマニュアルは、Cコンパイラおよび統合開発環境を使うための最低限の説 明しかありません。より詳しい内容につきまして、統合開発環境YellowIDEのヘ ルプをご覧下さい。 ヘルプは、YellowIDEのメニューの(ヘルプ)→(ヘルプ)で見ることができます。 ●ハードウェアマニュアルをご用意下さい マイコンプログラミングをするには、そのCPUや周辺デバイスについて記述された仕様書「ハ ードウェアマニュアル」が必要です。ハードウェアマニュアルはCPUのチップメーカであるルネ サステクノロジー社のホームページよりダウンロード可能です。 ハードウェアマニュアル無しではマイコンプログラミングはできません。必 ず入手して下さい。 16 第2章 準備 YellowIDEを使ってプログラムを開発する前にユーザの方で準備しておかなければならないこ とがあります。一つはデバッグ方式の決定と一つはROMライタの準備です。 ■デバッグ方式の決定 作成したプログラムをどのようにターゲット上で実行させるか、あるいはデバッグするか決め ておかなければなりません。 代表的な方法としては以下の方法が考えられます。 イエロースコープをご購入の方 イエロースコープを使用してデバッグする場合は、さらにリモートデバッグとROMデバッグの 2つの方法があります。詳しくは「イエロースコープ スタートアップガイド」を参照してくだ さい。 リモートデバッグ リモートデバッグはイエロースコープの標準的なデバッグ方式です。プログラムをRAMへ転送 してRAM上でデバッグします。 リモートデバッグはCPUの種類によらずどんなCPUでも使用することができます。プログラムを 格納できるだけのRAM容量を必要とします。長所としてはデバッガの機能上の制約が少ないこと です。これは次に説明するROMデバッグとは対照的です。またROMデバッグに比べて転送が高速で す。欠点としては外部RAMを使用する場合はポートのいくつかが使用できなくなることと、デバ ッグ中は動作していたがROM化したときに動かなくなることがたまにあることです。 YellowIDE7の新機能であるRLL機能を利用することで、少ないRAMでもリモートデバッグでき るようになりました。詳しくはイエロースコープ スタートアップガイドを参照してください。 ROMデバッグ ROMデバッグはリモートデバッグと違いプログラムを直接ROMに書き込んでデバッグします。し たがって、リモートデバッグのようにROM化したとき動かなくなることはほとんどありません。 ただし、ROMデバッグできるCPUは限定されており、どんなCPUでもROMデバッグできるわけでは ありません。最新のROMデバッグ可能CPUは別紙の「ROMデバッグ対応CPU一覧および制限」をご覧 下さい。 ROMデバッグの欠点は、プログラムの転送(フラッシュROMへの書込み)に時間がかかること、 ブレークポイントの数などデバッグ上の制約があることです。 17 リモートデバッグとROMデバッグの使用条件と長所短所を次に示します。 リモートデバッグ ROMデバッグ 使用条件 ●プログラムを格納でき るだけのRAMが必要 ●イエローソフトがサポ ートするCPUのみ (別紙参照) 長所 ●転送が高速 ●デバッグ機能に制 約がない ●ROM化した時動かな くなることがほとん どない 短所 ●ROM化した時動かな くなることがある ●転送(フラッシュへ の書込み)に時間がか かる ●ブレークポイント の数などのデバッグ 機能に制約がある イエロースコープを未購入の方 イエロースコープを未購入の方もプログラムサイズ制限下(H8系は16KB以下、SH系は24KB以下) で使用できます。このサイズを超える場合は以下の方法でプログラムの動作を確認することがで きます。 RAMへダウンロード(プログラムをターゲットのRAMに転送してRAM上で動作させる。) イエロースコープを使用しない場合はこの方法でデバッグします。 イエロースコープのようにプログラムをワンステップずつ動作させたり、プログラムを途中で 止めたりはできません。しかし、プログラムの途中にprintf文を挿入して変数を表示させたり、 getcを間に入れてプログラムを途中で止めたりと工夫次第ではそれなりにデバッグすることは できます。 ただし、この環境を実現するためには、ターゲットのROMに、送られてくるプログラムを受信 してRAMへ書き込むためのプログラム(ダウンローダという)を予め組み込んでおかなければな りません。(次項の「ターミナル機能について」を参照) このダウンローダは弊社が販売するCPUボードにはLOADERというフォルダに既に用意されてい ます。それ以外の場合はユーザが自分で作らなければなりません。詳細は「第3章 ファームウ ェアの作成」をご覧下さい。 この方式でデバッグする場合はYellowIDEのターミナル機能を利用します。ターミナル機能に ついてはこの章の最後に補足を示します。 この方式はプログラムをRAMへ格納するため、プログラムを格納できるだけのRAM容量が必要で す。しかし、RLL機能を利用すれば、少ないRAMでも可能です。 ROM化(プログラムを直接ROMに書いて実行する。) プログラムをダウンロードするだけのRAMがない場合はプログラムを直接ROMに書いて動作を 確認します。 これは非常に面倒なやり方です。プログラムが一度で動作すれば問題ありませんが、通常は何 回も修正と書込みを繰り返すため非常に効率が悪くなります。しかし、上記の方法を使用できな い場合はこの方法選択してください。 18 ■ROMライタの用意 YellowIDEはプログラムを作成するためのソフトウェアですが、プログラムをROMに書き込む機 能はありません。ROMライタはユーザが別に用意して下さい。 ターゲットのROMがEPROMの場合はEPROMライタと呼ばれる専用の装置が必要です。最近はワン チップマイコンなどでフラッシュROMを内蔵しているものもありますが、これについても専用の ROMライタが必要です。いずれも市販品の中から目的にあったものを用意して下さい。 ただし、Cコンパイラの付属物として約80種類のCPUに対応したFWRITE2というフラッシュROM ライタがあります。もし対応CPUの中に目的とするCPUがあるならこのFWRITE2を利用することが できます。最新の対応状況につきましては弊社ホームページをご覧下さい。 ■ターミナル機能について デバッグ方式を“RAMへダウンロード”を選択した方はここを読んで下さい。 ターミナル機能について YellowIDEはパソコンとターゲットのCPUボード間でテキストの送受信ができるターミナルソ フトを内蔵しています。これはWindowsのハイパーターミナルやフリーウェアなどの通信ソフト とほぼ同等の機能を有しています。 このターミナルはイエロースコープなどの専用デバッガをもっていない人にとっては簡易な デバッグ環境を提供します。 この簡易デバッグ環境は、ターゲットのROMにダウンローダというプログラムを組み込んでお きます。ダウンローダはパソコンから送られてくるプログラムを受け取りそれをRAMへ書込みま す。 すべての書込みが終わったら、書き込んだプログラムの先頭にジャンプして、プログラム をRAM上で走らせます。プログラムを走らせるだけで、ステップやレジスタダンプなどのデバッ グ機能はありません。 RAM ROM プログラム printf() ダウン ローダ ターミ ナル RS232C ターゲット YellowIDEのターミナル機能による簡易デバッ グ しかし、プログラムの文中にprintf文をあらかじめ書いておくことにより変数の値を表示させ たり、プログラムの実行経路を表示させたりすることができます。またfgetcなどの一文字入力 関数をプログラム中に埋め込めば、そこでプログラムをいったん停止させることができます。 19 ターミナル機能はパソコンからターゲットへプログラムを転送する事と、逆にターゲットから printf文で文字を表示させるのに使用できます。 イエローソフトで販売するCPUボードはすべてこのダウンローダがLOADERフォルダに用意され ています。他社のCPUボードまたは自作の場合は、ダウンローダはユーザ自身が作ってROMに組み 込まなければなりません。詳細は「第3章 ファームウェアの作成」をご覧下さい。 イエロースコープを使う方は、このダウンローダはまったく必要ありません。イエロースコー プにはイエロースコープ専用のモニタをROMに組み込まなければなりません。それについてはイ エロースコープのマニュアルをご覧下さい。 ターミナルの設定 YellowIDEを起動したらメニューの(ターミナル)→(設定)を開いて下さい。 ① 使用するパソコンのCOMポートを選択して下さい。 ② それから(通信設定)をクリックします。 20 ここでターゲットに組み込まれたダウンローダの通信設定に合わせて値を入力して下さい。上 記の図の値はあくまでも例です。実際の値は、ダウンローダによります。イエローソフトの販売 するCPUボードの場合は初期状態のままでOKです。 それ以外の場合は、ユーザ自身がダウンローダのプログラムを作るため、作ったダウンローダ の通信設定に合わせて設定して下さい。 21 ■この後どうするか ●イエローソフトのCPUボードを使用する場合 最初に各CPUの「はじめの一歩」をお読みください。 イエローソフトのCPUボードでプログラムを開発する場合は、各CPUボードに合わせて、使い方 を簡単に説明した「はじめの一歩」という冊子があります。まず、これを読んで下さい。 「はじめの一歩」は各CPUボード開発セットをご購入された場合は印刷された冊子で添付され ています。またYellowIDE7をインストールしたフォルダの「マニュアル」フォルダの中、あるい は弊社ホームページにもあります。 イエロースコープをお持ちの方は、続いて、「イエロースコープはじめの一歩」を読んで下 さい。「イエロースコープはじめの一歩」はYellowIDE7をインストールしたフォルダの中の「マ ニュアル」フォルダにあります。 「はじめの一歩」を読んだあとは、このマニュアルの第4章以降を読んで下さい。第3章は読 む必要はありません。第4章以降はYellowIDEを使って開発するための最低限の説明をしていま す。より詳しい内容は、YellowIDE7のヘルプをご覧下さい。 ●他社製または自作CPUボードの場合 「第3章 ファームウェアの作成」にしたがって、ファームウェアを作成して下さい。第3章 ではRAMチェックプログラムを作ることによってまず、スタートアップルーチンを作成します。 そして、そのスタートアップルーチンを用いて、ダウンローダやイエロースコープのモニタなど のファームウェアを作成します。 ●ハードウェアマニュアルをご用意下さい マイコンプログラミングをするには、そのCPUや周辺デバイスについて記述された仕様書「ハ ードウェアマニュアル」が必要です。ハードウェアマニュアルはCPUのチップメーカであるルネ サステクノロジー社のホームページよりダウンロード可能です。 ハードウェアマニュアル無しではマイコンプログラミングはできません。必 ず入手して下さい。 22 第3章 ファームウェアの作成 ~弊社CPUボードをご使用の方はこの章の説明は不要です。ただし、必ず「はじめの一歩」を読 んで下さい。~ ■RAMチェックプログラムの作成 他社、および自作のCPUボードを使う場合で外部RAMが搭載されている場合は「RAMチェックプ ログラム」を作成します。外部RAMがなく、内蔵RAMだけを使う場合はRAMチェックプログラムの 作成は不要ですが、後で述べるスタートアップルーチンの作成の前段階になっていますので、こ の章の説明にそってRAMチェックプログラムを作成して下さい。 「RAMチェックプログラム」を作成する目的は2つあります。 ① 外部RAMが物理的に正常か確かめる。 ② スタートアップルーチンを作成する。 この作業は面倒ですが、必ず行って下さい。非常に重要なことです。なぜならRAMが動作しな いとCプログラムは動作しません。また、モニタやダウンローダも動作しませんからデバッグも できません。何もできないことになります。 作成方法 ① YellowIDEを起動します。 ② メニューの(ファイル)→(プロジェクトを開く)を選択します。 ③ YellowIDEをインストールしたフォルダの中のSAMPLEというフォルダの中のRAMCHECKという フォルダの中にTEST.yipというプロジェクトファイルがありますから、それを選択します。 23 ④ メニューの(プロジェクト)→(設定)を開きます。 ここで“CPUの種類”から目的とするCPUを選びます。“オブジェクトの形式”から「ROM化(S フォーマット)」を選びます。 CPUの種類 H8/300Hノーマル H8Tinyアドバンスト H8/300H H8S/2000 H8S/2600 SH1 SH2 SH2A 例 H8Tinyシリーズでメモリ空間が64Kバイト以内のもの。H8/3664等 H8Tinyシリーズでメモリ空間が64Kバイトを超えるもの。H8/36049等 H8/300Hシリーズ H8/3048 H8/3052 H8/3064 H8/3069等 CPUコアがH8S2000のH8Sシリーズ H8S21xx、H8S22xx、H8S23xx、H8S24xx、 H8S25xx CPUコアがH8S2600のH8Sシリーズ H8S26xx SH1シリーズ SH7020等 SH2シリーズ SH7044、SH7047、SH7084、SH7085等 SH2Aシリーズ SH7206、SH7211等 H8SXシリーズは対応していませんが、H8S2600上位互換のCPUですから、H8S/2600を選択して下さ い。 24 ⑤ 次に、同じダイアログ画面で「スタートアップ(必須)」のタグをクリックして下さい。 最初に「□C言語のスタートアップルーチンを開く」を必ずチェックして下さい。 次に、“スタートアップルーチン”の(参照)ボタンをクリックして、スタートアップルーチ ンを選択して下さい。スタートアップルーチンの名称はCSCxxxx.Cで統一されておりxxxxのとこ ろにCPUの型番がきます。例えばH8/3048FならCSC3048.C、SH7084ならCSC7084.Cです。目的とす るCPUのスタートアップルーチンがない場合は、一番近いと思われるCPUのものを選択して下さい。 何を選んで良いか分からない場合は弊社までご相談下さい。 スタックサイズは“1024”として下さい。 25 ⑥次に、「セグメント定義(必須)」のタグをクリックして下さい。 ここで左下の方にあるROM番地の終了番地とRAMの開始番地と終了番地を入力して下さい。尚、 上記の図はあくまでも例です。それぞれのCPUボードに合わせて番地を入力して下さい。 最重要!! ●外部RAMがある場合 外部RAMがある場合は、外部RAMをチェックするプログラムを作成します。したがって、RAMチ ェックプログラム自身のデータ領域を外部RAMにすることはできません。よって、上図のRAM番地 には必ず、内蔵RAMの番地を記述して下さい。 ●外部RAMがない場合 外部RAMがない場合は、内蔵RAMの半分をチェックし、残り半分をこのRAMチェックプログラム 自身のデータ領域に割り当てます。よって、上図のRAM番地には、内蔵RAMを2つに分けた後半の 領域を指定します。 内蔵RAMの番地は各CPUのハードウェアマニュアルで確認して下さい。 以上3つの番地の入力がすべて終了したら右側にある(自動作成)のボタンをクリックして下 さい。(両方の(自動作成)のボタンをクリックしても間違えではありません) 以上ですべての設定は終了です。一番下の(OK)ボタンをクリックしてこの画面を終了して下 さい。 26 ⑦ 次にスタートアップルーチンを修正します。YellowIDEのメニューの(ファイル)→(スタ ートアップルーチンを開く)でスタートアップルーチンを開きます。 スタートアップルーチンが開いたら、これを修正します。スタートアップルーチンの修正方法 は次の項の「スタートアップルーチンの修正」のところを読んで下さい。そして修正が済んだら またここに戻ってきて下さい。 ⑧ 次にソースファイルを修正します。 プロジェクトウインドウにソースプログラム名が表示されていますが、このソースファイル名 をダブルクリックして下さい。これでソースファイルが開きます。 このソースファイルがRAMチェックをするプログラムです。 変更点は2か所しかありません。 #include <stdio.h> #define RAM_START #define RAM_END 0x200000 0x21FFFF void main() { 。 。 。 #defineで定義されているRAM_STARTに外部RAMの開始番地、RAM_ENDに外部RAMの終了番地を割 り当てて下さい。RAMは外部RAMのアドレスを使用することに注意して下さい。 外部RAMがない場合は、内蔵RAMを半分に分けた前半部分の番地を割り当てて下さい。 以上の修正が済んだら、メニューの下にある のボタンをクリックして下さい。これでエラ ーがなければ次のダイアログが出てきてプログラムが完成します。 27 ⑨ 次に、今作成したプログラムをターゲットのCPUボードのROMに書き込みます。他社のROMラ イタを使う方は、プロジェクトを作成したフォルダ(SAMPLEの中のRAMCHECKというフォルダ)の 中にRAMCHECK.Sというファイルがありますからそれを書き込んで下さい。 イエローソフトのフラッシュROMライタ(FWRITE2)を使う場合は、メニューの下の のボタン をクリックして下さい。これでFWRITE2が起動します。FWRITE2の使い方は、この章の一番 最後の「フラッシュROMライタFWRITE2について」をご覧下さい。 RAMチェックプログラムをROMに書き込んだら、それを実行して見ましょう。 まずCPUボードの動作モードに注意して下さい。各CPUには動作モードがあり、動作モード によっては内蔵のROMおよび外部のRAMが動作しない場合があります。動作モードについては 各CPUのハードウェアマニュアルをよく読んで理解して下さい。また動作モードの切り替えは各 CPUボードの取り扱い説明書をご覧下さい。 ⑩ 動作モードを選択してCPUボードを起動したら、メニューの(ターミナル)→(表示)でター ミナルウインドウを開きます。最初の設定では38400bpsに設定されていますが、これで問題は ありません。もし「スタートアップルーチンの修正」のところで38400bpsでないボーレートを 選択したら、一度ターミナルウインドウを閉じて「第2章 準備 ターミナル機能について」を 読んでボーレートの設定を変更して下さい。 ターミナルウインドウが開いた状態で、CPUをリセットして下さい。RAMチェックプログラ ムが動作します。 下図のようになれば問題ありません。 28 もし、RAMに異常があれば次のようなメッセージがでてプログラムは終了します。 "Byte Size Error1 Address=200000 エラーが出た場合は、以下の理由が考えられます。もう一度見直して下さい。 ① ハードウェアに異常がある ② スタートアップルーチンの修正が間違っている ③ プロジェクトの設定が間違っている 画面に何も表示されない場合は、スタートアップルーチンでシリアルの設定が間違っている可 能性があります。 画面に文字化けが表示される場合は、スタートアップルーチンで設定したボーレートと、ター ミナルウインドウのボーレートの設定が合っていない可能性があります。 最初からエラーが出る場合は、スタートアップルーチンで外部RAMの設定が間違っている可能 性があります。 エラーが途中から出る場合、特にRandom Checkでエラーが出る場合は、ハードウェアの論理的 な配線が間違っている可能性があります。 29 ■スタートアップルーチンの修正 ●スタートアップルーチンとは何か スタートアップルーチンとはCPUをリセットした直後に一番最初に実行されるルーチンです。 これはmain関数とは違います。main関数はたくさんあるC言語の関数の中のただの一つに関数に すぎません。main関数は関数ですから、その実行にはスタックなどのRAM領域を使います。 ところがCPUをリセットしただけではRAMが機能していない場合があります。RAMが機能してい ないのにmain関数を走らせても暴走してしまいます。従って、main関数を実行する前に必ずRAM を機能させる設定をしておかなければなりません。 同じような理由でスタックポインタの初期化もmain関数を走らせる前にしておかなければい けません。 このようにmain関数を走らせる前に必要な処理を記述したプログラムをスタートアップルー チンと呼びます。 このようにスタートアップルーチンは多目的に使用され、一言では説明できないところもあり ますが、非常に重要な働きをします。 アセンブラだけのプログラムの場合もスタートアップルーチンを利用することにより、セグメ ントの定義や割り込みベクタの設定を簡素化することができます。 スタートアップルーチンはハードウェアに依存するため、ユーザが自分のシステムに合わせて 修正をしなければなりません。イエローソフトの販売するCPUボードの場合はこの修正は不要で す。しかし、この修正はほんの僅かです。ユーザが行う修正の内容は次の3点です。 ① RAMアドレスやボーレートなどの基本の設定 ② デバッグ用シリアルチャンネルの設定 ③ 外部RAMを使用するなら外部RAMの設定 どのサンプルを使うか サンプルのスタートアップルーチンはたくさんありますが、どれを使うか最初に決めます。 スタートアップルーチンの名称はCSCXXXX.Cで統一されておりXXXXのところにCPUの型番が入 ります。例えばH8/3048FならCSC3048.Cです。SH7084ならCSC7084.Cです。 プロジェクトの設定のスタートアップルーチンを選択するところで(参照)ボタンをクリック するとスタートアップルーチンのサンプルが含まれるフォルダが開きますから、そこからスター トアップルーチンを選択します。 もし、目的とするCPUのスタートアップルーチンがない場合は、一番近いと思われるCPUのもの を選択して下さい。分からない場合は弊社までご相談下さい。 30 ●スタートアップルーチンの修正方法 先ほども説明したようにスタートアップルーチンで必要な修正は3点です。それを詳しくみて いきます。 尚、スタートアップルーチンの開き方はメニューの(プロジェクト)→(設定)の「スタート アップ」のタグでスタートアップルーチンを選択した後、メニューの(ファイル)→(スタート アップルーチンを開く)で開きます。 ① 基本の設定 場所は変更①と書いてある部分です。 //変更① #define RAM_BASE #define CLOCK #define PCLOCK #define MAX_VECTNO #define DBG_PORT #define DBG_PORT_BPS //変更①終わり 0x2000000 80000000L 40000000L 240 SCI1 38400L //RAMの先頭番地を記述してください。 //CPUクロック Hz単位 */ //内蔵周辺クロック Hz単位*/ //最大割込みベクタ番号+1を記述してください。 //分からない場合は256以上 //デバッグに使うシリアルチャンネルの設定… //デバックポートでのボーレート RAM_BASEの値 RAMの先頭番地を記述して下さい。RAMが複数ある場合は、プログラムをRAMへダウンロードし て動作させる環境あるいはイエロースコープでリモートデバッグする環境では、そのRAMの先頭 番地を記述して下さい。例外もありますが、概ね、外部RAMがある場合は外部RAMの番地を、内蔵 RAMしかない場合は内蔵RAMの番地を記述して下さい。 動作モードによるRAMの番地の違いに注意して下さい。たとえばH8/3048Fの場合、内蔵RAMの番 地はモード5の場合 FEF10 ですが、モード6の場合は FFEF10 になります。 CLOCKの値 スタートアップルーチンによっては、このCLOCKがない場合があります。その場合は、ここの 説明は無視して下さい。 CLOCKはCPUのシステムクロックの値を記述して下さい。 PCLOCKの値 PCLOCKは、内蔵シリアルコントローラの入力クロックを記述して下さい。クロックパルス発振 器を内蔵しているCPUの場合、システムクロックと、内蔵周辺機能に供給されるクロックが違う 場合があります。その場合は必ず、デバッグで使うシリアルのコントローラに供給されるクロッ クを記述して下さい。 多くのCPUは、システムクロックとシリアルコントローラへの供給クロックは同じです。この 場合はシステムクロックの値を記述して下さい。 31 MAX_VECTNOの値 自分の目的とするCPUのスタートアップルーチンがなく、近いCPUのスタートアップルーチンを 利用している場合は、この値の変更が必要です。 MAX_VECTNOは、そのCPUの最大割り込みベクタ番号に1を加算した値を記述して下さい。 最大割り込みベクタ番号は、各CPUのハードウェアマニュアルの「割り込みコントローラ」の 章で調べて下さい。分からない場合は、コメントに記述した値をMAX_VECTNOの値として下さい。 DBG_PORTの値 デバッグ時に、パソコンとの通信に使うシリアルコントローラのチャンネルを記述します。チ ャンネルは直接番号で記述するのではなく、以下のシンボルを記述して下さい。 SCI0 SCI1 SCI2 SCI3 SCI4 SCI5 SCI6 SCI7 SCI8 USB USB_R イエローソフトUSBインターフェースCPUボードシリーズで、 USBポートにFTDI製チップを使用したもの(YH2633RU-1など) イエローソフトUSBインターフェースCPUボードシリーズで、 USBポートにルネサスCPU内蔵USBを使用したもの(YH1668UL-1など) デバッグ用のシリアルチャンネルは、通常はフラッシュROMを書き込むときのシリアルチャン ネルと同一にします。異なっていても問題ありませんが、書込み時とプログラム動作時でシリア ルチャンネルが異なるため、ケーブルの付け替えなど作業が面倒になります。 DGB_PORT_BPSの値 デバッグ用シリアルのボーレートを記述します。38400bpsの値を推奨します。SH2Aなど一部の 高機能なCPUの場合、さらに早いボーレートの設定が可能ですが、それ以外の場合は、安定した 通信を保証するには38400bpsくらいまでが限度です。USB,USB_Rを指定した場合は無視されます。 なお、クロックの値によってはボーレート誤差が大きくなる場合があります。ボーレート誤差 が2%を超えると、コンパイル時にエラーが出ます。その場合はボーレートの値を低くして下さい。 設定できるボーレートの値は以下などが設定可能です。 1200 2400 4800 9600 19200 38400 32 57600 115200 ② 外部RAMの初期化 場所は変更②と書いてある部分です。 //<<変更②>> //====================================================================== // 外部RAMの初期化 // ------ユーザのCPUボードに合わせて変更して下さい----// 外部RAMを使用する場合はバス設定など外部RAMの初期化が必要です。 // 内蔵RAMだけの場合は不要ですから削除(コメントにする)してください。 //====================================================================== 外部RAMがある場合は、そのRAMを動作させるためにバスの設定が必要です。ここへ記述して下 さい。 スタートアップルーチンには既にサンプルとして記述してあります。これを参考にご自分のシ ステムに合わせて記述して下さい。 外部RAMの初期化は、CPUの種類だけではなく、そのCPUボードやRAMの構成によって異なります。 したがって、弊社では外部RAMを初期化をする完全な正しいプログラムを示すことはできません。 分からない場合は、とりあえず、内蔵RAMだけで動かしてみるのも良いです。その場合は、こ この記述は不要です。 ③ デバッグ用シリアルチャンネルの設定 場所は変更③と書いてある部分です。 //<<以下変更③>> //====================================================================== // シリアル通信の初期化 // デバッグ用、およびC言語のprintf等関数に使うシリアルチャンネルの // 初期化を行います。 // アプリケーションで独自に使うシリアルチャンネルはここで初期化 // する必要はありません。main関数で行ってください。 //====================================================================== ここでは、デバッグ時にパソコンと通信するシリアルチャンネルの初期化を記述します。シリ アルコントローラの設定は、同一シリーズのCPUであるなら、それほど変わりありません。した がって、このスタートアップルーチンではマクロを書き換えるだけで対応できるようになってい ます。 33 最初にシリアルコントローラのIOレジスタの番地を記述します。 //==================================================================== // I/Oアドレスの定義 // H8/3048以外のCPUの場合はIOアドレスおよび受信割り込みベクタ番号を確認してください。 //==================================================================== //SCI0 #define SMR0 (*((volatile unsigned char *)0xffffb0)) #define BRR0 (*((volatile unsigned char *)0xffffb1)) #define SCR0 (*((volatile unsigned char *)0xffffb2)) #define TDR0 (*((volatile unsigned char *)0xffffb3)) #define SSR0 (*((volatile unsigned char *)0xffffb4)) #define RDR0 (*((volatile unsigned char *)0xffffb5)) //SCI1 #define SMR1 (*((volatile unsigned char *)0xffffb8)) #define BRR1 (*((volatile unsigned char *)0xffffb9)) #define SCR1 (*((volatile unsigned char *)0xffffba)) #define TDR1 (*((volatile unsigned char *)0xffffbb)) #define SSR1 (*((volatile unsigned char *)0xffffbc)) #define RDR1 (*((volatile unsigned char *)0xffffbd)) ハードウェアマニュアルを見て書き換えて下さい。 次に各マクロを書き換えます。各CPU別に説明します。 ●H8Tiny系 //ポートモードレジスタ #define PMR1 (*((volatile unsigned char *)0xFFE0)) //==================================================================== // シリアルポート各種マクロ定義 // H8/3687以外のCPUの場合は変更必要 //==================================================================== #define SCI0_RXINT 23 //デバッグ用シリアル受信割込みのベクタ番号 #define SCI0_PORT_TX PMR1 |= ( 1 << 1 ) //TX端子の有効化処理マクロを… #define SCI2_RXINT #define SCI2_PORT_TX 32 //同上 PMR1 |= ( 1 << 3 ) SCI?_RXINT シリアル受信割り込みのベクタ番号を記述します。これは各CPUボードのハードウェアマニュア ルにて調べて下さい。 SCI?_PORT_TX シリアル送信端子TXは、通常はポートとして機能します。ポートモードレジスタの設定によって TX端子として機能します。その命令をマクロとして記述します。 34 H8/300H系 //インタラプトプライオリティレベルレジスタB #define IPRB (*((volatile unsigned char *)0xfffff9)) //==================================================================== // シリアルポート各種マクロ定義 // H8/3048one以外のCPUの場合は変更必要 //==================================================================== #define SCI0_RXINT #define SCI0_IPR(a) 53 //デバッグ用シリアル受信割込みのベクタ番号 IPRB = ( IPRB & ~( 1 << 3 ) ) | ((a) << 3 ) //割込み… #define SCI1_RXINT #define SCI1_IPR(a) 57 //デバッグ用シリアル受信割込みのベクタ番号 IPRB = ( IPRB & ~( 1 << 2 ) ) | ((a) << 2 ) //割込み… SCI?_RXINT シリアル受信割り込みのベクタ番号を記述します。これは各CPUボードのハードウェアマニュ アルにて調べて下さい。 SCI?_IPR(a) H8/300H系のCPUの場合、割り込み優先レベルを0または1に設定することができます。割り込み レベルは割り込み優先レベル設定レジスタで変更します。そのマクロを記述します。ハードウェ アマニュアルを見て確認して下さい。 H8S系 //インタラプトプライオリティレベルレジスタ #define IPRE (*((volatile unsigned char *)0xfffec4)) #define IPRJ (*((volatile unsigned char *)0xfffec9)) #define IPRK (*((volatile unsigned char *)0xfffeca)) #define IPRO (*((volatile unsigned char *)0xfffece)) // モジュールストップ #define MSTPCRA (*((volatile unsigned char *)0xfffde8)) #define MSTPCRB (*((volatile unsigned char *)0xfffde9)) #define MSTPCRC (*((volatile unsigned char *)0xfffdea)) //==================================================================== // シリアルポートの各種定数定義 // H8S/2633以外のCPUの場合は変更必要 //==================================================================== #define SCI0_RXINT 81 //シリアル受信割込み… #define SCI0_MSTCR MSTPCRB //シリアルのモジュー… #define SCI0_MSTCR_BIT ( 1 << 7 ) //モジュールストップ… #define SCI0_IPR(a) IPRJ = (IPRJ & 0xF0 ) | ((a)<<0) //割込みレベル設定マクロ… #define #define #define #define SCI1_RXINT SCI1_MSTCR SCI1_MSTCR_BIT SCI1_IPR(a) 85 MSTPCRB ( 1 << 6 ) IPRK = (IPRK & 0x0F ) | ((a)<<4) 35 SCI?_RXINT シリアル受信割り込みのベクタ番号を記述します。これは各CPUボードのハードウェアマニュ アルにて調べて下さい。 SCI?_MSTCR SCI?_MSTCR_BIT H8S系CPUの多くは、低消費電力モードをもっています。シリアルコントローラを含め、内蔵周 辺デバイスは起動時には低消費電力モードになっており機能しません。そこで、この低消費電力 モードを解除するレジスタがモジュールストップレジスタです。マクロ、SCI?_MSTCRには、この モジュールストップレジスタの名称を記述します。もちろん、この名称は#defineで番地が定義 されていなければなりません。 シリアルコントローラの低消費電力モードを解除するにはモジュールストップレジスタの決 められたビットを0にします。このビット位置を指定するのがSCI?_MSTCR_BITです。 モジュールストップレジスタの名称、番地、およびシリアルコントローラに対応するビット位 置はハードウェアマニュアルの「低消費電力モード」の章に章に記載されています。 SCI?_IPR(a) H8S系のCPUの場合、割り込み優先レベルを0から7に設定することができます。割り込みレベル は割り込み優先レベル設定レジスタで変更します。そのマクロを記述します。ハードウェアマニ ュアルを見て確認して下さい。 SH系 #define STBCR3 *((volatile unsigned char*)0xFFFFE806) /* スタンバイコン… //==================================================================== // シリアルポート各種マクロ定義 // SH7085以外のCPUの場合は変更必要 //==================================================================== #define SCI0_RXINT 217 //シリアル受信割込みベクタ番号 #define SCI0_MSTCR STBCR3 //モジュールストップレジスタ #define SCI0_MSTCR_BIT ( 1 << 3 ) //モジュールストップレジスタビット位置 #define SCI0_IPR(a) IPRL |= ( IPRL & 0x0FFF ) | ( (a) << 12 ) //割込み優先… #define SCI0_PORT_RX BCLR(PACRL1,2),BCLR(PACRL1,1),BSET(PACRL1,0)//RXD端子を… #define SCI0_PORT_TX BCLR(PACRL1,6),BCLR(PACRL1,5),BSET(PACRL1,4)//TXD端子を… #define #define #define #define #define #define SCI1_RXINT SCI1_MSTCR SCI1_MSTCR_BIT SCI1_IPR(a) SCI1_PORT_RX SCI1_PORT_TX 221 STBCR3 ( 1 << 4 ) IPRL |= ( IPRL & 0xF0FF ) | ( (a) << 8 ) BCLR(PACRL1,14),BCLR(PACRL1,13),BSET(PACRL1,12) BCLR(PACRL2, 2),BCLR(PACRL2, 1),BSET(PACRL2, 0) SCI?_RXINT シリアル受信割り込みのベクタ番号を記述します。これは各CPUボードのハードウェアマニュ アル参照してください。 36 SCI?_MSTCR SCI?_MSTCR_BIT スタートアップルーチンにこのシンボルがない場合は、この説明は無視して下さい。 SH系CPUの多くは、低消費電力モードをもっています。シリアルコントローラを含め、内蔵周 辺デバイスは起動時には低消費電力モードになっており機能しません。そこでこの低消費電力モ ードを解除するレジスタがモジュールストップレジスタです。マクロ、SCI?_MSTCRには、このモ ジュールストップレジスタの名称を記述します。もちろん、この名称は#defineで番地が定義さ れていなければなりません。 シリアルコントローラの低消費電力モードを解除するにはモジュールストップレジスタの決 められたビットを0にします。このビット位置を指定するのがSCI?_MSTCR_BITです。 モジュールストップレジスタの名称、番地、およびシリアルコントローラに対応するビット位 置はハードウェアマニュアルの「低消費電力モード」の章に記載されています。 SCI?_PORT_RX SCI?_PORT_TX シリアル送受信端子のRXD、TXD端子は汎用ポート端子と兼用になっており、CPU起動時は汎用 ポートとして機能します。そのため、初期状態ではシリアル送受信端子として機能しません。ピ ンファンクションコントローラの設定によって、RXD、TXD端子として機能させます。 SCI?_PORT_RX、SCI?_PORT_TXマクロは、ピンファンクションコントローラのポートコントロー ルレジスタを使って、RXD、TXD端子として機能させる命令を記述します。具体的には、ポートコ ントロールレジスタの対応するビットをセットまたはリセットすることになります。詳細は各 CPUのハードウェアマニュアルをご覧下さい。 なお、レジスタのビットセット、リセットを容易に記述できる以下のマクロを利用することが できます。(このマクロはcsheader.hに定義されている) BSET(レジスタ名称、ビット位置) BCLR(レジスタ名称、ビット位置) SETPFC(a,b,c) SETIPR(a,b,c) ビットをセットする ビットをリセット(クリア)する (a) = ( (a) & ~(0x7<<(b)) ) | ((c)<<(b)) (a) = ( (a) & ~(0xf<<(b)) ) | ((c)<<(b)) SETPFC は 3 ビットのビットフィールドの値(0~7)を設定します。 SETPFC(レジスタ名称、ビットフィールドの下位からの位置、値) SETIPR は 4 ビットのビットフィールドの値(0~15)を設定します。 SETIPR(レジスタ名称、ビットフィールドの下位からの位置、値) 例 以下のように設定したい場合は SETPFC(レジスタ名称、5、1); 0 0 以上で、シリアルコントローラの設定は終了です。 37 1 ■ダウンローダの作成 デバッグにイエロースコープを使用しない場合で、外部RAMがある場合は「RAMへダウンロード」 という簡易デバッグ方式が利用できます。 この機能を利用するためにはダウンローダと呼ばれるプログラムをターゲットのCPUボードの ROMに組み込んでおく必要があります。イエローソフト製のCPUボードの場合は、このダウンロー ダは弊社にて作成済みですので、フラッシュROMに書き込むことだけすればOKです。 ダウンローダを作成するためには、前項で説明した「RAMチェックプログラムの作成」を終了 してプログラムが正常に動作していることが必須条件です。 YellowIDEをインストールしたフォルダの下にLOADERというフォルダがあります。この中にダ ウンローダのプロジェクトが含まれていますので、それを改造すればダウンローダが作成できま す。このダウンローダのプロジェクトはCPUの種類ごとにフォルダに分かれて格納されています。 いずれもイエローソフト製のCPUボード用です。 他社製および自作のCPUボードの場合は、これらを修正して使用しますので一番近いと思うCPU を選んで下さい。(コピーしておくと良いでしょう) なお、どれが近いCPUか分からなくても、神経質になることはありません。実際にはどれでも 良いのです。 ダウンローダの作成方法 ①YellowIDEのメニューの(ファイル)→(プロジェクトを開く)でYellowIDEをインストールし たフォルダの下のLOADERというフォルダの中から、目的とするCPUのフォルダを選び、その中の プロジェクトファイルを開きます。目的とするCPUがない場合は一番近いと思われるものを選ん で下さい。(同じシリーズのCPUならどれを選んでも大差はありません) のボタンでFWRITE2 ②イエローソフト製のCPUボードの場合は、すでに作成済みですので、 を起動して書き込めば、完了です。他社製、および自作のCPUボードの場合は以下の手順に従っ て変更作業をして下さい。ただし、前項で「RAMチェックプログラムの作成」がうまくいって いることが前提条件です。 38 ③-1 ③-2 メニューの(プロジェクト)→(設定)で「プロジェクトの設定」画面を開きます。 「CPUの種類」を選択して下さい。 ③-3 「スタートアップ(必須)」のタグをクリックし、「スタートアップルーチン」を選択しま す。 スタートアップルーチンは必ずC言語のスタートアップルーチンを選択します。 39 ③-4 「セグメント定義(必須)」のタグをクリックして下さい。 ① の位置にROMの最終番地を記述します。 ② の位置にRAMの開始番地を記述します。 ③ の位置にRAMの最終番地を記述します。 なお、自動作成による番地の入力は絶対にしないで下さい。必ず手作業で修正します。 以上で、「プロジェクトの設定」は終了です。OKボタンをクリックして閉じます。 ボタン をクリックすれば、メイクされ、フラッシュROMライタのFWRITE2が起動されますので、ター ゲットのCPUの内蔵ROMに書き込みます。FWRITE2の設定等は「RAMチェックプログラムの 作成」と同じです。 ダウンローダのチェック方法 ダウンローダのROMへの書き込みが済んだら、動作をチェックします。まず、メニューの(タ ーミナル)→(表示)で黒いターミナルウインドウを開きます。 CPUボードをROM書き込みモードから解除して、リセットして下さい。画面に “S-LOADER START” と表示されたら、キーボードから、大文字の「S」と「7」を入力しリターンキーを入力します。 そうすると画面に “S-LOADER END” と表示されます。以上の動作を確認して下さい。 40 ■イエロースコープのモニタの作成 イエロースコープで、リモートデバッグするには、モニタと呼ばれるプログラムをターゲット のCPUボードのROMに組み込んでおく必要があります。イエローソフト製のCPUボードの場合は、 このモニタは弊社にて作成済みですので、フラッシュROMに書き込むことだけすればOKです。 モニタを作成するためには、前項で説明した「RAMチェックプログラムの作成」を終了してプ ログラムが正常に動作していることが必須条件です。 YellowIDEをインストールしたフォルダの下にREM-MONというフォルダがあります。この中にモ ニタのプロジェクトが含まれていますので、それを改造すればモニタが作成できます。このモニ タのプロジェクトはCPUの種類ごとにフォルダに分かれて格納されています。いずれもイエロー ソフト製のCPUボード用です。 他社製および自作のCPUボードの場合は、これらを修正して使用しますので一番近いと思うCPU を選んで下さい(コピーしておくと良いでしょう)。詳しくはイエロースコープオンラインヘル プの「モニタ作成」を参照してください。 モニタの作成方法 ①YellowIDEのメニューの(ファイル)→(プロジェクトを開く)でYellowIDEをインストールし たフォルダの下のREM-MONというフォルダの中から、目的とするCPUのフォルダを選び、その中の プロジェクトファイルを開きます。目的とするCPUがない場合は一番近いと思われるものを選ん で下さい。(同じシリーズのCPUならどれを選んでも大差はありません) のボタンでFWRITE2 ②イエローソフト製のCPUボードの場合は、すでに作成済みですので、 を起動して書き込めば、完了です。他社製、および自作のCPUボードの場合は以下の手順に従っ て変更作業をして下さい。ただし、前項で「RAMチェックプログラムの作成」がうまくいって いることが前提条件です。 41 ③-1 ③-2 メニューの(プロジェクト)→(設定)で「プロジェクトの設定」画面を開きます。 「CPUの種類」を選択して下さい。 ③-3 「スタートアップ(必須)」のタグをクリックし、「スタートアップルーチン」を選択しま す。 スタートアップルーチンは必ずC言語のスタートアップルーチンを選択します。 42 ③-4 「セグメント定義(必須)」のタグをクリックして下さい。 ① の位置にROMの最終番地を記述します。 ② の位置にRAMの開始番地を記述します。 ③ の位置にRAMの最終番地を記述します。 なお、自動作成による番地の入力は絶対にしないで下さい。必ず手作業で修正します。 以上で、「プロジェクトの設定」は終了です。OKボタンをクリックして閉じます。 ボタン をクリックすれば、メイクされ、フラッシュROMライタのFWRITE2が起動されますので、ター ゲットのCPUの内蔵ROMに書き込みます。FWRITE2の設定等は「RAMチェックプログラムの 作成」と同じです。 モニタのチェック方法 ダウンローダのROMへの書き込みが済んだら、動作をチェックします。まず、メニューの(タ ーミナル)→(表示)で黒いターミナルウインドウを開きます。 CPUボードをROM書き込みモードから解除して、リセットして下さい。 画面に “Aソ” と表示されたら、キーボードから、リターンキーを入力します。そうすると画面に “チ?” と表示されます。以上の動作を確認して下さい。 43 ■フラッシュROMライタFWRITE2について FWRITE2はイエローソフトが提供するルネサステクノロジーH8シリーズ、SHシリーズ用の内蔵 フラッシュROM専用のライタです。現在8種類ほどのCPUに対応しております。最新の対応状況に ついては弊社ホームページをご覧下さい。 FWRITE2が対応していないCPUに関してはルネサステクノロジー純正および市販のフラッシュ ROMライタをご利用下さい。また、外付けのEPROMを使用される場合は市販のEPROMライタが必要 です。 ここではFWRITE2について書き込み方法を簡単に説明します。 FWRITE2の起動 FWRITE2の起動方法は2通りあります。 ①現在開発しているプロジェクトのプログラムを書き込む場合 ②プロジェクトとは関係なく、指定のファイルを書き込む場合 ①と②の違いは、②の場合は途中で書き込むファイルを問い合わせてくるところです。①の場 合は書き込むファイルはプロジェクトの作成ファイルだと分かっているので問い合わせてきま せん。 ①の場合の起動方法 のボタンでFWRITE2を起動します。あるいはメニューの YellowIDEのメニューの下にある (ツール)→(フラッシュROMライタ)で起動します。 ②の場合の起動方法 YellowIDEのメニューの(ツール)→(フラッシュROMライタ(ファイル指定))で起動します。 44 FWRITE2の設定 “空き”となっているタグのところで 「CPU情報情報ファイル」の(参照)ボタンでCPUを選択します。 「COMポート」でパソコンのCOMポートを選択します。 「ボーレート」からカッコ内の周波数に合った最大のボーレートを選びます。 以上で最低限の設定は終了です。さらに詳しい設定、および使い方に関してはFWRITE2のヘルプ をご覧下さい。 高速ボーレートの設定 プログラムの転送速度を上げるには、以下のようにします。高速転送の枠の中の 「有効」をチェックします。 「高速ボーレート」を設定します。 BRR値の横の(計算)ボタンをクリックします。 クロックを入力し、(計算)ボタンをクリックします。出てきたBRR値から誤差の一番小さい ものを選んで、(選択して終了)クリックします。 45 なお、一番小さい誤差が2%を超えるようだと、安定した通信は保証できません。その場合は高 速ボーレートの値を下げて下さい。 CPU名の横に●があるCPUについて 上記「H83069●」のようにCPU名の横に●があるものは、高速転送の設定は必須です。この場 合は、クロックを入力して下さい。クロックはCPUの動作周波数ではなく、内蔵シリアルコント ローラの供給クロックになります。 プログラムの書き込み CPUボードをブートモードで起動します。ブートモードでの起動の方法はCPUボードメーカの取 扱説明書をご覧下さい。 CPUが起動したらFWRITE2の(書込み)ボタンをクリックして下さい。 インディケータ(進捗状況の青いバー)が2回最後までいったら、書き込み終了です。 FWRITE2の詳しい使い方についてはFWRITE2のヘルプをご覧下さい。 46 第4章 プログラムの作成 それでは実際にプログラムを作成する手順を示します。YellowIDEでは次のような流れでCプロ グラムを作成します。 プロジェクトの作成 ソース ファイルの登録 プロジェクトの設定 ソース ファイルの記述 メイク エラーの修正 メイク プログラム完成 47 ■プロジェクトについて YellowIDEを使う上でプロジェクトの概念は非常に重要です。YellowIDEではプログラムを作成 する前にプロジェクトを作成しなければなりません。プロジェクトが作成されていないとソース プログラムを書くことすらできません。 プロジェクトは具体的には拡張子が.YIPのファイルおよびその他のファイルですが、ユーザは この中身を直接見る必要はありません。すべてYellowIDEが管理します。これらのファイルの中 身はプログラムで使用されるソースファイルやライブラリファイル、スタートアップルーチン、 コンパイルオプションやリンカオプション、リンクアドレスなどさまざまな情報が含まれます。 ユーザは新規にプロジェクトを作成することによって、それ以降の作業ができるようになりま す。 プロジェクト名 プロジェクト名はユーザが自由に名前をつけることができます。ソースファイル名と同じにす る必要はまったくありません。ただし、プロジェクト名には空白やピリオド(.)を使わないで 下さい。プロジェクトの拡張子は自動的に.YIPになります。 最終的に作成されるアブソリュートファイルは、このプロジェクト名の拡張子を変えたものに なります。 アブソリュートファイル Sフォーマットファイル インテルHEXファイル YEXファイル ファイル名 プロジェクト名.S プロジェクト名.HEX プロジェクト名.YEX プロジェクトフォルダ名 プロジェクトは必ず、一つのフォルダに一つ作成して下さい。フォルダはユーザが自由に作成 して名前をつけることができますが、一つのフォルダに複数のプロジェクトを入れないで下さい。 プロジェクトは同じ名前のファイルを作成することがあるので同じフォルダに複数のプロジェ クトがあると上書きされてしまいます。 ファイル名やフォルダ名についての制限 ファイル名やプロジェクトを格納するフォルダ名について次のことに注意して下さい。 ①空白文字は使用できません。 例 × C:\My Document\Project ②フォルダ名にピリオド( .)は使用できません。(ファイル名に拡張子をつけるためのピリオド は大丈夫です) 例 × C:\Project.TEST1 YellowIDEはWindows GUIアプリケーションですが、コンパイラ、アセンブラ等はDOSプロンプ トで動作するプログラムです。したがってDOSプロンプトで認識できないようなファイル名やフ ォルダ名は使用できません。 48 ■プロジェクトの作成 メニューから(ファイル)→(プロジェクトの新規作成)を選んで下さい。次のダイアログがでま す。 ここで新規のプロジェクト名を入力するのですが、その前にフォルダを作成して下さい。これ は重要なことですが、必ずプロジェクト1つにつきフォルダ1つを作成して下さい。 YellowIDEはプロジェクトに関連していろいろなファイルを作成します。複数のプロジェクト が一つのフォルダに含まれているとファイル名が重複して管理が大変になります。 ここで のボタンをクリックして下さい。フォルダが作成されます。"新しいフォルダ"の代 わりに何か適当な名前を付けて下さい。 (フォルダ名には空白やピリオド(.)は使用できません。 例えばC:\My Documentなどにプロジェクトを作成しないで下さい。)ここの例ではSAMPLE1とし ます。 新しいフォルダができたら、そのフォルダをダブルクリックして(ファイル名)のところにプロ ジェクト名を入力して(開く)のボタンをクリックして下さい。これで新しいプロジェクトが作成 されます。プロジェクト名はなんでもかまいません。プロジェクトの拡張子は省略できます。も し付けるなら必ず.YIPにして下さい。 次回にYellowIDEを起動して今作ったプロジェクトを開く場合は、メニューから(ファイ ル)→(プロジェクトを開く)を選びます。 49 ■ソースファイルの登録 プロジェクトを新規に作成したらソースファイルをプロジェクトに登録します。 一般にプログラムは、次の3つのファイルからリンクされます。 スタートアップルーチン ソースファイル(複数可) 標準関数ライブラリ このうちプロジェクトに登録しなければならないのはソースファイルのみです。スタートアッ プルーチンと標準関数ライブラリは別のところで登録します。 ソースファイルは既にあるものや、これから作るもの、作っている途中のものなんでもかまい ません。後からソースファイルを追加したり、削除したりすることができます。しかしプロジェ クトには最低限1個のソースファイルを登録しなければなりません。 プロジェクトにソースファイルを追加する方法 ① 上図にあるプロジェクトウインドウの白い部分にマウスカーソルを合わせます。 ② マウスを右クリックします。 ③ でてきたポップアップメニューから(ファイルを追加)を選びます。 あるいは プロジェクトウインドウの(追加)ボタンをクリックします。 50 ④ 既にソースファイルがある場合は、そのアイコンを選択します。これからソースファイルを 新規に作成する場合は“ファイル名”のところにソースファイル名を入力して(開く)ボタンを クリックします。 プロジェクトにソースファイルを登録するとプロジェクトウインドウは次のようになります。 ファイル名のところをダブルクリックするとエディタが開き、編集できるようになります。 ソースファイルを複数登録することもできます。 ソースファイルはプロジェクトフォルダを基準とした相対パスで表示されます。絶対パスで表 示させるには、メニューの(設定)→(カスタマイズ)で設定できます。 ソースファイルは複数登録することができます。 51 インクルードファイルの扱い インクルードファイルとはCプログラムから#includeによってあるいはアセンブラから INCLUDE疑似命令によって取り込まれるファイルのことです。 インクルードファイルは単独ではリンクされず、他のファイルから取り込まれることによって 機能します。このようなファイルはYellowIDEでは依存ファイルと呼びます。 依存ファイルは次のように登録して下さい。 ① プロジェクトウインドウの中の、インクルードファイルを呼び出すソースファイルをクリッ クして反転表示させます。 ② マウスを右クリックします。 ③ でてきたポップアップメニューから(インクルードファイルを追加)を選びます。あるいは (Include)ボタンをクリックします。 ④ ダイアログからインクルードファイルを選択、あるいは名前を直接入力します。 インクルードファイルを登録すると下図のように、それが使われるファイルの一段下に表示さ れます。 stdio.hやstring.hのようなC言語に標準でついているインクルードファイル、および既に完成 していて変更の必要ないインクルードファイルは登録する必要はありません。 あくまでも変更の可能性のあるものおよび新規に作成するインクルードファイルのみを登録 して下さい。 インクルードファイルが複数のソースファイルから使われる場合は、その全てをインクルード ファイルとして登録して下さい。 例えばプロジェクトにTEST1.C、TEST2.C、TEST3.C、TEST4.Cという4つのソースファイ ルがあり、TEST4.C以外の3つのファイルがINCFILE.Hをインクルードしているとします。 そうするとプロジェクトは次のような構造になります。 -----TEST1.C |-----INCFILE.H -----TEST2.C |-----INCFILE.H -----TEST3.C |-----INCFILE.H -----TEST4.C 52 補足 インクルードファイルが複数のソースファイルから呼ばれる場合は、インクルードファイルの 中身は宣言だけにして下さい。変数や関数の定義は書かないで下さい。定義を書いた場合はCの 文法に従いエラーとなります。 宣言とは以下のような内容です。 1関数のプロトタイプ宣言やextern宣言 2変数のextern宣言 3#defineやマクロの宣言 4typdef宣言 5構造体や共用体、列挙変数の型の宣言 これらは宣言だけであってコードを生成しません。ですから複数のファイルから使用されても エラーになりません。ところが定義は実際にコードやデータを生成しますから、複数のファイル から使用されたら2重定義エラーとなります。 例えば次の構造体の宣言をみて下さい。 struct ABC { int a; int b; }; これはstruct ABCという構造体の型を書いただけで、コードやデータは生成されません。従っ てこれは宣言です。ところが次のように書いたら構造体変数の定義になります。 struct ABC { int a; int b; } sdat; これは、構造体の宣言と同時にデータsdatを定義しています。つまりコンパイラはデータ領域 を実際に確保します。従って複数のファイルで同じ名前の変数が2重に定義されているわけです からエラーとなります。 このような定義はインクルードファイルには記述せず、直接ソースファイルに記述します。 53 拡張子の制限 プロジェクトには拡張子が.ASM、.C、.OBJ、.LIBのものだけが登録できます。YIDEは拡張子で ファイルの種類を判断しますので、これ以外の拡張子は使わないで下さい。(インクルードファ イルについては拡張子の制限はありません) 拡張子とファイルの種類の関係 拡張子 ファイルの種類 .ASM アセンブラソースファイル .C Cソースファイル .OBJ オブジェクトファイル .LIB ライブラリファイル ■プロジェクトの設定 いままでの説明でプロジェクトの新規作成とソースファイルの登録ができたと思います。次に プロジェクトの設定に入ります。 プロジェクトの設定とは、プロジェクトのターゲットCPUの指定や出力ファイルの指定、リン クする番地の指定、コンパイルオプションの指定などの総称です。 これらの設定はプロジェクトごとに保存され、次回同じプロジェクトを開いた場合にも有効と なります。 プロジェクトの設定はYellowIDEでプログラムを作成する上で一番重要なところです。ここを 理解しているかどうかがYellowIDEを使いこなせるかどうかの決め手になります。 プロジェクトの設定では最低限以下の項目を設定していなければなりません。 ●ターゲットのCPUの種類 ●オブジェクトの形式 ●スタートアップルーチンの指定 ●セグメント定義 これらはどれも必須で間違えていたり、抜けていたりすればプログラムは正しく動作しません。 この項ではプロジェクトの設定の仕方を説明していきます。 またスタートアップルーチンについては、この項ではファイル名を指定するだけの説明でその 中身までは説明していませんので、具体的にスタートアップルーチンの中身について知りたい場 合は「第3章 ファームウェアの作成 スタートアップルーチンの修正」を参照して下さい。 プロジェクトの設定をするにはメニューから(プロジェクト)→(設定)を選びます。あるい はプロジェクトウインドウの(設定)ボタンをクリックします。 54 ターゲットのページ CPUの種類 必須 ターゲットのCPUを選択して下さい。もちろんそのCPU用のコンパイラ/アセンブラがインスト ールされていなければなりません。 CPUの種類 H8/300Hノーマル H8Tinyアドバンスト H8/300H H8S/2000 H8S/2600 SH1 SH2 SH2A 例 H8Tinyシリーズでメモリ空間が64Kバイト以内のもの。H8/3664等 H8Tinyシリーズでメモリ空間が64Kバイトを超えるもの。H8/36049等 H8/300Hシリーズ H8/3048 H8/3052 H8/3064 H8/3069等 CPUコアがH8S2000のH8Sシリーズ H8S21xx、H8S22xx、H8S23xx、H8S24xx、 H8S25xx CPUコアがH8S2600のH8Sシリーズ H8S26xx SH1シリーズ SH7020等 SH2シリーズ SH7044、SH7047、SH7084、SH7085等 SH2Aシリーズ SH7206、SH7211等 オブジェクトの形式 必須 オブジェクトの形式を選択して下さい。前章で説明したようにターミナル機能を使ってRAMに プログラムをダウンロードしてprintfなどによってデバッグする場合は「RAMへダウンロード(S フォーマット)」あるいは「RAMへダウンロード(HEXファイル)」を選択して下さい。 SフォーマットかHEXファイルかの選択はターゲットに組み込まれているダウンローダの仕様 によります。イエローソフトの販売するCPUボードの場合は、すべてSフォーマットです。 55 イエロースコープを使ってデバッグする場合は「イエロースコープでシミュレーションデバッ グ」か「イエロースコープでリモートデバッグ」あるいは「イエロースコープでROMデバッグ」 のいずれかを選んで下さい。 プログラムのデバッグが終了して、プログラムをROMに組み込む場合は「ROM化(Sフォーマッ ト)」か「ROM化(HEXファイル)」を選んで下さい。 SフォーマットかHEXファイルの選択は使用するROMライタの仕様によります。イエローソフト のフラッシュROMライタソフトの場合はすべてSフォーマットです。 デバッグ □スタートアップルーチンはデバッグしない イエロースコープを使用する場合、スタートアップルーチンもデバッグしたい場合はチェック をはずします。逆にスタートアップルーチンをデバッグする必要がない場合、つまりmain関数の 先頭からプログラムがスタートするようにする場合はチェックをつけます。 □アセンブラファイルはデバッグしない イエロースコープを使用する場合、アセンブラのルーチンをデバッグする必要がない場合はチ ェックします。アセンブラのルーチンの中身もデバッグしたい場合はチェックをはずします。 □Cソースもアセンブラレベルでデバッグする イエロースコープを使用する場合、ここをチェックすると、コンパイラが吐き出したアセンブ ラプログラムでデバッグできます。 □スタックオーバフローをチェックする ここをチェックするとスタックのオーバフローをチェックするコードが関数の入り口に挿入 されます。その分、コードは効率が悪くなります。通常はデバッグのときだけ使用します。 実際にスタックオーバフローが検出されると、イエロースコープがエラーメッセージを出しま す。イエロースコープ以外の場合は、ターミナルウインドウにエラーメッセージが表示されます。 □EXRレジスタを使う H8SのCPUの中にはEXRレジスタを使って多優先度の割り込み制御が可能なものがあります。 (割 り込み制御モード1、2)これらの割り込み制御モードを使う場合は、ここをチェックします。通 常はチェックしません。 ただし、スタートアップルーチンにEXR_USEの記述がある場合は、ここをチェックしなくてか まいません。 56 スタートアップのページ スタートアップルーチンの登録必須 ここではスタートアップルーチンを登録します。アセンブラだけのプログラムの場合もここで 設定します。スタートアップルーチンはYellowIDE7からはすべてC言語のプログラムになりまし たが、YellowIDE6で作成したプロジェクトを読み込んだ場合で、従来のアセンブラのスタートア ップルーチンを指定したい場合は、「C言語のスタートアップルーチンを開く」のチェックをは ずし(参照)ボタンをクリックすると、アセンブラのスタートアップフォルダから選択できます。 通常は、必ずC言語のスタートアップルーチンを開いて下さい。アセンブラのプログラムでもC 言語のスタートアップルーチンを開きます。C言語のスタートアップルーチンを開かないと、 YellowIDE7の新機能は利用できません。 スタートアップルーチンは各CPUに応じてサンプルが用意されていますので、それを利用して 下さい。(参照)ボタンをクリックすればサンプルのスタートアップルーチンが含まれるフォル ダが開きますからその中から選択します。 イエローソフトのCPUボードの場合は、このサンプルがそのまま使用できます。それ以外の場 合は修正が必要です。 サンプルの中に目的とするCPUがない場合は一番近いと思われるCPUを選択して修正して下さ い。修正の仕方は「第3章 ファームウェアの作成 スタートアップルーチンの修正」を参照し て下さい。 57 スタックサイズ スタックサイズを10進で入力して下さい。H8の場合は、サイズは偶数になるようにして下さい。 SHの場合は4の倍数になるようにして下さい。 プログラムが、だいたいどれくらいスタックを使うかを推定することができます。詳しくはヘ ルプをご覧下さい。 ヒープサイズ ヒープとはCの標準関数mallocやcallocによって動的に割り当てられるメモリのことです。そ の領域のサイズを設定します。mallocやcallocを使用しないのであれば0にします。 ヒープサイズの最大は64Kバイトです。 mallocやcallocでメモリを確保する場合はオーバヘッドが存在しますから、実際の合計量より 多めに確保して下さい。だいたい一回のmalloc呼び出しで20バイトぐらいオーバヘッドがありま す。 関数の戻り値となる構造体のサイズ プログラムの中に構造体を戻り値として返す関数がある場合は、ここにその構造体のサイズ以 上の値を設定して下さい。そのような関数が一つもない場合は0です。 通常のプログラムは構造体のポインタを引数として渡したり、あるいは戻り値として返したり します。構造体そのものを関数とやり取りすることはまれです。したがって通常は0にしておき ます。 スタートアップルーチンはリンクしない ここをチェックするとスタートアップルーチンはリンクしません。アセンブラだけのプログラ ムでYellowIDEの介在なしですべてユーザ自身でプログラムを書きたい場合は、ここをチェック します。 ここをチェックするとスタートアップルーチンはリンクされませんから、ユーザの方で必要な すべての設定をしなければなりません。上級者向きです。 また、スタートアップルーチンをリンクしない場合はROM化プログラムしか動作しません。イ エロースコープも、RAMへのダウンロードの環境でも動作しません。さらに割り込みベクタの管 理もすべてユーザが行うことになります。 ですから、よほどの事情がない限り、ここはチェックしないで下さい。 オプションの設定 オプションは必要に応じて設定して下さい。特に何も設定しなくてもプログラムは作成されま す。 これらに関して、詳細はYellowIDEのヘルプをご覧下さい。ヘルプの(プログラムの作成方法) →(プロジェクト)にあります。 YCオプション YAオプション YLINKオプション 58 セグメント定義 セグメント定義とはデータやプログラムなどのセグメントに割り付ける番地を記述すること です。セグメント名とその番地が書かれたファイルのことをセグメント定義ファイルと言い、テ キストエディタで書くことができますし、YellowIDEから記述することもできます。 下記の図はセグメント定義ファイルを記述するYellowIDEのダイアログです。 セグメント定義に関する詳しいことはヘルプをご覧下さい。ここではROM一個、RAM一個の簡単 なシステムの場合について説明します。 ROM一個、RAM一個の簡単なシステムの場合はセグメント定義ファイルを自動作成することがで きます。 セグメント定義の自動作成 ROMの終了番地を16進で入力して下さい。 RAMの開始番地、および終了番地を16進で入力して下さい。 (自動作成)のボタンを2つともクリックして下さい。 59 割り込み この画面はYellowIDE6との互換性のためにあります。YellowIDE7で新規にプロジェクトを作成 する場合は、この画面は使用しません。 YellowIDE6のプロジェクトを開く場合は、この設定値が表示されます。 この画面の詳細に関してはヘルプをご覧下さい。 60 メモリマップ ここではターゲットのメモリ(ROMやRAMおよびIO)のマップ情報を設定します。ここの設定はそ のままイエロースコープに伝えられます。従ってイエロースコープを使用しないなら、ここの設 定は不要です。 入力の仕方 ①デバイスの種類から、ROM、RAM、入力ポート、出力ポート、入出力ポートのいずれかを選択し ます。 ②そのデバイスの開始アドレス、および終了アドレスを入力します。 ③最後に(追加)ボタンをクリックします。 ④デバイスの数だけ同じことを繰り返します。 ⑤グローバルアドレスマスクを設定します。 デバイスのアドレスの境界は4096バイトごとでなければなりません。つまりアドレスの下位1 2ビットは自動的にマスクされます。もし中途半端なアドレスに境界がある場合は広くなるよう にアドレスを設定して下さい。実際のマップより広くとる分には問題ありません。 デバイスの種類で、入出力ポートとRAMは区別がありません。従って内蔵RAMと内蔵IOが連続し ている場合などは全部まとめてRAMにしてもかまいませんし、入出力ポートにしてもかまいませ ん。 61 グロバールアドレスマスクは次の値を入れて下さい。 SH FFFFFFFF H8/Tiny FFFF (アドバンストモードの場合はFFFFFF) H8/300H 1Mバイトモード FFFFF H8/300H 16Mバイトモード FFFFFF 入力の例 ここではH8/3048Fの標準的なCPUボードを例に説明します。メモリマップの例を以下に示しま す。 現実のメモリマップ 内蔵ROM 0-1FFFF 外部RAM 200000-21FFFF 内蔵RAM FFEF10-FFFF0F 内蔵IO FFFF1C-FFFFFF 内蔵ROMと外部RAMは問題ないですが、内蔵RAMと内蔵IOは中途半端なアドレスに境界がありま す。従って、内蔵RAMと内蔵IOを一つにまとめて次のようにします。 メモリマップの設定例 ROM 0-1FFFF RAM 200000-21FFFF 入出力ポート FFE000-FFFFFF グローバルアドレスマスク FFFFFF 上記の設定で入力して下さい。 現実の領域より広くとる分には問題ありません。しかし、あまり広くするとパソコンのメモリ を多く消費します。またイエロースコープはシミュレーションモードのとき、ここで設定した領 域以外のアクセスに対してエラーを出しますが、あまり広くとりすぎると、このエラーチェック の意味がなくなってしまいます。 設定の保存 ここの設定は面倒なので保存しておくことができます。(設定○保存)のボタンをクリックす れば設定を保存しておくことができます。また(設定○読込み)のボタンで保存した内容を復元 できます。設定は5つまで保存できます。 62 ■ソースファイルの記述 プロジェクトウインドウに登録されたファイル名のところをダブルクリックすると、そのソー スファイルのエディタウインドウが開きます。 このエディタウインドウでソースファイルの編集を行うことができます。 編集に関しては標準的なエディタの操作性を採用しています。YellowIDEのメニューの(編集) で編集に関するコマンドを実行することができます。 このメニュー以外にはショートカットキーによるコマンドの実行ができます。ショートカット キーについてはヘルプファイルをご覧下さい。 Cプログラムの場合 Cプログラムの場合は特に決まりはありません。通常のCプログラムのようにmain関数は必ず定 義して下さい。 void main(void) { } アセンブラだけのプログラムの場合 アセンブラプログラムの場合は決まりがいくつかあります。それらを守って記述して下さい。 ●セグメント名のきまり コード(命令)のセグメント名はTEXTとする 初期化されるデータのセグメント名はDATAとする 初期化されないデータのセグメント名はBSSとする ROMに配置する定数データのセグメント名はDATA_CONSTとする ●ラベル名の決まり プログラムの一番最初のラベルは_mainで定義する、かつpublic宣言する。 63 アセンブラプログラムの例 segment TEXT public _main _main: 。 。 。 。 segment TEXT public sub1 sub1: ;<-コード(命令)はTEXT ;<-一番最初は_mainを定義する ;サブルーチンの例 他のファイルから呼ばれる ;場合はpublic宣言する rts data1: data2: data3: moji: segment dc.b dc.w dc.l dc.b segment public data4 data4: dc.b data5: dc.w data6: dc.l data7: data8: data9: segment ds.b ds.w ds.l DATA_CONST 34 1,2,3,4 H’FFFF1234 “ABCDEFGH” ;ROMに配置する定数データはDATA_CONST ;バイトデータ ;ワードデータ ;ロングデータ ;文字列はこのように書く DATA 12 1,2,3,4 H’FFFF1234 ;初期化されるデータはDATA ;他のファイルから参照されるデータはpublic ;バイトデータ ;ワードデータ ;ロングデータ BSS 1 1 2 ;初期化されないデータはBSS ;1バイト領域確保 ;2バイト領域確保 ;4×2=8バイト領域確保 アセンブラテンプレートの利用(H8のみ) アセンブラによるテンプレート(ひな型)がSAMPLE\ASMというフォルダの中にTEMP.ASMという 名前で入っています。それを元にプログラムの作成を開始すれば良いでしょう。 64 ■メイク メイクとは プログラムをコンパイルあるいはアセンブルしてオブジェクトファイル(.OBJ)を作成し、さ らにそれらをリンクして最終的なアブソリュートファイル(SフォーマットファイルやHEXファイ ル)を作成することをメイクと言います。 ただし、メイクは全てのファイルをコンパイルあるいはアセンブルするわけではありません。 ファイルの日付けを調べて変更のあったファイルのみをコンパイル、またはアセンブルします。 これによりメイク時間を短縮することができます。 “メイク”という言葉に対して、“再構築”とは変更の有無にかかわらず全てのファイルをコ ンパイルあるいはアセンブルすることを言います。 プロジェクトの設定に変更があった場合は必ず再構築をしなければいけません。しかし、 YellowIDEはプロジェクトの設定に変更があった場合は、自動的に感知してメイクの代わりに再 構築を実行します。 従ってユーザは常にメイクだけすれば良いと考えて差し支えありません。 メイクはメニューの(プロジェクト)→(メイク)で実行することができます。あるいは[F9] キーでメイクが実行されます。またスピードボタンの す。 をクリックしてもメイクが実行できま ちなみに再構築はメニューの(プロジェクト)→(再構築)あるいは[F10]キーで実行されま す。 メイクを実行してエラーがなければ次の画面が出て、アブソリュートファイルが作成されます。 65 エラー メイクをして、もしエラーがある場合はYellowIDEの画面の下にあるエラーボックスにエラー の内容が表示されます。 上記の例ではCS3048.ASMの14行目に文法エラーがあるということです。エラーボックスの中の エラーメッセージの行をダブルクリックするとソースファイルのエラーのあった場所にジャン プすることができます。これをタグジャンプと言います。 ただし、次の場合はタグジャンプができません。 1. Cコンパイラ、アセンブラのパス2でエラーのあった場合 2. リンカのエラーの場合 上記のエラーの場合は、ソースファイルの記述とエラーの原因が直接関係しているわけではな いのでタグジャンプできません。 この場合はエラーの内容からエラーの起こった原因をユーザが推測するしかありません。マニ ュアルやイエローソフトのホームページのQ&Aコーナーには、これらのエラーの解決策がある場 合がありますので参考にして下さい。また、どうしてもわからない場合は弊社までご連絡下さい。 66 ■実行コマンド YellowIDEのメニューには(プロジェクト)→(実行)があります。また[F5]キーあるいは スピードボタンが実行コマンドと同じことをします。 の この実行コマンドは、プログラムのメイクと、プログラムの実行の両方をします。したがって、 通常のプログラム作成段階では、メイクコマンドはほとんど使用せず、実行コマンドひとつで事 足ります。 実行コマンド使用するとオブジェクトの形式別に以下の一連の操作が行われます。 ●RAMへダウンロードのとき メイクされ、エラーがなければターミナルウインドウが開き、プログラムがターゲットへ転送 されます。 ●ROM化のとき メイクされ、エラーがなければフラッシュROMライタのFWRITE2が起動されます。 イエロースコープでシミュレーションデバッグのとき イエロースコープでリモートデバッグのとき メイクされ、エラーがなければ、イエロースコープが起動されます。 ●ROM化(イエロースコープでROM化)のとき メイクされ、エラーがなければフラッシュROMライタのFWRITE”が起動されます。イエロー スコープは自動起動されません。ROMへの書込みが終わったら、CPUボードのブートモードを 解除し、リセットし、 をクリックしてイエロースコープを起動して下さい。 実行コマンドの動作や起動されるアプリケーションを変更することもできます。詳しくは YellowIDEのヘルプをご覧下さい。 67 第5章 プログラミングヒント ■サンプルプログラムについて サンプルプログラムはSAMPLEというサブフォルダに含まれています。サンプルプログラムは1 種類のみで、タイマー割り込みを使って一定間隔でメッセージを表示するというものです。とて も実用的ではありませんが、IOアクセス、割り込みなどYellowIDEを使う上で基本的な事項がす べて含まれます。なお、実用的なサンプルプログラムについては弊社ホームページで公開してい ます。 SAMPLE 各CPUのC言語サンプル PrjXXXX ASM アセンブラテンプレート(H8のみ) TEMP.ASM PrjXXXX 各CPUのアセンブラサンプル(H8 のみ) サンプルプログラムはソースファイルのみでプロジェクトは作成されていませんので、今まで の内容をご理解の上、プロジェクトを新規に作成してご使用下さい。 68 ■IOアクセス ルネサステクノロジー社H8/300Hシリーズ、SHシリーズなどはメモリマップドIOを採用してい ます。これはIOのアクセスに関して、メモリと同様のアクセスができることを意味しています。 Z80系のマイコンの場合は専用のIOアクセス関数inpやoutpなどがありますが、H8系、SH系などは これらの専用の関数は必要としません。 次のようにシンボルを定義することによってIOレジスタにアクセスすることができます。 #define B_IO #define W_IO #define L_IO (*((volatile unsigned char *)0xffffxx)) (*((volatile unsigned short *)0xffffxx)) (*((volatile unsigned long *)0xffffxx)) /* バイト型 */ /* ワード型(2バイト) */ /* ロング型(4バイト)*/ /* 使用例 */ void main() { unsigned char b; unsigned short s; unsigned long l; /* リード */ b = B_IO; s = W_IO; l = L_IO; /* ライト */ B_IO = b; W_IO = s; L_IO = l; /* ビットのセット */ B_IO |= 0x01; /* 第0ビットをセット */ B_IO |= 0x04; /* 第2ビットをセット */ /* ビットのリセット */ B_IO &= ~0x01; /* 第0ビットをリセット */ B_IO &= ~0x04; /* 第2ビットをリセット */ 上記の例でvolatileは最適化禁止を意味します。これを付けないと最適化によって命令自体が 削除されてしまう可能性があります。 ビットをセット(1を立てる)する場合はORを利用します。ビットをリセット(0にする)にはAND を利用します。 B_IO &= ~0x01; ① B_IO &= 0xfe; ② は と同じですが、①のように書いて②のように書かない理由は①のように書いた方がどのビットを リセットするかがはっきりしているからです。見た目の問題で動作としては同じです。 69 IOレジスタアクセス上の注意 IOレジスタが複数の機能を有している場合は注意が必要です。この場合、一つの機能だけしか 注意が向いていない場合に間違えを犯す危険性があります。 例えば、次の例は割り込み優先順位を決める仮想のレジスタです。ビット0-3がタイマーの割 り込み優先順位、ビット4-7がシリアル1の割り込み優先順位だとします。 レジスタ IPR 7 6 5 4 3 シリアル1 2 1 0 タイマー タイマーの割り込み優先順位を1に設定しようとして IPR = 1; とした場合は、タイマーの優先順位は1になりますが、無関係なシリアル1の優先順位が0に なってしまいます。0でもかまわないなら問題ありませんが、もしシリアル1の優先順位が0で ないなら気を付けなければいけません。特にデバッガを使う場合はシリアルの優先順位はモニタ によって初期設定されていて、この不用意な命令によって書き変わってしまうため、デバッガは 動作しなくなってしまいます。 正しくは次のようにするべきです。 IPR |= 1; このようにビットの操作には|=あるいは&=を使えば、他のビットに影響を与えることはありま せん。 他のビットへの影響が不確定の場合はとりあえず、|=あるいは&=を使うのが安全です。 ただし、上記の例でも不十分な場合があります。上記のIPR |= 1が通用するのはレジスタの初 期値が0の場合のみです。 もしタイマー割り込みの優先順位の初期値が0ではなく7なら、IPR |= 1としても7のままで す。1にはなりません。 その場合は面倒でも次のように記述します。 IPR &= 0xf0; IPR |= 1; //下位4ビットを0にする こうすれば、他のビットに影響することなく、確実に優先順位を1にすることができます。 70 書き込み専用レジスタの注意 ビットのセットおよびリセットにORまたはAND演算を利用するように説明しましたが、書き込 み専用レジスタの場合はこれらの演算を使用してはいけません。ANDやORの代入演算は一度値を 読み込み、演算を施した上、元に戻す動作をします。 例 B_IO |= 0x01; この例では3つの動作に分解できます。仮想の変数bを用いて分解すると b = B_IO; b |= 0x01; B_IO = b; ① ② ③ ここで①に注目して下さい。B_IOは書き込み専用レジスタですから読み出しを行うと不定の値 が読み込まれます。従って③において第0ビット以外は不定の値が書き込まれることになります。 これではB_IOの第0ビット以外は、0が書き込まれたか、1が書き込まれたかはまったくわかりま せん。プログラムは間違った動作をするかも知れません。 従って、書き込み専用レジスタでは単純代入のみによって値を書き換えて下さい。 B_IO = 0x01; ただし、この場合でも前項で説明した他のビットへの影響を十分考慮して記述して下さい。 71 構造体を利用したIOアクセス IOレジスタを次のように構造体で定義するとビットごとのアクセス、およびバイトのアクセス が可能となります。 union b_io { unsigned char BYTE; struct { unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char } BIT; }; #define B_IO b0:1; b1:1; b2:1; b3:1; b4:1; b5:1; b6:1; b7:1; (*((volatile union b_io *)0xffffxx)) 使用例 void main() { /* バイトアクセス */ B_IO.BYTE = 0x33; /* ビットアクセス */ B_IO.BIT.b2 = 1; B_IO.BIT.b3 = 0; /* 第2ビットをセット */ /* 第3ビットをリセット */ 72 ルネサスエレクトロニクス作成のIO定義ヘッダファイル 前項の構造体を利用したIOアクセスの方式はルネサスが採用しているため普及しました。しか し弊社のCコンパイラとビットの割り付け、およびメンバの割り付けについて互換性がないため、 ルネサス作成のIO定義ヘッダファイルはそのままでは利用できません。 相違点は以下の2点です。 ① ビットの割り付け方向が逆 ルネサス製Cコンパイラはビットフィールドを最上位ビット(MSB)から割り付けますが、弊社 製Cコンパイラは最下位ビット(LSB)から割り付けます。 ② 構造体メンバのオフセット割り付けのアライメントの違い 弊社製Cコンパイラでは構造体、共用体のメンバに構造体、共用体、配列がある場合には無条 件にワードアライメント(ワードの境界、H8の場合は偶数番地、SHの場合は4の倍数番地)に割 り当てます。一方ルネサス製では、必要のある場合のみワードアライメントに割り当てます。 以上、①②の相違がありますので、これを避けるためにはYCオプションを指定します。プロジ ェクトの設定画面の「YCオプション」で “構造体”の枠の中の2つのチェックを両方ともチェックして下さい。 73 ■割り込みプログラミング YellowIDEおよびYCシリーズCコンパイラで割り込みを使用する方法を説明します。 割り込みの許可・不許可 YCシリーズCコンパイラにおいて単純な割り込み許可、不許可の命令は以下の組込み関数が使 用できます。 ●H8の場合 _ei(); _di(); //割込み許可 //割込み不許可 ●SHの場合 WriteSR(0); //割込み許可 WriteSR(14<<4); //割込み不許可 これらの関数を使う場合は、sysio.hをインクルードして下さい。 例 #include <sysio.h> 割り込み優先レベルを使った複雑な割り込み制御を行う場合は以下のご説明をお読み下さい。 H8における割り込み制御モード H8には4つの割り込み制御モードがあります。モード2とモード3はH8Sシリーズのみです。ま たすべての割り込み制御をサポートしているわけではありません。詳しくは各CPUの「ハードウ ェアマニュアル」の「割り込みコントローラ」の章をご覧下さい。 モード 割り込み制御モード0 割り込み制御モード1 割り込み制御モード2 割り込み制御モード3 説明 1レベルの優先順位 2レベルの優先順位 7レベルの優先順位 7+2レベルの優先順位 制御に使うレジスタ CCRのIビット CCRのIビットとUIビット EXRのIビット EXRとCCRの組み合わせ どのモードになるかはシステムレジスタSYSCRの設定によりますが、初期値は割り込み制御モ ード0です。 ●割り込み制御モード0 割り込みの優先順位はありません。CCRのIビットをクリアすると割り込み許可になります。I ビットをセットすると割り込み禁止になります。 WriteCCR(0x00); WriteCCR(0x80); //割込み許可 //割込み禁止 _ei()と同等 _di()と同等 補足 WriteCCRはCCRレジスタに値を書き込む関数で標準ライブラリに組み込まれています。この関 数を使用するにはsysio.hをインクルードして下さい。 例 #include <sysio.h> 以後出てくる関数、WriteEXR、_ei、_di、WriteSRについても同様です。 74 ●割り込み制御モード1 1レベルの割り込み優先順位があります。割り込みレベルは0と1の2つです。どちらのレベ ルにするかはインタラプトプライオリティレジスタで行います。 レベル1の割り込みだけ許可するにはCCRのIビットを1にUIビットを0にします。 レベル1とレベル0の割り込みを許可するにはCCRのIビットを0にします。 WriteCCR(0x80); WriteCCR(0x00); //レベル1の割込みだけ許可 //レベル0とレベル1の割込みを許可 WriteCCR(0xC0); WriteCCR(0x80); //NMI以外の全ての割込みを禁止 //レベル0の割込みだけ禁止 尚、割り込みルーチン内ではNMI以外のすべての割り込みが禁止になります。 ●割り込み制御モード2 7レベルの割り込み優先順位があります。割り込みレベルは1~7まであります。このレベル はインタラプトコントロールレジスタによって設定します。初期値は7で最高レベルです。0に 設定すると割り込みはいかなる場合も発生しません。したがって最低でも1に設定します。 EXRレジスタとの比較によって、それより大きい優先順位の割り込みだけ発生します。 WriteEXR(0); WriteEXR(1); WriteEXR(4); //すべての割込みを許可 _ei()と同等 //レベル2以上の割込みだけ許可 //レベル5以上の割込みだけ許可 WriteEXR(7); WriteEXR(7); //レベル7の割込みだけ許可 _di()と同等 //NMI以外のすべての割込みを禁止 尚、割り込みルーチン内では、EXRはその割り込みのレベルに設定されます。したがって割り 込みルーチン内では、その割り込みよりレベルの高い割り込みだけ許可されます。 ●割り込み制御モード3 これに関してはサポートしているCPUも少なく、使用頻度も少ないので説明を省略させていた だきます。興味のある方は各CPUのハードウェアマニュアルをご覧下さい。 ●_ei()、_di()関数 H8のみ もし、割り込みレベルの機能を使わないで、単純に割り込みを許可、禁止したいなら_ei()、 _di()関数を使用して下さい。 _ei(); すべての割り込みを許可します。 H8/300HのときWriteCCR(0x00)と同等です。 H8SのときはWriteEXR(0)と同等です。 _di(); イエロースコープが使う最高レベルの割り込みを除いてすべての割り込みを禁止します。 H8/300HのときWriteCCR(0x80)と同等です。 H8SのときはWriteEXR(6)と同等です。 75 最重要!! スタートアップルーチンでは、割り込み制御モードは1または2に設定しています。H8/300H 系ではモード1です。モード2が存在するH8S系ではモード2に設定しています。 (ただしH8S2655 はモード1) これはイエロースコープとの兼ね合いで、イエロースコープが使用する割り込みの優先順位を あげるためです。ですから、デバッガを使わない場合はスタートアップルーチンでシステムレジ スタSYSCRの設定を削除することにより、デフォルトのモード0にすることができます。 SHシリーズの場合 SHの割り込みの説明はしませんでしたが、H8の割り込み制御モード2と似ています。違いはレ ベルが0から15まであることです。デバッガが使う割り込みのレベルは15ですから、それ以外の 割り込みのレベルは14以下にして下さい。初期値は0ですから1以上14以下に設定して下さい。 割り込み制御はSRレジスタにて行います。 割り込みの許可と禁止は次のようにします。 WriteSR(0); //全割込み許可 WriteSR(14<<4); //割込み禁止、4ビット左にシフトする 割り込み許可ビット 割り込みは、各割り込み要因の割り込み許可ビットをセットしないと発生しません。ですから CCRレジスタを0に設定しても割り込み許可ビットが0のままだと割り込みは発生しません。 詳細は各CPUのハードウェアマニュアルを参照して下さい。 割り込み要求フラグ 割り込みが発生すると割り込み要求フラグが自動でセットされ、割り込み関数に制御が移りま す。しかし、この割り込み要求フラグは自動でクリアされないため、ユーザがクリアする命令を 割り込み関数内に記述しないと割り込み要求フラグはセットされたままになります。 割り込み要求フラグがセットされたままだと、割り込みが終了したらまた同じ割り込み関数内 に戻ってしまってメインのプログラムに戻ることはありません。 また、割り込み要求フラグは値を一度読み込んでからクリアしないと、クリアされません。 例 IRQRのビット0が割り込み要求フラグの場合 IRQR = 0; //クリアされない IRQR &= 0xfe; //&=でクリアすればクリアできる 76 アセンブラの場合 アセンブラの場合は次のように記述します。H8の場合の例です。 segment TEXT public int_func int_func: PUSH ER0 PUSH ER1 MOV.B AND.B MOV.B 。 。 。 POP POP RTE @IRQR,R0L #H’FE,R0L R0L,@IRQR ER1 ER0 ;使用するレジスタの保存 ;割込み要求フラグのクリア ;レジスタ復帰 ;最後はRTEで戻る 77 イエロースコープ使用上の注意 イエロースコープを使って割り込みプログラムをデバッグするには次のことを守って下さい。 ●割り込み制御モード2があるH8SシリーズのCPUの場合 割り込み制御モード2で動作します。デバッガが使う割り込みは最高位のレベル7に設定され ています。従って他の割り込みはレベル6以下にして下さい。初期値はレベル7なので必ず6以 下にする命令を記述しなければいけません。 これをしないと次のような不都合がおこる場合があります。 割り込み関数内でトレース動作しない。 プログラムの中断をするとエラーになる。 割り込みの許可と禁止は次のように記述して下さい。 WriteEXR(0); //割込み許可 0から6までの値ならOK 7には絶対にしない WriteEXR(6); あるいは _ei(); //割込み禁止 WriteEXR(7)としてはいけない //割込み許可 _di(); //割込み禁止 ●H8/300Hシリーズおよび上記以外のH8S(例えばH8S2144)の場合 割り込み制御モード1で動作します。デバッガが使う割り込みは最高位のレベル1に設定され ています。従って他の割り込みはレベル0にして下さい。初期値はレベル0なので何もしなけれ ばOKです。 割り込みの許可と禁止は次のように記述して下さい。 WriteCCR(0x00); //割込み許可 WriteCCR(0x80); //割込み禁止 WriteCCR(0xC0)としてはいけない あるいは _ei(); //割込み許可 _di(); //割込み禁止 ROMデバッグの場合は、必ずWriteCCRあるいは_ei()/_di()を使って下さい。インラインアセン ブラ等で直接CCRレジスタの値を書き換えないで下さい。 これはデバッガに現在のCCRの状態を伝えるためで、直接CCRレジスタを書き換えるとデバッガ がCCRの状態を把握できなくなります。 アセンブラの場合も同様で、必ず_eiおよび_diを使って下さい。 例 extern __ei __di jsr @__ei ;先頭に下線が2個です。 ;割込み許可 jsr ;割込み禁止 @__di 78 リモートデバッグの場合は直接CCRを書き換えてもかまいません。 ROM デ バ ッ グ の場合で割り込み関数内もトレースしたい場合は、割り込み関数の先頭に _trace_ei()を記述して下さい。 void interrupt int_func(void) { _trace_ei(); 。。。 } この関数はWriteCCR(0x80)と同じで、レベル1の割り込みのみ許可します。この関数を記述し ないと割り込み関数内ではトレースできません。 アセンブラの場合は、次のように記述して下さい。 segment TEXT public int_func int_func: PUSH ER0 PUSH ER1 extern __trace_ei ;先頭に下線が2つ jsr @__trace_ei ●H8Tinyシリーズの場合 上記H8/300Hと同様ですが、直接CCRを書き換えてもかまいません。また_trace_ei()関数を呼 ぶ必要はありません。 ●SHシリーズの場合 割り込みを禁止するときレベル15の割り込みまで禁止しないで下さい。なぜならイエロースコ ープがレベル15の割り込みを使用するからです。 WriteSR(14<<4); //割り込み禁止 まとめ H8/300HとH8SのROMデバッグの場合が少々複雑ですが、_ei()および_di()を使うことに注意し て下さい。 79 割り込み関数の記述 割り込み関数は先頭にinterruptをつけて下さい。また引数も戻り値もとることができません ので必ず、voidにして下さい。 void interrupt int_func(void) { IRQR &= 0xfe; //割込み要求フラグのクリア 。。。 } 中身は通常の関数と同様です。レジスタの保存と復帰はコンパイラがしますのでユーザは特に 記述する必要はありません。 前項で説明したように割り込み関数の先頭では必ず、割り込み要求フラグをクリアして下さい。 割り込みベクタの設定 割り込み関数を記述しただけでは、割り込みが発生した場合にその割り込み関数にジャンプし てくれません。割り込みベクタの設定をして、はじめてその関数に制御が移ります。 割り込みベクタの設定は本来、スタートアップルーチンにアセンブラで記述しますが、 YellowIDEが自動で作成しますので、それを使用します。 メニューの(プロジェクト)→(設定)の「割り込み」で割り込み関数を登録します。 YellowIDE7からは、プロジェクトの設定以外に、ソースプログラム中に割り込みベクタの設定 を記述することができます。こちらの方法を強く推奨します。 たとえば、ベクタ番号13の割り込みを以下のように記述すると、割り込みベクタの設定も自動 で行われるようになりますので、(プロジェクト)→(設定)で割り込みベクタの設定をする必 要はありません。 void interrupt __vectno__ {13} int_func(void) { 。。。 } __vectno__の前後の下線(_)は2つずつあることに注意して下さい。 __vectno__による割り込みベクタの設定と、従来の(プロジェクト)→(設定)によるベクタ の設定の両方を併用することもできますが、__vectno__による方法で統一することを推奨します。 両方使用して、矛盾が生じる場合は、__vectno__による設定の方が優先されます。 80 __vectno__のベクタ番号を-1にすることにより、デフォルト割り込みの関数を定義できます。 void interrupt __vectno__ {-1} defint(void) 。。。 } { デフォルト割り込みは、設定されていないベクタ番号の割り込みが発生した場合に呼ばれる割 り込み関数で、これを定義しておけば、予期せぬ割り込みが発生した場合や、ベクタ番号の間違 えなどで、プログラムが暴走するのを防ぐことができます。 アセンブラの場合は、割り込みルーチンのセグメント内に__VECTNO__を記述します。 segment TEXT public timer timer: __VECTNO__ 25 PUSH ER0 PUSH ER1 ;割込み関数は必ずpublic宣言をする ;割込み関数内ではサブルーチンも含めて ;使用するレジスタをすべて保存する ベクタ番号が-1の場合はデフォルト割り込みになります。 まとめ(割り込みベクタの設定方法) ●C言語の場合 void interrupt __vectno__ {ベクタ番号} 関数名(void) ベクタ番号が-1のときはデフォルト割り込みになる。 ●アセンブラの場合 __VECTNO__ ベクタ番号 割り込みルーチンのセグメント内のどのニーモニックよりも前に記述して下さい。 ベクタ番号が-1のときはデフォルト割り込みになる。 81 レジスタバンクの利用(SH2Aのみ) SH2Aでは割り込み関数でレジスタバンクが使用できます。 void interrupt __bank__ int_func(void) 。。。 } { __bank__の前後の下線(_)は2つずつあることに注意して下さい。 レジスタバンクを利用すると、レジスタの退避が行われませんので、割り込みに対して高速に 応答することができます。 レジスタバンクの初期設定はコンパイラは行いませんので、アプリケーションプログラム側で 行っておく必要があります。 82 YC シリーズ C コンパイラ プログラマーズマニュアル 発行年月 発行所 2014 年 9 月 株式会社エル・アンド・エフ 〒175-0083 東京都板橋区徳丸 4-2-9 TEL 03-5398-1116 FAX 03-5398-1181 http://www.l-and-f.co.jp Copyright 1999-2014 L&F Co.,Ltd.
© Copyright 2024 Paperzz