C30コンパイラのアセンブル出力

PIC24F,H,dsPIC用CコンパイラC30でコンパイルすると通常オブジェクトファイル(.o)が出力される。このコンパイラの実体はgccなので、中間結果のアセンブラ出力も可能である。
ところがMPLABのインタフェースにはアセンブル出力指示が出来ないので、どうやればアセンブラ出力が得られるか説明する。この方法は、C言語における記述をASM30でどのように記述すればよいか勉強するのに役立つと思う。
先に書いておくと、ビルド・オプションのタブ「MPLAB C30」にある「Use Alternate Settings」に「-S」を追加しても効き目がない(-cオプションが強制的に挿入されるため)。



MPLABにおいて該当プロジェクトを開いた状態から。
  1. とりあえずメニュー「Project」→「Build All」でプロジェクトをビルドする。
  2. ウィンドウ「Output」のタブ「Build」の出力から、目的のコンパイル・コマンドを探す。例えば、main.cのコンパイルなら以下の通り。
  3. Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=24FJ64GA002 -x c -c   "main.c" -o"main.o" -D__DEBUG -g -Wall
    
  4. メニュー「Project」→「Build Options...」から最下段の「Project」を選択。
  5. タブ「Custom Build」を選択。
  6. 「Pre-Build Step」にチェックを付ける。
  7. 「Enter a command line to be executed before a build begins」に先ほどのコンパイル・コマンドを入力する。ただし
    • 先頭の「Executing: 」を削除。
    • 「-x c -c」の部分を「-S」で置換。
    • 出力ファイル名(-oの後ろ)の拡張子を変更(main.o → main.sあるいはmain.txt)。
    • 上記のコマンドなら以下のようになる。


    "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=24FJ64GA002 -S "main.c" -o"main.s" -D__DEBUG -g -Wall
  8. OKボタンを押して、ダイアログを閉じる。

  9. 再度メニュー「Project」→「Build All」でプロジェクトをビルドする。

  10. 出力ディレクトリに指定したファイルが作成されているので、内容をチェック。



gcc的にアセンブラ・ファイル拡張子「.s」あるいは「.S」だが、MS-Windowsだと.txtの方がエディタで開きやすいと思うのでお好みで。


バッチ(シェル・スクリプト)を実行したり、makeコマンドを使いこなす人には雑作もない話だが、「それなんですか?」的な人向けに紹介。