- - PR -
前回のあらすじ
――マイコンボード「H8Tiny-USB」の入出力インターフェイスを理解し、C言語によるポート制御までをマスターした健一君。立派に制御プログラミングの世界へ足を踏み入れたようです。しかし、ホッとする間もなく、晴子さんから次なる宿題が……。(前回へ)
健一君、今回はちゃんと宿題をやってきたのでしょうか。また、晴子さんに怒られないといいのですが……。
おっと、健一君が来たみたいです。
|
| 注:本連載では、筆者が実際にH8Tiny-USBを制作し、動作確認を行った内容を掲載していますが、読者個人で作成したH8Tiny-USBの動作保証や、H8Tiny-USBを使用したことによる、損害・損失については一切保証できません。すべての作業は自己責任で行ってください。よろしくお願いします。 |
H8Tiny-USBのハードウェアを分析しよう
| ここは健一君が所属する大学のサークル部屋。また、いつもの足音が聞こえてきました……。 | |||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
|
――「H8マイコン道」もソフトウェア編の3回目に突入しました。晴子さんが出した宿題に健一君も頑張って取り組んだようです。しかし、健一君にとっては、まだまだマイコン制御プログラムの世界は奥が深いようです。まずは、健一君のプログラムをH8Tiny-USBで動かすことからはじめましょう!
以下は、健一君が作ったプログラムです(ソースコード1)。
/* SW1が押された回数を表示する。 |
| ソースコード1 健一君が作ったプログラム |
| ▼ソースコード1のダウンロード(swcount_01.lzh) |
なるほど、C言語のプログラムとしては、うまくできているようですね。晴子さんの宿題(2)では、7セグメントLEDに「0」〜「9」まで表示させることになっていました。
晴子さんからの宿題(2) SW1を押した回数を、7セグメントLEDに表示するプログラムを作ってね。ただし、カウンタの初期値は「0」よ。それと、「9」の次のカウントで最初の「0」に戻ること! |
健一君のプログラム(ソースコード1)を見てみると、char配列LEDに表示パターンを設定しているようです。
それでは、ソフトウェア編第1回に倣ってプログラムを実行してみましょう!
マイコンのC言語プログラムには、「スタートアップ・ルーチン」が必要でした。まず、これを以下のコマンドでアセンブルします。
$ h8300-elf-gcc -c crt0.s |
どうやら無事にアセンブルできたようです。
次に、C言語プログラムを以下のコマンドでコンパイルします。
$ h8300-elf-gcc -c -mh -mn swcount.c |
ここでもエラーは出ません。
続いて、スタートアップ・ルーチンとC言語プログラムをリンクします。
$ h8300-elf-gcc -o swcount.bin -T 3664.x -nostdlib crt0.o swcount.o |
あらあら、リンクの過程でエラーが出てしまいましたね。健一君は、ここでつまずいたようです。メッセージを読むと、このプログラムは内部でmemcpy関数を使っているようです。ここでは、それを“リンクできない”というエラーが起こっています。
コマンドの「-nostdlib」は、標準のスタートアップ・ルーチンや標準関数を“リンクしない”指定です。このオプションを指定してしまったため、標準関数であるmemcpy関数がリンクできなかったのです。
詳しい説明は後にして(注)、先に進むためにリンクを完了させてしまいましょう。
| 注:詳しくは、本稿の3ページ「変数の記憶域はどこだ」で解説します。 |
以下のコマンドを入力してください。
$ h8300-elf-gcc -o swcount.bin -T 3664.x -nostdlib -mh |
いかがでしょうか。無事にリンクできましたね。最後の「-lc」オプションで標準関数を“リンクする”と指定したのです。
これで実行ファイルが生成されたので、ヘキサファイルに変換します。以下のコマンドを入力してください。
$ h8300-elf-objcopy -O srec swcount.bin swcount.mot |
図1に最終的に生成されたファイル一覧を示します。
![]() |
図1 無事に生成されたファイル |
後は、「swcount.mot」ファイルをライタでROM焼き(ROMに書き込むこと)して、プログラムを実行してください。
|
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
|
![]() |
画像1 ソースコード1の実行結果 |
>>健一君のプログラムの何がいけなかったのか? 次ページで解明します!
関連記事 半導体/エレクトロニクス
- 連載:イチから作って丸ごと学ぶ! H8マイコン道
- 特集:組み込みシステムに吹く“仮想化”の風
- 連載:組み込みマルチコア進化論(連載中)
- 連載:必修! FPGAタイミング解析の基礎(全5回)
- 連載:−ザ・組み込み−ソフトウェアのハードウェア化(連載中)
- 連載:S08ではじめるマイコン制御プログラミング(全6回)
- 連載:マイコン制御基礎の次(連載中)
- 連載:マイコン制御基礎の基礎(全10回)
- 連載:マイコン制御基礎以前(全10回)
- 連載:H8で学ぶマイコン開発入門(全13回)
- 連載:触って学ぼう FPGA開発入門(全6回)
- 連載:FPGA開発テクニック、チューニングの心得(全6回)
- 特集:いまさら聞けない FPGA入門
- 連載:バラして納得! 電子部品入門(全18回)
- 連載:完全マスター! 電子回路ドリル III(全14回)
- 連載:完全マスター! 電子回路ドリル II(全25回)
- 連載:完全マスター! 電子回路ドリル(全25回)
- 目指せ! 電子回路マスターへの道
- 目指せ! 電子回路マスターへの道 Part2
- 分かっておきたい、IP活用の落とし穴
組み込み開発フォーラム 新着記事
- フルスクラッチの“Hello World”を動かしてみよう(2011/3/31)
- FlexRayプロトコルの概要(その2)(2011/3/29)
- JASA、東北地域に拠点を置く会員企業を支援(2011/3/25)
- NEC、震災の影響を受けた4拠点の生産再開を発表(2011/3/23)
- 内部ブロック図の基礎と共通要素(2011/3/22)
- インテル、被災地におけるITインフラの復旧を支援(2011/3/22)
- Facts on AUTOSAR/AUTOSAR導入の現実(2011/3/18)
- 計測器・震災被害ホットラインを開設、テクトロニクス(2011/3/18)
- ZMP、地震の揺れを多角的に計測するアプリ無償配布(2011/3/16)
- メンター、3Dテレビ・マルチメディア検証プラットフォーム(2011/3/16)
- 【番外編】タチの良い計測値、悪い計測値とは?(2011/3/15)
- tarファイルシステムをAndroidに組み込む!!(2011/3/10)















