Sabotenboy's *sigh*
今年こそ本業を変えたいなぁ...^^;




このBlackfin本ではコマンドラインでのbuildを想定している
(Eclipseの説明に紙面を費やさなくていいからと思われ^^;)

コンパイル後のボードへの書き込みはD&D可能なユーティリティ Blackfin MiniConfigがある

CQのIFX-49サポートページからLチカのコードを持ってきて、適当に解凍、そのディレクトリからmake一発でbuildされる(gcc 4.5.3)
(このLチカプログラム、本書P25に彗星のように現れるが付属CR-ROMには収録されていない^^;、なのでCQのページから持ってくる必要がある)

コンパイラのバージョン違いのせいか、微妙にオブジェクトのサイズが本のスクショと異なる、この程度プログラムでも差が出るのか...、gcc

CD-ROMからインストールしたMiniConfigを起動、
IFX-49はUSBにつないだ後、例のショートプラグでBOOTジャンパをショート後、RESETボタンを押して書き込みモードにしておく
BF592には起動モードを決めるピンが3つあり(BMODE 0/1/2)、本書P135の回路図中上部にメモがあり、IFX-49では
 BMODE2はH固定、BMODE0はL固定、そしてショートプラグでBMODE2をH(ショート)かL(オープン)に変更できる

BM2/1/0がHLLだとフラッシュから起動、
BM2/1/0がHHLだとUARTで書き込みモード

ということの様だ

led_blink.ldrをMiniConfigへD&Dすると書き込みが始まる、
結果をすぐ見たいだけなので「直接ブートするだけ」を選択、バイナリは実行用SRAMに転送されすぐに実行される

IFX-49のパワーインジケータの赤いLEDの下にある緑のLEDが早めのサイクルで点滅する、Lチカ完了^^

(ちなみにこのLチカ、中を見るとwaitはforループをネストして、外で2000回、中で2000回、4000000回回して時間を稼いでいる(!)、なんと力技な^^;)

RESETボタンを再度押すとSRAM内のコードが消えて元の状態に(緑LEDは点灯状態)
ちょっと動かす分にはこれは都合がいい

RESETする毎にプログラムが消えては困る場合は「フラッシュへ書き込む」を選択、この場合書き込み後に再度RESETを押すと起動する

 

...さて、付属ツールは期待通りの動作だったので次は昨日インストールしたEclipse & 似非gnICE+環境でbuild and debug!

Lunaで空プロジェクトを作り、Filesystemから今試したLチカのmain.cをインポート
Processorは忘れずにBF592を指定

...でbuildするもerror 2 (!)

includeファイルであるところの builtins.h 153行目で"asm operand has impossible constraints"、あー厄介^^;

153行目は、

   void * __rval = __builtin_prefetchmodup(__a);

これの定義が35行目、

 #define __builtin_prefetchmodup(x) ({ void *__p = &(x); __asm__ __volatile__ ("PREFETCH[%0++];" : "+p"(__p)); __p; })


あったあった"asm"、gccのインラインアセンブラは...^^;、未知の領域なのでドキュメントを漁る...
- Intel形式と逆のAT&T/UNIX形式で、オペラントのsopurceとdstinationが逆(!)、ほー
- レジスタ名は%から始まる、OK
- 定数は$で始まり、16進数は0xで始まるから、16進数定数は$0xで始まる、OK
- op-codeの語尾がb/w/lのどれかで、オペランド長が8bit/16bit(word)/32bit(long)と分かる
- メモリ参照の書き方がIntel形式と異なる
- asm と __asm__ はいずれも有効
- コードが複数行になるときは""でくくって1行毎に改行するが各行末に \n\t をつける、GASにnew lineとtabを渡すため

問題は Extended asm で":"で区切ったりしている部分と思われるが、取り敢えずgive up
JTAGのテストを進めます^^;

- CQのサンプルLチカを適当に修正、PLL初期化の部分は削除、PG4(IFX-49で緑LEDがつながってる)を操作

- IFX-49のショートプラグはJTAGケーブルと干渉するので外しておく
- JTAGをつなぎbfin-gdbproxy起動

- build
- debug設定、remote Targetのポートは2000

この辺りは昨日試した金子システムのデバッグ手引き通り^^
- debug!

Runすれば緑のLEDが点滅しますし、止めてステップトレースも出来ますし、レジスタの内容も見えます
期待通りの動作、似非gnICE+でのデバッグはちゃんと動いた訳です^^

CQのLチカサンプルをそのままgcc 4.5ベースのToolchainでコンパイルしたら、Toolchainに含まれるincludeファイルでインラインアセンブラ関係のエラーが出てそのままBuildは出来ませんでした
でもコマンドラインでmakeしたら問題無く、CQ提供のツールでIFX-49のSRAMに書込み/即時実行も試せました

でもCQのコードを簡略化して、PLL初期化のところをむしったところ、「Eclipse Luna, gcc 4.5 and 似非gnICE+」でJTAGを使った開発が出来そうなことが確認できました^^
心なしか同じDSPなのに、IFX-49の方が金子システムの基板よりEclipseからのデバッグコマンドに対する反応が良かったような気がしますが、何かの機会があったら調べてみます

しかし、インクルードファイル内でインラインアセンブラのエラーはいずれ解決せねば...

 

CQ出版さん、Eclipseを使ってCD-ROMコンテンツをエラー無しにコンパイル出来るとこまで教えてくださ~い^^;
commonをインクルードに加える位はともかく、なぜインラインアセンブラエラー???
コマンドラインだとコンパイルが通るのも???
makeファイルをよく読めという話でしょうか^^;




 



コメント ( 0 ) | Trackback ( )


« Blackfin (1.5... Blackfin (3) ... »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。