FreeRTOS、Rxv2 と、他デバイス対応

現在自分が扱う RX マイコンはどれも、RXv2 コアなので、GCC/RX600v2 のコードを使いたい。
しかしながら、gcc-6.4.0 は「RXv2」に対応していない。

rx-elf-as は、RXv2 に対応している。

% rx-elf-as -v --help
GNU assembler version 2.28 (rx-elf) using BFD version (GNU Binutils) 2.28
Usage: ./rx-elf-as [option...] [asmfile...]
Options:

.....
.....
.....

  --mcpu=<rx100|rx200|rx600|rx610|rxv2>
  --mno-allow-string-insns
Report bugs to <http://www.sourceware.org/bugzilla/>

そこで、RXv2 依存のアセンブリコードを使った関数を、アセンブラソースに分離して、対応する事にした。

多少の問題としては、「FreeRTOSConfig.h」の設定を使っている部分で(割り込みの優先順位)なのだが、まぁこれはあまり変更する事が無いと思うので、とりあえず、直接値を代入しておいた。

これで、リンクして、無事実行ファイルが出来、動作を確認したのだけど、そーいえば、コンパイラからアセンブラにオプションを渡せないのかな?

調べたら、あったー・・・

-Wa,option
option をアセンブラに対するオプションとして渡します。

なんだー、これだー、とゆー事で、Makefile を少し修正して、ソースコードはそのままで、「RXv2」に対応する事が出来たー
非常にスマートに対応出来た。

下記のようにコンパイラオプションを追加する事で、内部動作は、コンパイル後にアセンブラを起動する場合に、以下のオプションが追加される。

-Wa,-mcpu=rxv2

続いて、他のCPUについても、ICU 関係のクラスに「SWINT」関係を追加して、Makefile を作成して、実行ファイルを各マイコンに書き込んで試してみた。
とりあえず、問題なく動作するようだ。

これで、

RX24T
RX64M
RX71M
RX65N
RX66T

に対応する事が出来た、次は、よく使うドライバークラスをマルチタスク対応にして、ネットスタックの実験に進みたい。

ソースコードは、github の master ブランチにマージ済みとなっている。