- - PR -
前回は、目の前のパソコンを通じてコンピュータの内部で何が行われているかを理解し、マイコンのアセンブラを理解するのに必要な基礎知識を固めた。今回はいよいよ、アセンブラでのマイコン・プログラミングに踏み込む。自作LEDフラッシャボードの完成までの道のりは、今回で八割までたどれると考えてよい。
AVR Studioを使って、プログラムを動かしてみよう
「AVR Studio」を最初に起動すると、プロジェクトの作成・選択画面が現れる(図1)ので、「New Project」を選択して次に進む。
次に、プロジェクトのタイプを選択する。「アセンブラかC言語か」ということなのだが、今回はアセンブラなので「Atmel AVR Assembler」を選択し、さらに「Project name」にプロジェクト名を入力する。今回まずは、
- 入出力ピン「PORT B」の7番〜0番(PB7〜PB0)を出力に設定する
- PB7〜PB0を「Low」にする
だけのプログラムを実行するため、プロジェクト名は「ledflash-low」とした(図2)。
図2 プロジェクトの設定(言語の選択、プロジェクト名の決定)
さらに進み、「Debug platform」で「AVR Simulator」を、「Device」で「ATmega16」を選択する(図3)。実際にATmega16を動作させるのではなく、「動作のシミュレーションを行ってみる」ということだ。
図3 プロジェクトの設定(デバッグ・プラットフォームとデバイスの設定)
シミュレータは万能ではないし、人が作る以上は不具合もあり得る。不具合がなくても、「シミュレーションは完ぺきなのに、実際に実行してみると問題が発生する」という問題が、実際にはしばしば発生する。計算機シミュレーションの結果は、どこまでも計算結果でしかないので、生々しいモノの世界では想定外の出来事が起こる。「シミュレータは当てにならないから嫌い」と公言する開発者は少なくない(注1)。
しかし、シミュレータがあれば、実際にモノがなくても、プログラムだけは動かしてみることができる。特に「初めて」の障壁を下げるのには有効なので、今回は利用する。シミュレータの中では、どういう失敗をしてもモノは何も壊れない。そう思えば、アセンブラが初めてでも、まったく怖くない気分にならないであろうか?
ここまでの設定が終わると、図4の画面が現れる。
中心の真っ白なウィンドウが、プログラムを書き込むための場所だ。ここに、リスト1のソースコードを書き込み、「File」→「Save」で保存する。内容は分からないままで構わない。
; PORTBをLOWにするプログラム |
| リスト1 PORTBをLOWにするプログラム |
次に「Build」→「Build」でアセンブルを行い、このソースコードを機械語にする。エラーがなければ、次に動作のシミュレーションを行うことができる。「Debug」→「Start Debugging」で、シミュレーションが開始される。このとき、ソースコードの「RESET:」の次の行の左側に、黄色い矢印が表示されているはずだ(図5)。
「これからその行を実行する」ということであるが、まだ実行されていない。この状態で、「View」→「Toolbars」で「Processor」にチェックを入れて画面左側に表示させ、リストから「Registers」をクリックし、その中の「R16」が視野に入るようにする。右側の「I/O View」で「PORTB」を選択すると、その下に「PORTB」「DDRB」「PINB」が表示される(図6)。
「F11」キー(Step Into)を押し続けると、黄色い矢印が1行ずつ下に進んでゆき、プログラムがステップ実行される様子が分かる。同時に、左側の「R16」や、右側の「DDRB」の表示に何か変化が起こる。黄色い矢印は最後の行の下には進まない。最後の行で「F11」を押すと、矢印は実行を開始した行に戻る。もう一度、最初から実行したかったら、「Debug」→「Reset」でリセットしたことにして、また「F11」を押してステップ実行する。
あなたがアセンブラでプログラムを書くのが初めてで、内容がまったく分からないままのコピー&ペーストであるとしても、とにもかくにも、あなたの書いたプログラムは動いている。まずは祝おうではないか。
| 注1:筆者は足掛け20年ほど、計算機シミュレーションにかかわり続けている。その立場からも、ぜひ、シミュレータを過信しないでいただきたいと願う。想定外の出来事はシミュレーション技術の重要な推進力なのだが、実在するシミュレータは、必ずどこかが不完全なものである。「当てにならない」といわれたら、筆者は「済みません。でも、そういうものだと思って使ってもらえませんか?」というしかないのだ。 |
関連記事 半導体/エレクトロニクス
- 連載:イチから作って丸ごと学ぶ! 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)

















