XcodeでGR-PEACHの開発ができるプロジェクトテンプレートを作りました。

ついでに、OpenOCDとGDBでデバッグできるようにコンフィグレーションも書きました。

ここからダウンロードできます。

Xcodeテンプレート: https://drive.google.com/file/d/0B_DNXyJl_hLmOGZOZEhjQmtLUHM/view?usp=sharing

OpenOCDコンフィグ: https://drive.google.com/file/d/0B_DNXyJl_hLmd1I5aFpWcUtKODA/view?usp=sharing 

icon256

Xcodeテンプレートのつかいかた

めんどくさかったので、パッケージは作りませんでした(やっけつ)。

当然ですが、arm-none-eabi-gccが必要です。ググれば出てきますので、好きな場所にインストールしてください。

コンパイラにclangを使いたかったら適当にMakefileを書き換えてください。ちゃんと動作します。

Xcodeテンプレートは以下の手順でインストールします。

  1. 展開する
  2. ~/Library/Developer/Xcode/Templates/Project Templatesに入れる
  3. Makefileの1行目にarm-none-eabi-gccのbinへのパスを入れる。(例:GCC_BIN = $(HOME)/Documents/arm-none-eabi-gcc/bin/)

定期的にライブラリをアップデートしましょう。以下の手順でオンラインコンパイラからエクスポートしたライブラリに置き換えてください。

  1. オンラインコンパイラでライブラリを右クリック→アップデート
  2. プロジェクトを選択して⌘-E→Export ToolchainでGCC (ARM Embedded)を選択→Export

あとは以前に作ったNUCLEO-F401RE用プロジェクトと同じように使えます。

参考: http://gcraud.blog.jp/archives/43977726.html

OpenOCDコンフィグレーションのつかいかた

当然ですが、OpenOCDが必要です。Homebrewでインストールするのがオススメ。

基本的には、一つのシェルでOpenOCDを、もう一つのシェルでarm-none-eabi-gdbを走らせることになります。

$ openocd -f path/to/GR-PEACH.cfg
$ arm-none-eabi-gdb path/to/elf

みたいな感じで実行すればデバッグできます。詳細なやり方についてはググればいい説明がたくさん出てきます。

と思ったらなんかあんまりヒットしなかったので詳しく書きます。

デバッグをするにはデバッグ用にプログラムをビルドする必要があります。

Makefileの最初あたりにDEBUG=1と書き込み、Cleanしてからビルドしましょう。

デバッグ前にプログラムはアップロードしておいてください。

マイコンの準備ができたらターミナル.appを起動し、以下のコマンドを実行しましょう。

$ openocd -f path/to/GR-PEACH.cfg

path/to/GR-PEACH.cfgはダウンロードしたGR-PEACH.cfgへのパスに置き換えてください。

実行するときっとこんな感じの表示が出てきます。内容はあまり気にしなくても構いません。
ocd 

次にターミナル.appの新しいウィンドウを作成(⌘-N)し、以下のコマンドを実行します。

$ arm-none-eabi-gdb path/to/elf

path/to/elfはXcodeプロジェクト内のBuilds/プロジェクト名.elfというファイルへのパスに置き換えてください。

実行するときっとこんな感じの表示が出てきます。

gdb1
さらに次のコマンドでOpenOCDに接続します。

(gdb) target extended-remote :3333

gdb2
ここまで来れば後は普通のGDBと同じように使えます。詳細なやり方については今度こそググればいい説明がそれはもうたくさん出てきます。

gdb3
デバッグ中にシリアル通信をすることも問題なくできます。

プログラムを変えたくなったら、GDB、OpenOCDを終了(Ctrl-C)し、プログラムを書き込んだ後、一度USBケーブルを抜いてください

一般的にはGDBでloadコマンドを実行すればいいのですが、GR-PEACHではできないようです。

※OpenOCDにflash driverがないため不可能?なぜか一回だけならプログラムが書き込めるものの、二回目でmbed interfaceがターゲットをreset/haltできなくなる。

いちいちGDBを実行するたびtarget...を打つのは面倒なので、引数に指定してコマンドを使い回すと便利です。

こんな感じ

$ arm-none-eabi-gdb path/to/elf -ex 'tar extended-remote :3333'

ついでにtargetをtarと略してしまいました。GDBはこのようにコマンドを最低限の長さまで略すことができます。

困ったことがなかったら

一緒にピーチで苦しみ楽しみましょう。うまく動かなかったらごめんなさい。

(文:管理人の元相方)