Raisonance Ride7 & ARM Tools (24) アセンブリコードの条件ディレクティブ ― 2015年08月09日 14時03分20秒
Ride7 を使っていて、以前から漠然とアセンブリコードの条件ディレクティブがうまくいかないと思っていた。今まではファイル内で
しかし、既にあるプロジェクトのアセンブリソースに条件ディレクティブが組み込まれている場合は書き換えるのも手間だ。そこで、なんとか Ride7 でも動くようにしてみようと言うわけだ。
まず、現在のコマンドラインを調べてみることにする。記述してあるのは "AS.config" だ。 これを実際のコマンドラインに展開すると
しかし、assembler-with-cpp の指定が無いのでソースファイルはそのままアセンブラに引きわたしてしまう。
と言うわけでせっかく指定している Define が生かされていないのだった。そこで -x assembler-with-cpp の指定を追加。 結果 ... 問題ない。
Defines で指定したものが有効になっている。
しかし、困ったこともある。アセンブリソースファイルには条件ディレクティブをプリプロセッサで処理するタイプの物とアセンブラで処理するタイプの物があるのだ。
Keil ARMGCC などはアセンブラで処理するタイプなので、そのためのソースは書き換える必要がある。
ちなみに上記キャプチャー画面のプロパティー AS assembler Defines は今回のテストのために追加したものでコマンドラインに展開すると -D が付け加えられる。
さて、それではアセンブラに引き渡すタイプのソースの場合どうすればよいのだろう?
スクリプトファイルを元に戻し AS assembler Additional options で -Wa,--defsym STM32F10X_MD=1 を指定してみる。
もうアセンブラを直接呼び出すしか無いだろう。 結果 ... うまくいった。
しかし、ソースによりスクリプトファイルを切り替えることは多分できないと思うのでどちらを選択するのか考えどころだ。
いや、プロパティで選択できるようにすればよいのかな?
そうそう、直接アセンブラを呼び出した場合
Raisonance\Ride\Config\ExternalTools\PC-lint\ARM\lint_cmac.h
が読み込まれないようなのでこれも問題だ。
環境: Ride7 version 7.30.10.0169
+ RKit-ARM version 1.30.10.0356
+ GCC ARM/embedded-4_9-branch revision 218278
.if (1) .... .endifのように固定値を使っていた。
しかし、既にあるプロジェクトのアセンブリソースに条件ディレクティブが組み込まれている場合は書き換えるのも手間だ。そこで、なんとか Ride7 でも動くようにしてみようと言うわけだ。
まず、現在のコマンドラインを調べてみることにする。記述してあるのは "AS.config" だ。 これを実際のコマンドラインに展開すると
"C:\Program Files\Raisonance\Ride\arm-gcc\bin\arm-none-eabi-gcc.exe" -MD -D_STM32F103xB_ -D_STM32x_ -D_STM32F1x_ -mcpu=cortex-m3 "C:\Keil\ARM\GNU\TEST\CrossWorks\STM32F10X\STM32_Startup.s" -o "C:\Keil\ARM\GNU\TEST\CrossWorks\STM32F10X\out\STM32_Startup.o" -I "." -I "C:\Program Files\Raisonance\Ride\Lib\ARM\include" -c -Wa,-EL -DSTM32F10X_MD=1 -mthumbdefine の指定に -D を使っている所を見ると、プリプロセッサを使った後アセンブラに引き渡したいらしい。
しかし、assembler-with-cpp の指定が無いのでソースファイルはそのままアセンブラに引きわたしてしまう。
と言うわけでせっかく指定している Define が生かされていないのだった。そこで -x assembler-with-cpp の指定を追加。 結果 ... 問題ない。
Defines で指定したものが有効になっている。
しかし、困ったこともある。アセンブリソースファイルには条件ディレクティブをプリプロセッサで処理するタイプの物とアセンブラで処理するタイプの物があるのだ。
Keil ARMGCC などはアセンブラで処理するタイプなので、そのためのソースは書き換える必要がある。
ちなみに上記キャプチャー画面のプロパティー AS assembler Defines は今回のテストのために追加したものでコマンドラインに展開すると -D が付け加えられる。
さて、それではアセンブラに引き渡すタイプのソースの場合どうすればよいのだろう?
スクリプトファイルを元に戻し AS assembler Additional options で -Wa,--defsym STM32F10X_MD=1 を指定してみる。
arm-none-eabi-gcc.exe: error: STM32F10X_MD=1: No such file or directoryとエラーになってしまう。
もうアセンブラを直接呼び出すしか無いだろう。 結果 ... うまくいった。
しかし、ソースによりスクリプトファイルを切り替えることは多分できないと思うのでどちらを選択するのか考えどころだ。
いや、プロパティで選択できるようにすればよいのかな?
そうそう、直接アセンブラを呼び出した場合
Raisonance\Ride\Config\ExternalTools\PC-lint\ARM\lint_cmac.h
が読み込まれないようなのでこれも問題だ。
環境: Ride7 version 7.30.10.0169
+ RKit-ARM version 1.30.10.0356
+ GCC ARM/embedded-4_9-branch revision 218278
コメント
トラックバック
このエントリのトラックバックURL: http://syslab.asablo.jp/blog/2015/08/09/7731140/tb
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。