Arduino を使った ATtiny10 の書き込み (3)

今回は前回の記事に関して、いくつかの補足を示します。

まず、前回は、ライセンスについて明記しませんでしたが、このプログラムは Atmel の AVR918 のソースにわずかな変更を加えただけなので、もともとの Atmel のライセンス条件がそのまま適用されるものとします。
詳しくは各ファイルの先頭のコメントを参照してください。
変更部分は条件コンパイルの「#if 〜 #endif」で囲んであり、「ORIGINAL」というシンボルが定義された状態でコンパイルすると、元のプログラムの記述のままコンパイルされるようにしてあります。
唯一の例外が、「main.c」です。
Arduino IDE の処理では、「.pde」ファイルが加工され、関数のヘッダ部分が抜き出されてプロトタイプ宣言としてソースに付加されるのですが、この過程では条件コンパイルは無視されるので、「.pde」ファイルの中に main() 関数があるとトラブルになります。
そこで、「Arduino918.pde」では、元の記述は消して、Arduino 形式の setup() 関数と loop() 関数を使う形に書き直してあります。
また、「スケッチ・ブック」内の「.c」、「.cpp」ファイルは個別にコンパイルされ、C++ プログラムとしてコンパイルされた「.pde」メインファイルのオブジェクトと最終的にリンクされます。
もとの Atmel のプログラムは C++ ではなく C で書いてあるのですが、これをそのまま「.c」サフィックスコンパイルするとリンク時にエラーになってしまいます。
この対処法として最も簡単な方法が、中身は C プログラムでもサフィックスだけを「.cpp」に変更することであり、実際そのようにしてあります。
AVR Studio の IDE から「AVR Prog」を利用して書き込む方法は、時として、デバイス名のリストボックスが空欄となる場合があり、その場合にはうまく書き込みができませんでした。
その場合には、やはり、コマンド・プロンプト (いわゆる DOS 窓) 上で「avrosp」を実行する必要があります。
avrosp の実行方法について、もう少し具体的に説明したいと思います。
まず、私の場合、AVR マイコン用のワークスペース/プロジェクトは

    X:\WSP\AVR

の下に各プロジェクト別のフォルダを作って集めてあります。
「X:」はネットワーク・ドライブで、複数の PC からアクセス可能にしてあります。 「WSP」は「ワークスペース」の意です。
「avrosp」および「ATtiny10.xml」はこのフォルダに置いてあり、操作用のバッチ・ファイルもこの場所に作成しています。
プログラム書き込み時には、コマンド・プロンプトを立ち上げ、カレント・ディレクトリをここに移動したうえでコマンドを発行します。
シリアル・ポート設定用のバッチ・ファイルは、「comosp.bat」という名前で、

    mode com1 baud=115200 data=8 parity=n dtr=off

という内容にしてあります。
ATtiny10 に HEX ファイルを書き込むためのバッチ・ファイルには「pgm_tn10.bat」と名付けてあり、その内容は、

    call comosp
    avrosp -cCOM1 -dATtiny10 -if%1\default\%1.hex -e -pf -vf

となっています。
avrosp のオプションを説明すると、「-e」はフラッシュ消去、「-pf」は -if オプションで指定した HEX ファイルをフラッシュに書き込む指定、「-vf」はフラッシュから読み出した値を -if オプションで指定した HEX ファイルと照合する指定です。
この指定で、消去/書き込み/ベリファイを続けて行うことになります。
バッチ・ファイル中の -if オプションの中の「%1」は、実行時に第一番目の引数と置き換えられます。
たとえば、コマンド・ラインに

    pgm_tn10 sin_tn10

と打って実行させると、-if オプションの部分は、

    -ifsin_tn10\default\sin_tn10.hex

となり、

    .\sin_tn10\default\sin_tn10.hex

を HEX ファイルのパスとして使うことになります。
これは、AVR Studio でプロジェクトを作成する場合の、HEX ファイルが作成されるデフォルト位置に合わせたものです。
AVR Studio を使った開発では、コマンド・プロンプトを前述のように準備した上で、立ち上げたままにしておき、

  • AVR Studio でビルドして新しい HEX ファイルを作成する
  • 入力フォーカスをコマンド・プロンプト側に切り替える
  • コマンド・プロンプト上でフラッシュ書き込みコマンドを (再) 実行する

という繰り返しを、必要なだけ行うことになります。