GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
がじぇるね岡宮です。
RL78/G13のボードとしてGR-KURUMI、GR-COTTON、GR-ADZUKIの3つがありますが、これらのライブラリをマージしようと思います。
★3/13を目途にご要望や修正点などを締め切り、その後検証して3月末にWebコンパイラに反映、順次IDE for GRへ適用したいと思います。
■概要
ライブラリについて、これまで多くのご意見やご提案があり、それぞれを独立してライブラリアップデートを図っていましたが、マージすることでメンテナンス性の向上と、見やすさ・分かりやすさを向上するために、ファイル構成変更をArduinoや既存のGR-SAKURAと同様にしたいと思います。
・マージについて
__RL78_G13__ をRL78/G13のGRボード共通マクロとして定義。コンパイルオプションで指定。ちなみにArduinoでは__AVR_ATmega1280__という感じ。
ボードごとにGRKURUMI, GRADZUKIなどコンパイルオプションを付加することで、切り分けを行う。(テスト版ではまだ付加しておらず、GR-ADZUKIで動作確認してます)
・ファイル構成変更
・GR-SAKURAと同様に以下の構成に変更
Arduino\cores\
\libraries (階層変更なし)
\rl78\ (portableフォルダを廃止してrl78直下に変更)
・主な変更
・RLduino78_mcu_depend.hや、RLduino78_basic.cpp、RLduino78_timer.cなど、独自にArduinoライブラリが形成されていたものを以下のファイルに移植。
ただし、関数の中身変更は改善事項を除いて基本的に実施しません。比較的RL78ライブラリは安定しているためです。(microsの検証ですごい苦労したのがトラウマです)
\Arduino.h (標準ライブラリに広くインクルードされるヘッダ)
\pins_arduino.h (ボードごとのピンに関するヘッダ)
\wiring_private.h (wiring**や、W**などのArduino基本ライブラリから参照されるヘッダ)
\wiring.c (millis()やdelay())
\wiring_digital.c (digital系)
\wiring_analog.c (analog系)
\wiring_pulse.c (pulse系)
\wiring_shift.c (shift系)
\WMath.cpp (算数)
\WInterrupts.c (外部割込み)
\Tone.cpp (Tone関係)
\utilities.cpp (GRで独自のもの。例えば省電力やattachIntervalTimerとか)
\rl78\specific_instructions.h (Fujitaさんが作ってくれた高速化やお役立ち)
■その他
・標準以外のArduinoのライブラリでよく使われるdigitalPinToPortなどを実装
・RTOS用の記述は削除(動作検証できておらず、あまり使用した事例もみないため。)
・attachMicroIntervalTimer、MsTimer2の時間ずれ不具合は反映しました(Fujitaさんありがとうございます!)
・makeでarによるアーカイブ化してから、リンクするとなぜか不要なものがリンクされてしまうため、適用保留としてます。
■テストファイル
・makefile
※make用ですが、ActivePerlを組み込んでC:\Program Files (x86)\KPITにGNURL78v14.03-ELFをコピーし、コマンドプロンプトでbuild実行してもOKです。ちなみに.batを実行してもOKで、これがWebコンパイラのビルド実体でもあります。
・e2studio用
インポートしてビルドできます。
■ご意見、要望などまとめ
-mcpu=g13 -mmul=noneを指定
以下で分ける
#if __RL78__ /* 全ボード全RL78共通 */ #if GRKURUMI /* GR-KURUMI 固有 */ #elif GRCOTTON /* GR-COTTON 固有 */ #elif GRADZUKI /* GR-ADZUKI 固有 */ #endif #if __RL78_G13__ /* RL78/G13 固有 */ #elif __RL78_G14__ /* RL78/G14 固有 */ #elif __RL78_G10__ /* RL78/G10 固有 */ #endif #endif
MsTimer2は標準ではないので、librariesフォルダに入れる
GR-KURUMI, COTTON, ADZUKI のライブラリ V2.00 の web コンパイラが生成する makefile でターゲットが clean の箇所が
clean: $(OBJS) $(MAKEFILE) rm -f $(OBJFILES) rm -f ./gr_build/$(TARGET).x rm -f $(TARGET).bin rm -f ./gr_build/$(TARGET).mot rm -f ./gr_build/$(TARGET).map
となっていますが `clean:' の後のソースが不要です。
ソースに $(OBJS) があるために make clean した後に再度 make clean をすると $(OBJS) にある .o を一旦生成した後に削除するという動作となってしまいます。
> -fnocprop-registersオプションの件ですが、SDからのWAV再生の方です。
web コンパイラにて GR-KURUMI_Sketch_V2.00.zip をテンプレートとして新規作成したプロジェクトに GR-KURUMI_WAVP(SD)_V1.13 の wav_lib/ 以下と gr_sketch.cpp を追加/交換してビルドを行ったところ、リンクの箇所で
./wav_lib/Fatfs/option/cc932.o: In function `ff_convert': /wav_lib/Fatfs/option/cc932.c:3759: undefined reference to `_rl78_abs__' E:/GCC for Renesas RL78 4.9.2.201701-GNURL78-ELF/rl78-elf/rl78-elf/bin/rl78-elf-ld.exe: Warning: RL78_SYM reloc with an unknown symbol /wav_lib/Fatfs/option/cc932.c:3763: undefined reference to `_rl78_abs__' E:/GCC for Renesas RL78 4.9.2.201701-GNURL78-ELF/rl78-elf/rl78-elf/bin/rl78-elf-ld.exe: Warning: RL78_SYM reloc with an unknown symbol /wav_lib/Fatfs/option/cc932.c:3763: undefined reference to `_rl78_abs__' E:/GCC for Renesas RL78 4.9.2.201701-GNURL78-ELF/rl78-elf/rl78-elf/bin/rl78-elf-ld.exe: Warning: RL78_SYM reloc with an unknown symbol /wav_lib/Fatfs/option/cc932.c:3763: undefined reference to `_rl78_abs__' E:/GCC for Renesas RL78 4.9.2.201701-GNURL78-ELF/rl78-elf/rl78-elf/bin/rl78-elf-ld.exe: Warning: RL78_SYM reloc with an unknown symbol make: *** [rom] Error 1
とエラーとなってしまいビルドが成功しませんでした。
確認したところ、wav_lib/Fatfs/option/cc932.c の ff_convert() の中の変数 p に sjis2uni と uni2sjis を代入している箇所
WCHAR ff_convert ( /* Converted code, 0 means conversion error */ WCHAR chr, /* Character code to be converted */ UINT dir /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */ ) { const __far WCHAR *p; WCHAR c; int i, n, li, hi; if (chr <= 0x80) { /* ASCII */ c = chr; } else { #if !_TINY_TABLE if (dir) { /* OEMCP to unicode */ p = sjis2uni; hi = sizeof sjis2uni / 4 - 1; } else { /* Unicode to OEMCP */ p = uni2sjis; hi = sizeof uni2sjis / 4 - 1; }
が
movw ax, #%lo16(_uni2sjis) movw [sp+4], ax movw ax, #%hi16(_uni2sjis) br !!.L11 .LVL1: .L7: .loc 1 3760 0 movw ax, #%lo16(_sjis2uni) .LVL2: movw [sp+4], ax movw ax, #%hi16(_sjis2uni) .L11: movw [sp+6], ax
というコードにコンパイルされ、アセンブルは通るものゝ、_uni2sjis と _sjis2uni というシンボルは同ファイルで定義されているにも関わらずリンクで参照に失敗するという現象のようです。
アセンブラかリンカの不具合と思われます。現在確認中です。
GR-KURUMI_Sketch_V2.00 のリンカスクリプトを変更し、WAVP(SD) の差分を追加して GCC for Renesas 4.9.2.201701-GNURL78 Windows Toolchain (ELF) にてビルドと動作の確認を行いました。`-fno-cprop-registers' はあってもなくとも動作に違いは見られませんでした。