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フォルダに入れる
訂正:
web コンパイラで使用している KPIT GNU ELF v14.03 では
$ rl78-elf-gcc -dM -E - </dev/null |grep RL78 #define __VERSION__ "4.8-GNURL78_v14.03 20140402 (prerelease (renesas-13r1-16)) (GNUPro 12r1) (Based on: GCC 4.8.1 GDB 7.7.1 Binutils 2.23 Newlib 2.0)" #define __RL78__ 1 #define __RL78_32BIT_DOUBLES__ 1 $
__RL78_G13__ 等のマクロは定義されず、現在 https://gcc-renesas.com/ で配布されている最新のツールチェーン GCC for Renesas 4.9.2.201604-GNURL78 Windows Toolchain (ELF) では CPU 指定をなんもしない条件で __RL78_G14__ が定義されます。
$ rl78-elf-gcc -dM -E - </dev/null |grep RL78 #define __RL78_G14__ 1 #define __VERSION__ "4.9.2.201604-GNURL78 20140916 (prerelease (renesas-14r1-14)) (GNUPro 14r1) (Based on: GCC 4.9.2 GDB 7.8.2 Binutils 2.24 Newlib 2.1.0)" #define __RL78_MUL_NONE__ 1 #define __RL78__ 1 #define __RL78_32BIT_DOUBLES__ 1 $
最新のツールチェーンでコマンドラインオプションに `-mcpu=g13 -mmul=none' を指定すると __RL78_G13__ が定義されるので、
$ rl78-elf-gcc -mcpu=g13 -mmul=none -dM -E - </dev/null |grep RL78 #define __RL78_G13__ 1 #define __VERSION__ "4.9.2.201604-GNURL78 20140916 (prerelease (renesas-14r1-14)) (GNUPro 14r1) (Based on: GCC 4.9.2 GDB 7.8.2 Binutils 2.24 Newlib 2.1.0)" #define __RL78_MUL_NONE__ 1 #define __RL78__ 1 #define __RL78_32BIT_DOUBLES__ 1 $
最新のツールチェーンに変更する場合はコマンドラインに `-mcpu=g13 -mmul=none' を、変更しないのであれば `-D__RL78_G13__' を指定するのが良いのでは。
web コンパイラの makefile 中でコンパイルオプションに `-fno-cprop-registers' が指定されていますが、これは以前のコンパイラの不具合により対策として入れたものであり、現在 web コンパイラで使用している 14.03 では既に修正されているものの筈なので削除して良いのでは?
現在の GR-KURUMI のスケッチの makefile は
SRCFILES = ./gr_sketch.cpp ./gr_common/RLduino78/cores/HardwareSerial.cpp ./gr_common/RLduino78/cores/IPAddress.cpp ./gr_common/RLduino78/cores/MsTimer2.cpp ./gr_common/RLduino78/cores/Print.cpp ./gr_common/RLduino78/cores/RLduino78_basic.cpp ./gr_common/RLduino78/cores/RLduino78_main.cpp ./gr_common/RLduino78/cores/RLduino78_RTC.cpp ./gr_common/RLduino78/cores/RLduino78_timer.c ./gr_common/RLduino78/cores/Stream.cpp ./gr_common/RLduino78/cores/WString.cpp ./gr_common/RLduino78/cores/avr/avrlib.c ./gr_common/RLduino78/libraries/AndroidAccessory/AndroidAccessory.cpp ./gr_common/RLduino78/libraries/EEPROM/EEPROM.cpp ./gr_common/RLduino78/libraries/EEPROM/utility/data_flash_util.c ./gr_common/RLduino78/libraries/Ethernet/Dhcp.cpp ./gr_common/RLduino78/libraries/Ethernet/Dns.cpp ./gr_common/RLduino78/libraries/Ethernet/Ethernet.cpp ./gr_common/RLduino78/libraries/Ethernet/EthernetClient.cpp ./gr_common/RLduino78/libraries/Ethernet/EthernetServer.cpp ./gr_common/RLduino78/libraries/Ethernet/EthernetUdp.cpp ./gr_common/RLduino78/libraries/Ethernet/Twitter.cpp ./gr_common/RLduino78/libraries/Ethernet/utility/socket.cpp ./gr_common/RLduino78/libraries/Ethernet/utility/w5100.cpp ./gr_common/RLduino78/libraries/Ethernet/utility/w5200.cpp ./gr_common/RLduino78/libraries/Ethernet/utility/w5500.cpp ./gr_common/RLduino78/libraries/Firmata/Firmata.cpp ./gr_common/RLduino78/libraries/LiquidCrystal/LiquidCrystal.cpp ./gr_common/RLduino78/libraries/PicalicoFree/PicalicoClass.cpp ./gr_common/RLduino78/libraries/RTC/RTC.cpp ./gr_common/RLduino78/libraries/SD/File.cpp ./gr_common/RLduino78/libraries/SD/SD.cpp ./gr_common/RLduino78/libraries/SD/utility/Sd2Card.cpp ./gr_common/RLduino78/libraries/SD/utility/SdFile.cpp ./gr_common/RLduino78/libraries/SD/utility/SdVolume.cpp ./gr_common/RLduino78/libraries/Servo/Servo.cpp ./gr_common/RLduino78/libraries/SPI/SPI.cpp ./gr_common/RLduino78/libraries/Stepper/Stepper.cpp ./gr_common/RLduino78/libraries/USB_Host_Shield/Usb.cpp ./gr_common/RLduino78/libraries/USB_Host_Shield/utility/Max3421e.cpp ./gr_common/RLduino78/libraries/Wire/Wire.cpp ./gr_common/RLduino78/libraries/Wire/utility/twi.c ./gr_common/RLduino78/portable/e2studio/RL78/exception_handler.cpp ./gr_common/RLduino78/portable/e2studio/RL78/interrupt_handlers.c ./gr_common/RLduino78/portable/e2studio/RL78/reset_program.asm ./gr_common/RLduino78/portable/e2studio/RL78/vector_table.c OBJFILES = ./gr_sketch.o ./gr_common/RLduino78/cores/HardwareSerial.o ./gr_common/RLduino78/cores/IPAddress.o ./gr_common/RLduino78/cores/MsTimer2.o ./gr_common/RLduino78/cores/Print.o ./gr_common/RLduino78/cores/RLduino78_basic.o ./gr_common/RLduino78/cores/RLduino78_main.o ./gr_common/RLduino78/cores/RLduino78_RTC.o ./gr_common/RLduino78/cores/Stream.o ./gr_common/RLduino78/cores/WString.o ./gr_common/RLduino78/libraries/AndroidAccessory/AndroidAccessory.o ./gr_common/RLduino78/libraries/EEPROM/EEPROM.o ./gr_common/RLduino78/libraries/Ethernet/Dhcp.o ./gr_common/RLduino78/libraries/Ethernet/Dns.o ./gr_common/RLduino78/libraries/Ethernet/Ethernet.o ./gr_common/RLduino78/libraries/Ethernet/EthernetClient.o ./gr_common/RLduino78/libraries/Ethernet/EthernetServer.o ./gr_common/RLduino78/libraries/Ethernet/EthernetUdp.o ./gr_common/RLduino78/libraries/Ethernet/Twitter.o ./gr_common/RLduino78/libraries/Ethernet/utility/socket.o ./gr_common/RLduino78/libraries/Ethernet/utility/w5100.o ./gr_common/RLduino78/libraries/Ethernet/utility/w5200.o ./gr_common/RLduino78/libraries/Ethernet/utility/w5500.o ./gr_common/RLduino78/libraries/Firmata/Firmata.o ./gr_common/RLduino78/libraries/LiquidCrystal/LiquidCrystal.o ./gr_common/RLduino78/libraries/PicalicoFree/PicalicoClass.o ./gr_common/RLduino78/libraries/RTC/RTC.o ./gr_common/RLduino78/libraries/SD/File.o ./gr_common/RLduino78/libraries/SD/SD.o ./gr_common/RLduino78/libraries/SD/utility/Sd2Card.o ./gr_common/RLduino78/libraries/SD/utility/SdFile.o ./gr_common/RLduino78/libraries/SD/utility/SdVolume.o ./gr_common/RLduino78/libraries/Servo/Servo.o ./gr_common/RLduino78/libraries/SPI/SPI.o ./gr_common/RLduino78/libraries/Stepper/Stepper.o ./gr_common/RLduino78/libraries/USB_Host_Shield/Usb.o ./gr_common/RLduino78/libraries/USB_Host_Shield/utility/Max3421e.o ./gr_common/RLduino78/libraries/Wire/Wire.o ./gr_common/RLduino78/portable/e2studio/RL78/exception_handler.o ./gr_common/RLduino78/cores/RLduino78_timer.o ./gr_common/RLduino78/cores/avr/avrlib.o ./gr_common/RLduino78/libraries/EEPROM/utility/data_flash_util.o ./gr_common/RLduino78/libraries/Wire/utility/twi.o ./gr_common/RLduino78/portable/e2studio/RL78/interrupt_handlers.o ./gr_common/RLduino78/portable/e2studio/RL78/vector_table.o ./gr_common/RLduino78/portable/e2studio/RL78/reset_program.o LIBFILES = ./gr_common/RLduino78/libraries/EEPROM/utility/pfdl.a ./gr_common/RLduino78/libraries/PicalicoFree/picalicoFree.a CCINC = -I./gr_build -I./gr_common -I./gr_common/include -I./gr_common/RLduino78 -I./gr_common/RLduino78/cores -I./gr_common/RLduino78/cores/avr -I./gr_common/RLduino78/libraries -I./gr_common/RLduino78/libraries/AndroidAccessory -I./gr_common/RLduino78/libraries/EEPROM -I./gr_common/RLduino78/libraries/EEPROM/utility -I./gr_common/RLduino78/libraries/Ethernet -I./gr_common/RLduino78/libraries/Ethernet/utility -I./gr_common/RLduino78/libraries/Firmata -I./gr_common/RLduino78/libraries/LiquidCrystal -I./gr_common/RLduino78/libraries/PicalicoFree -I./gr_common/RLduino78/libraries/RTC -I./gr_common/RLduino78/libraries/SD -I./gr_common/RLduino78/libraries/SD/utility -I./gr_common/RLduino78/libraries/Servo -I./gr_common/RLduino78/libraries/SPI -I./gr_common/RLduino78/libraries/Stepper -I./gr_common/RLduino78/libraries/USB_Host_Shield -I./gr_common/RLduino78/libraries/USB_Host_Shield/utility -I./gr_common/RLduino78/libraries/Wire -I./gr_common/RLduino78/libraries/Wire/utility -I./gr_common/RLduino78/portable -I./gr_common/RLduino78/portable/e2studio -I./gr_common/RLduino78/portable/e2studio/RL78 -I./gr_writer HEADERFILES = ./gr_common/include/pins_arduino.h ./gr_common/include/RLduino78.h ./gr_common/include/RLduino78_mcu_depend.h ./gr_common/RLduino78/cores/Arduino.h ./gr_common/RLduino78/cores/binary.h ./gr_common/RLduino78/cores/Client.h ./gr_common/RLduino78/cores/fastio.h ./gr_common/RLduino78/cores/HardwareSerial.h ./gr_common/RLduino78/cores/iodefine.h ./gr_common/RLduino78/cores/iodefine_ext.h ./gr_common/RLduino78/cores/IPAddress.h ./gr_common/RLduino78/cores/MsTimer2.h ./gr_common/RLduino78/cores/new.h ./gr_common/RLduino78/cores/pintable.h ./gr_common/RLduino78/cores/Print.h ./gr_common/RLduino78/cores/Printable.h ./gr_common/RLduino78/cores/RLduino78_RTC.h ./gr_common/RLduino78/cores/RLduino78_timer.h ./gr_common/RLduino78/cores/Server.h ./gr_common/RLduino78/cores/Stream.h ./gr_common/RLduino78/cores/Udp.h ./gr_common/RLduino78/cores/WString.h ./gr_common/RLduino78/cores/avr/avrlib.h ./gr_common/RLduino78/cores/avr/interrupt.h ./gr_common/RLduino78/cores/avr/pgmspace.h ./gr_common/RLduino78/libraries/AndroidAccessory/AndroidAccessory.h ./gr_common/RLduino78/libraries/EEPROM/EEPROM.h ./gr_common/RLduino78/libraries/EEPROM/utility/data_flash_util.h ./gr_common/RLduino78/libraries/EEPROM/utility/pfdl.h ./gr_common/RLduino78/libraries/EEPROM/utility/pfdl_types.h ./gr_common/RLduino78/libraries/Ethernet/Dhcp.h ./gr_common/RLduino78/libraries/Ethernet/Dns.h ./gr_common/RLduino78/libraries/Ethernet/Ethernet.h ./gr_common/RLduino78/libraries/Ethernet/EthernetClient.h ./gr_common/RLduino78/libraries/Ethernet/EthernetServer.h ./gr_common/RLduino78/libraries/Ethernet/EthernetUdp.h ./gr_common/RLduino78/libraries/Ethernet/Twitter.h ./gr_common/RLduino78/libraries/Ethernet/util.h ./gr_common/RLduino78/libraries/Ethernet/utility/socket.h ./gr_common/RLduino78/libraries/Ethernet/utility/w5100.h ./gr_common/RLduino78/libraries/Ethernet/utility/w5200.h ./gr_common/RLduino78/libraries/Ethernet/utility/w5500.h ./gr_common/RLduino78/libraries/Firmata/Boards.h ./gr_common/RLduino78/libraries/Firmata/Firmata.h ./gr_common/RLduino78/libraries/LiquidCrystal/LiquidCrystal.h ./gr_common/RLduino78/libraries/PicalicoFree/PicalicoClass.h ./gr_common/RLduino78/libraries/PicalicoFree/PicalicoFree.h ./gr_common/RLduino78/libraries/RTC/RTC.h ./gr_common/RLduino78/libraries/SD/SD.h ./gr_common/RLduino78/libraries/SD/utility/FatStructs.h ./gr_common/RLduino78/libraries/SD/utility/Sd2Card.h ./gr_common/RLduino78/libraries/SD/utility/Sd2PinMap.h ./gr_common/RLduino78/libraries/SD/utility/SdFat.h ./gr_common/RLduino78/libraries/SD/utility/SdFatmainpage.h ./gr_common/RLduino78/libraries/SD/utility/SdFatUtil.h ./gr_common/RLduino78/libraries/SD/utility/SdInfo.h ./gr_common/RLduino78/libraries/Servo/Servo.h ./gr_common/RLduino78/libraries/SPI/SPI.h ./gr_common/RLduino78/libraries/Stepper/Stepper.h ./gr_common/RLduino78/libraries/USB_Host_Shield/Usb.h ./gr_common/RLduino78/libraries/USB_Host_Shield/utility/ch9.h ./gr_common/RLduino78/libraries/USB_Host_Shield/utility/Max3421e.h ./gr_common/RLduino78/libraries/USB_Host_Shield/utility/Max3421e_constants.h ./gr_common/RLduino78/libraries/Wire/Wire.h ./gr_common/RLduino78/libraries/Wire/utility/twi.h ./gr_common/RLduino78/libraries/Wire/utility/utiltwi.h ./gr_common/RLduino78/portable/e2studio/RL78/interrupt_handlers.h ./gr_common/RLduino78/portable/e2studio/RL78/typedefine.h TARGET = kurumi_sketch GNU_PATH :=C:/Renesas/e2studio/GNURL78v14.03-ELF/rl78-elf/ CFLAGS :=-I./ -I "$(GNU_PATH)rl78-elf/include" -I "$(GNU_PATH)lib/gcc/rl78-elf/4.8-GNURL78_v14.03/include" -Os -fno-function-cse -funit-at-a-time -falign-jumps -fdata-sections -ffunction-sections -fno-cprop-registers -fsigned-char -g2 -g -DREL_GR_KURUMI -DARDUINO=100 -DWORKAROUND_READ_MODIFY_WRITE #CFLAGS :=-Wa,-adlhn="$(basename $(notdir $<)).lst" -Wall -W -fsigned-char -I "$(GNU_PATH)rl78-elf/include" -I "$(GNU_PATH)lib/gcc/rl78-elf/4.8-GNURL78_v14.03/include" -Os -fno-function-cse -funit-at-a-time -falign-jumps -fdata-sections -ffunction-sections -fno-cprop-registers -g2 -g -DREL_GR_KURUMI -DARDUINO=100 -DWORKAROUND_READ_MODIFY_WRITE AFLAGS :=-I "$(GNU_PATH)rl78-elf/include" -Wall -W -fsigned-char -I "$(GNU_PATH)lib/gcc/rl78-elf/4.8-GNURL78_v14.03/include" -Os -fno-function-cse -funit-at-a-time -falign-jumps -fdata-sections -ffunction-sections -fno-cprop-registers -g2 -g -Wa,-gdwarf2 SFLAGS :=--gdwarf2 CC = rl78-elf-gcc AS = rl78-elf-as LNK = rl78-elf-ld CNVS = rl78-elf-objcopy -O srec CNVB = rl78-elf-objcopy -O binary --gap-fill 0xff DMP = rl78-elf-objdump AR = rl78-elf-ar rcs OBJS = $(OBJFILES) $(LIBFILES) AOBJS = $(filter-out ./gr_sketch.o, $(OBJFILES)) LFLAGS = -M=./gr_build/$(TARGET).map -e_PowerON_Reset -T"./gr_common/RLduino78/portable/e2studio/RL78/rl78_R5F100GJAFB.ld" -L"C:/Renesas/e2studio/GNURL78v14.03-ELF/rl78-elf/rl78-elf/lib" -L"C:/Renesas/e2studio/GNURL78v14.03-ELF/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03" "C:/Renesas/e2studio/GNURL78v14.03-ELF/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03/crtbegin.o" "C:/Renesas/e2studio/GNURL78v14.03-ELF/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03/crtend.o" "C:/Renesas/e2studio/GNURL78v14.03-ELF/rl78-elf/rl78-elf/lib/crtn.o" --start-group --gc-sections -lstdc++ -lnosys -lm -lc -lgcc --end-group MAKEFILE = makefile make = make --no-print-directory all: rom rom: $(OBJS) $(MAKEFILE) $(LNK) $(OBJS) $(LFLAGS) -o ./gr_build/$(TARGET).x $(CNVB) ./gr_build/$(TARGET).x $(TARGET).bin $(CNVS) ./gr_build/$(TARGET).x ./gr_build/$(TARGET).mot rm -f *.o %.o: %.s $(AS) $(SFLAGS) $(CCINC) $< -o $@ %.o: %.asm $(CC) $(AFLAGS) $(CCINC) -c -x assembler-with-cpp $< -o $@ %.o: %.c $(HEADERFILES) $(CC) $(CFLAGS) $(CCINC) -c -x c $< -o $@ %.o: %.cpp $(HEADERFILES) $(CC) $(CFLAGS) $(CCINC) -c -x c++ $< -o $@ 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 lib: $(AOBJS) $(MAKEFILE) $(AR) core.a $(AOBJS) clrsrc: rm -f $(filter-out ./gr_sketch.cpp, $(SRCFILES))
こんな感じですが、これを
SRCFILES = ./gr_sketch.cpp ./gr_common/RLduino78/cores/HardwareSerial.cpp ./gr_common/RLduino78/cores/IPAddress.cpp ./gr_common/RLduino78/cores/MsTimer2.cpp ./gr_common/RLduino78/cores/Print.cpp ./gr_common/RLduino78/cores/RLduino78_basic.cpp ./gr_common/RLduino78/cores/RLduino78_main.cpp ./gr_common/RLduino78/cores/RLduino78_RTC.cpp ./gr_common/RLduino78/cores/RLduino78_timer.c ./gr_common/RLduino78/cores/Stream.cpp ./gr_common/RLduino78/cores/WString.cpp ./gr_common/RLduino78/cores/avr/avrlib.c ./gr_common/RLduino78/libraries/AndroidAccessory/AndroidAccessory.cpp ./gr_common/RLduino78/libraries/EEPROM/EEPROM.cpp ./gr_common/RLduino78/libraries/EEPROM/utility/data_flash_util.c ./gr_common/RLduino78/libraries/Ethernet/Dhcp.cpp ./gr_common/RLduino78/libraries/Ethernet/Dns.cpp ./gr_common/RLduino78/libraries/Ethernet/Ethernet.cpp ./gr_common/RLduino78/libraries/Ethernet/EthernetClient.cpp ./gr_common/RLduino78/libraries/Ethernet/EthernetServer.cpp ./gr_common/RLduino78/libraries/Ethernet/EthernetUdp.cpp ./gr_common/RLduino78/libraries/Ethernet/Twitter.cpp ./gr_common/RLduino78/libraries/Ethernet/utility/socket.cpp ./gr_common/RLduino78/libraries/Ethernet/utility/w5100.cpp ./gr_common/RLduino78/libraries/Ethernet/utility/w5200.cpp ./gr_common/RLduino78/libraries/Ethernet/utility/w5500.cpp ./gr_common/RLduino78/libraries/Firmata/Firmata.cpp ./gr_common/RLduino78/libraries/LiquidCrystal/LiquidCrystal.cpp ./gr_common/RLduino78/libraries/PicalicoFree/PicalicoClass.cpp ./gr_common/RLduino78/libraries/RTC/RTC.cpp ./gr_common/RLduino78/libraries/SD/File.cpp ./gr_common/RLduino78/libraries/SD/SD.cpp ./gr_common/RLduino78/libraries/SD/utility/Sd2Card.cpp ./gr_common/RLduino78/libraries/SD/utility/SdFile.cpp ./gr_common/RLduino78/libraries/SD/utility/SdVolume.cpp ./gr_common/RLduino78/libraries/Servo/Servo.cpp ./gr_common/RLduino78/libraries/SPI/SPI.cpp ./gr_common/RLduino78/libraries/Stepper/Stepper.cpp ./gr_common/RLduino78/libraries/USB_Host_Shield/Usb.cpp ./gr_common/RLduino78/libraries/USB_Host_Shield/utility/Max3421e.cpp ./gr_common/RLduino78/libraries/Wire/Wire.cpp ./gr_common/RLduino78/libraries/Wire/utility/twi.c ./gr_common/RLduino78/portable/e2studio/RL78/exception_handler.cpp ./gr_common/RLduino78/portable/e2studio/RL78/interrupt_handlers.c ./gr_common/RLduino78/portable/e2studio/RL78/reset_program.asm ./gr_common/RLduino78/portable/e2studio/RL78/vector_table.c OBJFILES = ./gr_sketch.o ./gr_common/RLduino78/cores/HardwareSerial.o ./gr_common/RLduino78/cores/IPAddress.o ./gr_common/RLduino78/cores/MsTimer2.o ./gr_common/RLduino78/cores/Print.o ./gr_common/RLduino78/cores/RLduino78_basic.o ./gr_common/RLduino78/cores/RLduino78_main.o ./gr_common/RLduino78/cores/RLduino78_RTC.o ./gr_common/RLduino78/cores/Stream.o ./gr_common/RLduino78/cores/WString.o ./gr_common/RLduino78/libraries/AndroidAccessory/AndroidAccessory.o ./gr_common/RLduino78/libraries/EEPROM/EEPROM.o ./gr_common/RLduino78/libraries/Ethernet/Dhcp.o ./gr_common/RLduino78/libraries/Ethernet/Dns.o ./gr_common/RLduino78/libraries/Ethernet/Ethernet.o ./gr_common/RLduino78/libraries/Ethernet/EthernetClient.o ./gr_common/RLduino78/libraries/Ethernet/EthernetServer.o ./gr_common/RLduino78/libraries/Ethernet/EthernetUdp.o ./gr_common/RLduino78/libraries/Ethernet/Twitter.o ./gr_common/RLduino78/libraries/Ethernet/utility/socket.o ./gr_common/RLduino78/libraries/Ethernet/utility/w5100.o ./gr_common/RLduino78/libraries/Ethernet/utility/w5200.o ./gr_common/RLduino78/libraries/Ethernet/utility/w5500.o ./gr_common/RLduino78/libraries/Firmata/Firmata.o ./gr_common/RLduino78/libraries/LiquidCrystal/LiquidCrystal.o ./gr_common/RLduino78/libraries/PicalicoFree/PicalicoClass.o ./gr_common/RLduino78/libraries/RTC/RTC.o ./gr_common/RLduino78/libraries/SD/File.o ./gr_common/RLduino78/libraries/SD/SD.o ./gr_common/RLduino78/libraries/SD/utility/Sd2Card.o ./gr_common/RLduino78/libraries/SD/utility/SdFile.o ./gr_common/RLduino78/libraries/SD/utility/SdVolume.o ./gr_common/RLduino78/libraries/Servo/Servo.o ./gr_common/RLduino78/libraries/SPI/SPI.o ./gr_common/RLduino78/libraries/Stepper/Stepper.o ./gr_common/RLduino78/libraries/USB_Host_Shield/Usb.o ./gr_common/RLduino78/libraries/USB_Host_Shield/utility/Max3421e.o ./gr_common/RLduino78/libraries/Wire/Wire.o ./gr_common/RLduino78/portable/e2studio/RL78/exception_handler.o ./gr_common/RLduino78/cores/RLduino78_timer.o ./gr_common/RLduino78/cores/avr/avrlib.o ./gr_common/RLduino78/libraries/EEPROM/utility/data_flash_util.o ./gr_common/RLduino78/libraries/Wire/utility/twi.o ./gr_common/RLduino78/portable/e2studio/RL78/interrupt_handlers.o ./gr_common/RLduino78/portable/e2studio/RL78/vector_table.o ./gr_common/RLduino78/portable/e2studio/RL78/reset_program.o LIBFILES = ./gr_common/RLduino78/libraries/EEPROM/utility/pfdl.a ./gr_common/RLduino78/libraries/PicalicoFree/picalicoFree.a CCINC = -I./gr_build -I./gr_common -I./gr_common/include -I./gr_common/RLduino78 -I./gr_common/RLduino78/cores -I./gr_common/RLduino78/cores/avr -I./gr_common/RLduino78/libraries -I./gr_common/RLduino78/libraries/AndroidAccessory -I./gr_common/RLduino78/libraries/EEPROM -I./gr_common/RLduino78/libraries/EEPROM/utility -I./gr_common/RLduino78/libraries/Ethernet -I./gr_common/RLduino78/libraries/Ethernet/utility -I./gr_common/RLduino78/libraries/Firmata -I./gr_common/RLduino78/libraries/LiquidCrystal -I./gr_common/RLduino78/libraries/PicalicoFree -I./gr_common/RLduino78/libraries/RTC -I./gr_common/RLduino78/libraries/SD -I./gr_common/RLduino78/libraries/SD/utility -I./gr_common/RLduino78/libraries/Servo -I./gr_common/RLduino78/libraries/SPI -I./gr_common/RLduino78/libraries/Stepper -I./gr_common/RLduino78/libraries/USB_Host_Shield -I./gr_common/RLduino78/libraries/USB_Host_Shield/utility -I./gr_common/RLduino78/libraries/Wire -I./gr_common/RLduino78/libraries/Wire/utility -I./gr_common/RLduino78/portable -I./gr_common/RLduino78/portable/e2studio -I./gr_common/RLduino78/portable/e2studio/RL78 -I./gr_writer HEADERFILES = ./gr_common/include/pins_arduino.h ./gr_common/include/RLduino78.h ./gr_common/include/RLduino78_mcu_depend.h ./gr_common/RLduino78/cores/Arduino.h ./gr_common/RLduino78/cores/binary.h ./gr_common/RLduino78/cores/Client.h ./gr_common/RLduino78/cores/fastio.h ./gr_common/RLduino78/cores/HardwareSerial.h ./gr_common/RLduino78/cores/iodefine.h ./gr_common/RLduino78/cores/iodefine_ext.h ./gr_common/RLduino78/cores/IPAddress.h ./gr_common/RLduino78/cores/MsTimer2.h ./gr_common/RLduino78/cores/new.h ./gr_common/RLduino78/cores/pintable.h ./gr_common/RLduino78/cores/Print.h ./gr_common/RLduino78/cores/Printable.h ./gr_common/RLduino78/cores/RLduino78_RTC.h ./gr_common/RLduino78/cores/RLduino78_timer.h ./gr_common/RLduino78/cores/Server.h ./gr_common/RLduino78/cores/Stream.h ./gr_common/RLduino78/cores/Udp.h ./gr_common/RLduino78/cores/WString.h ./gr_common/RLduino78/cores/avr/avrlib.h ./gr_common/RLduino78/cores/avr/interrupt.h ./gr_common/RLduino78/cores/avr/pgmspace.h ./gr_common/RLduino78/libraries/AndroidAccessory/AndroidAccessory.h ./gr_common/RLduino78/libraries/EEPROM/EEPROM.h ./gr_common/RLduino78/libraries/EEPROM/utility/data_flash_util.h ./gr_common/RLduino78/libraries/EEPROM/utility/pfdl.h ./gr_common/RLduino78/libraries/EEPROM/utility/pfdl_types.h ./gr_common/RLduino78/libraries/Ethernet/Dhcp.h ./gr_common/RLduino78/libraries/Ethernet/Dns.h ./gr_common/RLduino78/libraries/Ethernet/Ethernet.h ./gr_common/RLduino78/libraries/Ethernet/EthernetClient.h ./gr_common/RLduino78/libraries/Ethernet/EthernetServer.h ./gr_common/RLduino78/libraries/Ethernet/EthernetUdp.h ./gr_common/RLduino78/libraries/Ethernet/Twitter.h ./gr_common/RLduino78/libraries/Ethernet/util.h ./gr_common/RLduino78/libraries/Ethernet/utility/socket.h ./gr_common/RLduino78/libraries/Ethernet/utility/w5100.h ./gr_common/RLduino78/libraries/Ethernet/utility/w5200.h ./gr_common/RLduino78/libraries/Ethernet/utility/w5500.h ./gr_common/RLduino78/libraries/Firmata/Boards.h ./gr_common/RLduino78/libraries/Firmata/Firmata.h ./gr_common/RLduino78/libraries/LiquidCrystal/LiquidCrystal.h ./gr_common/RLduino78/libraries/PicalicoFree/PicalicoClass.h ./gr_common/RLduino78/libraries/PicalicoFree/PicalicoFree.h ./gr_common/RLduino78/libraries/RTC/RTC.h ./gr_common/RLduino78/libraries/SD/SD.h ./gr_common/RLduino78/libraries/SD/utility/FatStructs.h ./gr_common/RLduino78/libraries/SD/utility/Sd2Card.h ./gr_common/RLduino78/libraries/SD/utility/Sd2PinMap.h ./gr_common/RLduino78/libraries/SD/utility/SdFat.h ./gr_common/RLduino78/libraries/SD/utility/SdFatmainpage.h ./gr_common/RLduino78/libraries/SD/utility/SdFatUtil.h ./gr_common/RLduino78/libraries/SD/utility/SdInfo.h ./gr_common/RLduino78/libraries/Servo/Servo.h ./gr_common/RLduino78/libraries/SPI/SPI.h ./gr_common/RLduino78/libraries/Stepper/Stepper.h ./gr_common/RLduino78/libraries/USB_Host_Shield/Usb.h ./gr_common/RLduino78/libraries/USB_Host_Shield/utility/ch9.h ./gr_common/RLduino78/libraries/USB_Host_Shield/utility/Max3421e.h ./gr_common/RLduino78/libraries/USB_Host_Shield/utility/Max3421e_constants.h ./gr_common/RLduino78/libraries/Wire/Wire.h ./gr_common/RLduino78/libraries/Wire/utility/twi.h ./gr_common/RLduino78/libraries/Wire/utility/utiltwi.h ./gr_common/RLduino78/portable/e2studio/RL78/interrupt_handlers.h ./gr_common/RLduino78/portable/e2studio/RL78/typedefine.h TARGET = kurumi_sketch CPU := # RL78G13 MUL DBL64 GCCPATH :=C:/Renesas/e2studio/GNURL78v14.03-ELF/ GCCVER :=4.8-GNURL78_v14.03 CPULIBPATH :=. CFLAGS :=-I./ -I "$(GCCPATH)rl78-elf/rl78-elf/include" -I "$(GCCPATH)rl78-elf/lib/gcc/rl78-elf/$(GCCVER)/include" -Os -fno-function-cse -funit-at-a-time -falign-jumps -fdata-sections -ffunction-sections -fno-cprop-registers -fsigned-char -g2 -g -DREL_GR_KURUMI -DARDUINO=100 -DWORKAROUND_READ_MODIFY_WRITE #CFLAGS :=-Wa,-adlhn="$(basename $(notdir $<)).lst" -Wall -W -fsigned-char -I "$(GCCPATH)rl78-elf/rl78-elf/include" -I "$(GCCPATH)rl78-elf/lib/gcc/rl78-elf/$(GCCVER)/include" -Os -fno-function-cse -funit-at-a-time -falign-jumps -fdata-sections -ffunction-sections -fno-cprop-registers -g2 -g -DREL_GR_KURUMI -DARDUINO=100 -DWORKAROUND_READ_MODIFY_WRITE AFLAGS :=-I "$(GCCPATH)rl78-elf/rl78-elf/include" -Wall -W -fsigned-char -I "$(GCCPATH)rl78-elf/lib/gcc/rl78-elf/$(GCCVER)/include" -Os -fno-function-cse -funit-at-a-time -falign-jumps -fdata-sections -ffunction-sections -fno-cprop-registers -g2 -g -Wa,-gdwarf2 ifneq ($(findstring RL78G13, $(CPU)), ) CFLAGS += -mcpu=g13 else ifneq ($(findstring RL78G14, $(CPU)), ) CFLAGS += -mcpu=g14 else ifneq ($(findstring RL78G10, $(CPU)), ) CFLAGS += -mcpu=g10 else #CFLAGS += -mcpu=rl78 endif ifneq ($(findstring MUL, $(CPU)), ) ifneq ($(findstring RL78G13, $(CPU)), ) CFLAGS += -mmul=g13 else ifneq ($(findstring RL78G14, $(CPU)), ) CFLAGS += -mmul=g14 else ifneq ($(findstring RL78G10, $(CPU)), ) CFLAGS += -mmul=g10 else CFLAGS += -mmul=none endif else CFLAGS += -mmul=none endif ifneq ($(findstring DBL64, $(CPU)), ) CFLAGS += -m64bit-doubles AFLAGS += -m64bit-doubles else CFLAGS += -m32bit-doubles AFLAGS += -m32bit-doubles endif ifneq ($(findstring MUL, $(CPU)), ) ifneq ($(findstring RL78G13, $(CPU)), ) ifneq ($(findstring DBL64, $(CPU)), ) CPULIBPATH := g13/64-bit-doubles else CPULIBPATH := g13 endif else ifneq ($(findstring RL78G14, $(CPU)), ) ifneq ($(findstring DBL64, $(CPU)), ) CPULIBPATH := g14/64-bit-doubles else CPULIBPATH := g14 endif else ifneq ($(findstring RL78G10, $(CPU)), ) ifneq ($(findstring DBL64, $(CPU)), ) CPULIBPATH := g10/64-bit-doubles else CPULIBPATH := g10 endif else ifneq ($(findstring DBL64, $(CPU)), ) CPULIBPATH := 64-bit-doubles else CPULIBPATH := . endif endif else ifneq ($(findstring DBL64, $(CPU)), ) CPULIBPATH := 64-bit-doubles else CPULIBPATH := . endif endif SFLAGS :=--gdwarf2 CC = rl78-elf-gcc AS = rl78-elf-as LNK = rl78-elf-ld CNVS = rl78-elf-objcopy -O srec CNVB = rl78-elf-objcopy -O binary --gap-fill 0xff DMP = rl78-elf-objdump AR = rl78-elf-ar rcs OBJS = $(OBJFILES) $(LIBFILES) AOBJS = $(filter-out ./gr_sketch.o, $(OBJFILES)) LFLAGS = -M=./gr_build/$(TARGET).map -e_PowerON_Reset -T"./gr_common/RLduino78/portable/e2studio/RL78/rl78_R5F100GJAFB.ld" -L"$(GCCPATH)rl78-elf/rl78-elf/lib/$(CPULIBPATH)/" -L"$(GCCPATH)rl78-elf/lib/gcc/rl78-elf/$(GCCVER)/$(CPULIBPATH)/" "$(GCCPATH)rl78-elf/lib/gcc/rl78-elf/$(GCCVER)/$(CPULIBPATH)/crtbegin.o" "$(GCCPATH)rl78-elf/lib/gcc/rl78-elf/$(GCCVER)/$(CPULIBPATH)/crtend.o" "$(GCCPATH)rl78-elf/rl78-elf/lib/$(CPULIBPATH)/crtn.o" --start-group --gc-sections -lstdc++ -lnosys -lm -lc -lgcc --end-group MAKEFILE = makefile make = make --no-print-directory all: rom rom: $(OBJS) $(MAKEFILE) $(LNK) $(OBJS) $(LFLAGS) -o ./gr_build/$(TARGET).x $(CNVB) ./gr_build/$(TARGET).x $(TARGET).bin $(CNVS) ./gr_build/$(TARGET).x ./gr_build/$(TARGET).mot rm -f *.o %.o: %.s $(AS) $(SFLAGS) $(CCINC) $< -o $@ %.o: %.asm $(CC) $(AFLAGS) $(CCINC) -c -x assembler-with-cpp $< -o $@ %.o: %.c $(HEADERFILES) $(CC) $(CFLAGS) $(CCINC) -c -x c $< -o $@ %.o: %.cpp $(HEADERFILES) $(CC) $(CFLAGS) $(CCINC) -c -x c++ $< -o $@ 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 lib: $(AOBJS) $(MAKEFILE) $(AR) core.a $(AOBJS) clrsrc: rm -f $(filter-out ./gr_sketch.cpp, $(SRCFILES))
のようにすると、
ので良いのではないかと思います。
> 少し試してみましたが、この現象はV1.13でも発生しました。
> 要因は以下の通りでstatic変数の初期化でstdc++のScope Guard関連がリンクされてしまうのですが、、自分、よく分かりません。
> ちなみにアーカイブ化しないとこの現象は発生しません。
V1.13 で
void setup(){ static int a = millis(); }
では問題が出ることを確認しました。
ツールチェーンを https://gcc-renesas.com/ で配布している GCC for Renesas 4.9.2.201604-GNURL78 Windows Toolchain (ELF) に変えても問題は見られ、https://ftp.gnu.org/gnu/binutils/ から最新の 2.28 をダウンロードし、自前でビルドして作成した ld を使ってもみましたが問題は修正されていないようです。
アーカイブする/しない で結果が変わるとは言えどちらにしても条件によって不要なライブラリがリンクされることに変わりはないですが、現状確認できてる状態ではアーカイブしないほうがいくらかマシな感じでしょうか。
使用方法をあれこれ工夫して対症療法的な試みをしても解決には至らないようであり、RL78 の ld の不具合として長く放置されている問題のようなので、ld のソースから修正を行い binutils の ml にパッチを投げるでもしない限り完治しない気がします。
chobichanさん、シリアルバッファサイズの変更ですが、beginを拡張したいと思います。
void begin(unsigned long baud, byte config, int rx_buf, int tx_buf);
また、バッファの余力を知る以下のメンバー関数を用意します。availableForWriteは現在のArduinoにも存在するメンバー関数です。
int availableForWrite(void);
int availableForRead(void);
バッファサイズを変更する専用のメンバー関数を作ってもいいのですが、ひとまずこれでいこうかなと思います。何かあればご意見ください。
一応、以下修正ファイルを添付いたします。
以下、スケッチはSerial1かSerial2の受信バッファが減っていく様子を観察するだけです。
void setup() { Serial.begin(9600); Serial1.begin(9600, SERIAL_8N1, 64, 64); Serial2.begin(9600, SERIAL_8N1, 256, 64);}void loop() { delay(1000); Serial.print("RX_BufSize Ch0:"); Serial.print(Serial.availableForRead()); Serial.print(" Ch1:"); Serial.print(Serial1.availableForRead()); Serial.print(" Ch2:"); Serial.println(Serial2.availableForRead());}
いつのまにか統合化されたライブラリが V2.00 として web コンパイラに登録されたようですお疲れ様でした。
GR-ADZUKI のサンプルスケッチが、V1.00 では
/*GR-ADZUKI Sketch Template Version: V1.00*/ #include <Arduino.h> #define LED_R_COM 22 #define LED_G_COM 23 #define LED_B_COM 24 void setup(){ Serial.begin(9600); pinMode(LED_R_COM, OUTPUT); pinMode(LED_G_COM, OUTPUT); pinMode(LED_B_COM, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); digitalWrite(LED_R_COM, HIGH); // red LED on digitalWrite(LED_G_COM, HIGH); // green LED on digitalWrite(LED_B_COM, HIGH); // blue LED on } void loop(){ Serial.println("Hello, I'm ADZUKI"); digitalWrite(12, HIGH); digitalWrite(13, LOW); delay(100); digitalWrite(12, LOW); digitalWrite(13, HIGH); delay(100); }
だったものが V2.00 では
/*GR-ADZUKI Sketch Template Version: V2.00*/ #include <Arduino.h> #define LED_R_COM 22 #define LED_G_COM 23 #define LED_B_COM 24 void setup(){ Serial.begin(9600); pinMode(LED_R_COM, OUTPUT); pinMode(LED_G_COM, OUTPUT); pinMode(LED_B_COM, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); digitalWrite(LED_R_COM, HIGH); // red LED on digitalWrite(LED_G_COM, HIGH); // green LED on digitalWrite(LED_B_COM, HIGH); // blue LED on } void loop(){ digitalWrite(12, HIGH); digitalWrite(13, LOW); delay(100); digitalWrite(12, LOW); digitalWrite(13, HIGH); delay(100); }
変わっています。
gr_common/cores/pins_arduino.h の中で
#if defined(GRKURUMI) || (GRCOTTON) #define LED_BUILTIN 24 #else #define LED_BUILTIN 13 #endif
と書かれている箇所がありますが、気持ち悪いので
#if defined(GRKURUMI) || define(GRCOTTON) #define LED_BUILTIN 24 #else #define LED_BUILTIN 13 #endif
か
#if (GRKURUMI) || (GRCOTTON) #define LED_BUILTIN 24 #else #define LED_BUILTIN 13 #endif
#ifdef GRADZUKI #define LED_BUILTIN 13 #else #define LED_BUILTIN 24 #endif
等と書いた方が良いと思います(オススメは最後の案)。
gr_common/cores/pins_arduino.h や gr_common/cores/HardwareSerial.cpp にある
#ifndef GRCOTTON ~ #else ~ #endif
という箇所も捻くれた感じがするので、
#ifdef GRCOTTON ~ #else ~ #endif
とした方が良いと思います。
V2.00 の GR-KURUMI の gr_sketch.cpp の
pinMode(6, OUTPUT); digitalWrite(6, HIGH);
と、GR-COTTON の gr_sketch.cpp の
pinMode(8, OUTPUT); digitalWrite(8, HIGH);
は余計な気がします。
GR-KURUMI_WAVP(ROM)_V.113 の GR-KURUMI_Sketch_V1.13 との差分部分を GR-KURUMI_Sketch_V2.00 に移植して検証してみましたが `-fno-cprop-registers' は指定しなくとも動作に影響は確認できませんでした。音が乱れてしまったというのはどのような確認をされたのでしょうか?
また、`-fno-cprop-registers' を指定しないと不具合が出るというのはコンパイラの不具合ということになるかとおもいますが、現在のルネサス用の GCC のサポートである https://gcc-renesas.com/ja/ には報告されてるでしょうか?