禺画像]
Ride7 を使っていて、以前から漠然とアセンブリコードの条件ディレクティブがうまくいかないと思っていた。今まではファイル内で
.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 -mthumb
define の指定に -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
セコメントをする