Raisonance Ride7 & ARM Tools (24) アセンブリコードの条件ディレクティブ2015年08月09日 14時03分20秒

Ride7 AS.Defines
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

KIRIN 氷結 100億MIX2015年08月23日 13時37分41秒

KIRIN 氷結 100億MIX
ピンポーン!

昼下がりにチャイムが鳴る。
出てみると届け物だと言うことだ。
心当たりは無い。
しかし、私宛なので受け取る。
その届け物はずっしりと重たい。
送り主を見るとキリンの文字が見える。

思い出した。
以前、氷結100億MIXのキャンペーンに応募していたのだった。
こういうので当たったのは初めてだ。
開けてみると KIRIN 氷結 100億MIX が10本入っている。
うれしい!!

また当たるかもしれないのでこれからは逃さず応募することにしよう。