FRK-FM3 (2) Keil µVision3 + GCC の準備 (1) ― 2012年03月01日 22時24分16秒
さっそく準備を始めよう。
① keil の最新版 MDK-ARM V4.23 を手に入れる。
解凍して必要な物を手に入れるためだ。
必要なのは
②念のため現在インストールしてある環境の上記ディレクトリとファイルのバックアップを取っておく。
MDK-ARM V4.23 をそのまま使う場合はこのような手続きは必要ない。なぜこのような事をやるのかというと、 µVision4 が使いにくいからだ。
③①のディレクトリとファイルを現在使っている環境にコピーする。
ただし、私のように µVision3 を使っている場合は UV4.cdb を UV3.cdb にリネームしなければならない。ちなみに UV4.cdb は device databases file の事でコピーしたディレクトリは、この device database に関係するものだ。
④確認のため富士通のサンプルをコンパイルしてみよう。
うまくいかなければどこかに間違いがあるはずだ。
ここまでは問題なく進むだろう。手間がかかるのはこれからだ。
⑤startup を作成する。これは富士通のサンプルを修正して使うことにしよう。ファイル名も同じ startup_mb9bf61x.s でいいだろう。
⑥リンカースクリプト、ファイル名は ldscript_rom_gnu.ld にしておこう。
今日のところはここまでにしておく。
もちろん、gcc での確認はまだ行っていない。
① keil の最新版 MDK-ARM V4.23 を手に入れる。
解凍して必要な物を手に入れるためだ。
必要なのは
Keil\ARM\INC の中の全て Keil\ARM\CMSIS の中の全て Keil\ARM\Startup の中の全て Keil\UV4\UV4.cdb必要ないものもあるが細かな作業を省くため
②念のため現在インストールしてある環境の上記ディレクトリとファイルのバックアップを取っておく。
MDK-ARM V4.23 をそのまま使う場合はこのような手続きは必要ない。なぜこのような事をやるのかというと、 µVision4 が使いにくいからだ。
③①のディレクトリとファイルを現在使っている環境にコピーする。
ただし、私のように µVision3 を使っている場合は UV4.cdb を UV3.cdb にリネームしなければならない。ちなみに UV4.cdb は device databases file の事でコピーしたディレクトリは、この device database に関係するものだ。
④確認のため富士通のサンプルをコンパイルしてみよう。
うまくいかなければどこかに間違いがあるはずだ。
ここまでは問題なく進むだろう。手間がかかるのはこれからだ。
⑤startup を作成する。これは富士通のサンプルを修正して使うことにしよう。ファイル名も同じ startup_mb9bf61x.s でいいだろう。
⑥リンカースクリプト、ファイル名は ldscript_rom_gnu.ld にしておこう。
今日のところはここまでにしておく。
もちろん、gcc での確認はまだ行っていない。
FRK-FM3 (2) Keil µVision3 + GCC の準備 (2) ― 2012年03月04日 19時34分43秒
さて、project を作成してコンパイルしてみよう。
プロジェクト名は mb9bf61xt_template オリジナルのままでよいだろう。
いつものようにデバイスを選択して(MB9BF618T)プロジェクトにファイルを追加する。
追加するファイルは
続いて CCタブ、注意する点は Include Paths に
同様にアセンブラでも CMSIS ディレクトリを Include Paths に含める。
最後はリンカーの設定
そしてコンパイル。
あれ、エラーが出てリンクできない。
同じエラーだ。
はて...
なぜ??
環境:Keil µVision3 + GCC
プロジェクト名は mb9bf61xt_template オリジナルのままでよいだろう。
いつものようにデバイスを選択して(MB9BF618T)プロジェクトにファイルを追加する。
追加するファイルは
startup_mb9bf61x.s main.c system_mb9bf61x.c次に Options for Target の設定、先ずは出力ディレクトリを指定する。
続いて CCタブ、注意する点は Include Paths に
C:/Keil/ARM/CMSIS/Include/を追加する事、 µVision4 では必要ないが µVision3 には必要だ。
同様にアセンブラでも CMSIS ディレクトリを Include Paths に含める。
最後はリンカーの設定
そしてコンパイル。
あれ、エラーが出てリンクできない。
Build target 'MB9BF618T_Release' compiling system_mb9bf61x.c... compiling main.c... ../source/main.c(44): warning: return type of 'main' is not 'int' assembling startup_mb9bf61x.s... linking... c:/program files/raisonance/ride/arm-gcc/bin/../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-init.o): In function `__libc_init_array': init.c:(.text+0x38): undefined reference to `_init' collect2: ld returned 1 exit status Target not createdそれではと 以前コンパイル動作確認済みのプロジェクト(LPC1114用)をコンパイルしてみる。
同じエラーだ。
はて...
なぜ??
環境:Keil µVision3 + GCC
FRK-FM3 (2) Keil µVision3 + GCC の準備 (3) ― 2012年03月24日 09時36分58秒
私の記憶によれば startup.s からライブラリを呼び出し、ライブラリの中でスタックポインタの設定、RAMの初期化などを行い、そこから main() を呼び出す。という手順だったはずだ。
ところが __libc_init_array() から _init() を呼び出したが見つからないというエラーで困っているわけだ。このあたりの詳細は知らないので別の方法を考える事にする。
しかし、以前はコンパイルが通っていたのになぜこんな事になってしまったの?
別の方法とは、 startup.s の中で RAM の初期化を行い、直接 main を呼び出すやり方。
いまいちすっきりしないがここはこれで逃げておこう。
もしかするとダミーの _init() 追加でもいけるのか?
環境:Keil µVision3 + GCC
ところが __libc_init_array() から _init() を呼び出したが見つからないというエラーで困っているわけだ。このあたりの詳細は知らないので別の方法を考える事にする。
しかし、以前はコンパイルが通っていたのになぜこんな事になってしまったの?
別の方法とは、 startup.s の中で RAM の初期化を行い、直接 main を呼び出すやり方。
いまいちすっきりしないがここはこれで逃げておこう。
もしかするとダミーの _init() 追加でもいけるのか?
環境:Keil µVision3 + GCC
最近のコメント