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 でライブラリ V2.02 を使用して下記のスケッチをコンパイル、実行すると
/*GR-KURUMI Sketch Template Version: V2.02*/ #include <Arduino.h> // Pin 22,23,24 are assigned to RGB LEDs. #define LED_RED 22 // LOW active #define LED_GREEN 23 // LOW active #define LED_BLUE 24 // LOW active void setup() { digitalWrite(LED_RED, HIGH); digitalWrite(LED_GREEN, HIGH); digitalWrite(LED_BLUE, HIGH); pinMode(LED_RED, OUTPUT); pinMode(LED_GREEN, OUTPUT); pinMode(LED_BLUE, OUTPUT); } void loop() { }
オンボードのLEDは赤と緑と青が点灯し白く光りました。
gr_common/cores/wiring_digital.c の 413 行目の #if 0 を #if 1 に変更して C言語版のソースを有効化しビルド、実行すると消灯し挙動が変わるのでアセンブリ語版の digitalWrite() の不具合ではないかと思います。