Renesas Community
Renesas Community
  • User
    Join or sign in
  • Site
  • Search Community
  • User
  • Renesas Engineering Community
  • FAQ
  • HELP
  • More
  • Cancel
がじぇっとるねさすコミュニティ
がじぇっとるねさすコミュニティ
がじぇっとるねさす ゆーざー会 - Wiki Arduinoとの互換性のまとめ(Language Reference編)
  • Forums
  • Files
  • がじぇっとるねさす ゆーざー会 - Wiki
  • Tags
  • More
  • Cancel
  • New
  • がじぇっとるねさす ゆーざー会 - Wiki
  • (GR-SAKURA) リセットボタンを押さずにプログラムを書込む方法
  • 448KBの壁を越える方法(Windows)
  • Android ADK for GR-SAKURA
  • Arduinoとの互換性のまとめ(Language Reference編)
  • Color LCD シールド
  • EEPROMのサンプルコードと注意点
  • E1接続コネクタ
  • FAQ: GR-SAKURAの電源は、USBバスパワーかAC電源が必要か?
  • FAQ: RXマイコンの汎用ポートの駆動電流
  • FreeRTOS
  • Fritzing 用のパーツ(GR-SAKURA)
  • GR-SAKURA サンプルコードまとめ
  • GR-SAKURAからLinuxへの仮想コムポートでの通信
  • GR-SAKURAでキャラクタ液晶を制御
  • GR-SAKURAでサーボモータ
  • GR-SAKURAにXBeeをつなげる
  • GR-SAKURAスタートガイド 作例
  • GR-SAKURA用アクリルケースのデータ
  • HEWを使用したローカルデバッグ環境(USBファーム付き)
  • How to use USB virtual serial and UART
  • LAN経由でアナログセンサの値を拾うサンプル
  • MP3再生ライブラリとサンプルスケッチ 9/4追記 11/7追記
  • RTCに時刻を決め打ちで設定するスケッチ
  • SAKURAとKURUMIでWire(I2C) スレーブアドレスに注意
  • Smart Analog Shield for GR-SAKURA ボードβ版仕様
  • TOPPERS/ASP GR-SAKURA依存部 と sample1のHEWプロジェクト
  • uIPウエブサーバ
  • USBホスト MIDIクラスドライバ(USBH_MIDI) for GR-SAKURA
  • USBホストサンプル(マウス)
  • USB仮想COMポート用デバイスドライバ
  • USB仮想シリアルとUARTの使い方
  • Web Compilerへの要求やトラブル事項、対応事項
  • Webコンパイラで使うHTTPクライアント
  • Webコンパイラへのログイン~ボードへの書き込み動画(ビギナー向け)
  • wireライブラリを使用してみました
  • がじぇるねはじめてのプログラミング動画(ビギナー向け)
  • でんしゃの模型をSAKURAとUMEでコントロール!
  • シリアル通信(SCI)パラメータの変更方法(パリティ・データ長など)
  • シールドを横に並べる基板 (プチマザーボード)
  • プロジェクトバックアップツール
  • 手っ取り早くシールドを重ねた時の問題を解決するには
  • 温度センサーLM61の測定値をマイクロSDに書き込むスケッチ
  • 無印からFULLにする部品の購入先について
  • 足の長いピンソケット

Arduinoとの互換性のまとめ(Language Reference編)

はじめに

GR-SAKURAのArduino互換機能についてのまとめです。

ライブラリの動作まで確認すると大変なので、ここでは言語仕様についてのみ検証しています。

内容については無保証です。

誰でも編集出来る設定となっていますので、間違いの修正や追記など、どしどしお願いします。

GR-SAKURA のArduino互換ライブラリはArduino IDE 0022と互換性があるとのことです。

※βテスト中に聞いた話なので、情報のソースを示すことができません。

arduino-0022/reference/index.htmlと比較し、互換性について検証します。

テンプレート

V1.00

Web Compiler

V1.00

GNURX

v12.01

Arduinoについては、IDE0022+ Arduino MEGA 2560R2で動作確認を行っています。(RAM容量の都合)

そもそもコンパイルできるかテスト

添付の"Arduino_compatibility_LangRef.pde"をWebComplierにてビルド。

※Arduino IDE 0022では問題なくコンパイルできる。

凡例

OK 問題なくコンパイルできる

NG コンパイルエラーとなる

△ コンパイルできるが動作がArduinoと異なるもの

カテゴリサブカテゴリ
機能テスト値互換性備考回避方法

Structure

ここはコンパイラの互換性。ArduinoIDEもWebComplierもGCCなので、C/C++の構文に大きな差異は無いと考えるため、未実施。

Variables

Constants

HIGH | LOW

HIGH

OK

LOW

OK

INPUT | OUTPUT

INPUT

OK

OUTPUT OK

true | false

true

OK

false OK

integer constants

decimal
128 OK
binary

B1111011

OK
octal

0173

OK
hexadecimal

0x7B

OK

unsigned

33u

OK
long

100000L

OK
unsigned long

32767ul

OK

floating point constants

0.05 OK

2.34E5

OK

67e-12

OK

Data Types

void

以下、空白は

スケッチ参照

OK

boolean

OK

char

OK

unsigned char

OK
byte OK

テンプレE0.90より対応

int △

Arduinoは16bit長。GR-SAKURAは32bit長。

intはアーキテクチャディペンドなので、ひとまず無視。

16bitが必要ならshortを使う。

unsigned int

△

Arduinoは16bit長。GR-SAKURAは32bit長。

intはアーキテクチャディペンドなので、ひとまず無視。

16bitが必要ならunsigned shortを使う。

word OK
long OK

unsigned long

OK
float OK
double OK

string - char array

OK

String - object

NG Stringは使えない std::stringで代用?

array

OK

Conversion

(cast)

char()

OK

byte()

OK

int()

OK

word()

OK

long()

OK

float()

OK

Variable Scope

& Qualifiers

variable scope

OK

static

OK

volatile

OK

const

OK

Utilities

sizeof()

OK
PROGMEM PROGMEM △

PROGMEMを指定できるが、読み出し用のpgm_read_xxxxが無い。ただし、これはArduinoではなくてavr-gccの仕様。

PROGMEMを指定した変数でもそのままアクセスできる。
Functions Digital I/O pinMode() OK

GR-SAKURAでは"OUTPUTHIGH"を指定可能

GR-SAKURAでは"INPUT_PULLUP"を指定可能(Arduino1.0.1相当)

DigitalWrite() OK
DigitalRead() OK
Analog I/O AnalogReference()

DEFAULT

OK REF=3.3V

GR-SAKURAでは10bit で 3.3/5倍の値に補正。(3.3Vで675)

INTERNAL OK

REF=1.1V

EXTERNAL OK
AnalogRead() OK

AnalogReference(RAW12BIT)で12bitの精度となる

AnalogWrite() OK

最大15ポートまで(UNOは6ポートまで)

PWM周波数はArduinoは490Hz固定だが、GR-SAKURAは

analogWriteFrequency()で指定可能。 (12~184999Hz)

また、GR-SAKURAはDACを持っているため、

analogWriteDAC()の実行も可能。

Advanced I/O

tone()

OK
noTone() OK
shiftOut()

MSBFIRST

OK

LSBFIRST

OK

pulseIn()

OK
Time millis() OK
micros() OK
delay() OK
delayMicroseconds()

OK

Math min() OK
max() OK
abs() OK
constrain() OK
map() OK
pow() OK
sqrt() OK
sq() OK ドキュメントにはないけど念のため
round() OK

ドキュメントにはないけど念のため

Trigonometry

sin() OK
cos() OK
tan() OK

radians()

OK

ドキュメントにはないけど念のため

degrees() OK

ドキュメントにはないけど念のため

Random Numbers randumSeed() OK
random()

random(max)

OK

random(min,max)

OK
Bits and Bytes lowByte() OK
highByte() OK
bitRead() OK
bitWrite() OK
bitSet() OK
bitClear() OK
bit() OK
External Interrupts attachInterrupt() 割り込み番号 △

割り込み番号とピン番号がArduinoと異なる

#Arduino PinGR-SAURA pin
0 2 P10(使用不可)
1 3 P11(使用不可)
2 21 P12(IO30)
3 20 P13(IO31)
4 19 P14(IO32:使用不可)
5 18 P15(IO33:使用不可)
6 - P16(IO34:使用不可)
7 - P17(IO35)
LOW OK
CHANGE OK
RISING OK
FALLING OK
detachInterrupt() △

attachInterrupt()と同じ

Interrupts interrupts() OK
noInterrupts() OK
Serial インスタンス OK

Arduino Megaと同様に、Serial,Serial1,Serial2,Serial3が使用可能。ただし、Arduinoの様に固定ではなく、begin()で任意のポートをアサイン可能。

begin()

OK

第2引数でアサインするポートを指定可能。

省略した場合はUSB仮想COMポートが有効となる。

第2引数TxDRxD
省略 USB仮想COM USB

SCI_SCI0P2x

P20(IO1) P21(IO0)

SCI_SCI1JTAG

PF0 PF2 JTAG
SCI_SCI2A P13(IO31) P12(IO30)
SCI_SCI2B P50(IO24) P52(IO26) XBee
SCI_SCI6B P32(IO6) P33(IO7)
SCI_AUTO

USB、SCI0、SCI1の中でいずれかの通信を受信するまで待機し最初に受信したポートが使われる


USB仮想COMとIO0,IO1(SCI_SCI0P2X)は連動しない。(Arduino Leonardoと同じ動作)

end() OK
available() OK
read() OK
peek() OK
flush() OK
print()/println() 文字列 print("78") OK
数値

print(78)

OK
BYTE print(78,BYTE) OK

ArduinoIDE1.0と同様にwrite()推奨

BIN print(78,BIN) OK
OCT print(78,OCT) OK
DEC print(78,DEC) OK
HEX print(78,HEX) OK
floting point

print(1.23456, 0)

OK

bool型変数

OK
char型変数 OK

unsigned char型変数

OK
int型変数 OK

unsigned int型変数

OK
long型変数 OK
unsigned long型変数 OK
float型変数 OK
double型変数 OK
char array型変数 OK
String型変数 NG
println() void OK
write() 数値 write(65) OK
文字列 write("BCD") OK
char array型変数 write(strBuf) OK
unsigned char array型変数 write(ucBuf, 1) OK

実行テスト

添付の"Arduino_compatibility_LangRef.pde"をWebComplierでビルドして実行。

Arduino0022では最後まで実行できるが、GR-SAKURAでは、Interruptsのテストで停止する。

Arudino0022では、割り込み禁止でもSerial.printが実行可能。Arduino1.0では、割り込み禁止中は出力が停止するが、割り込み許可で再開する。

GR-SAURAは割り込み系の関数(4関数)を実行すると、Serial.printの出力が止まり、割り込みを許可しても出力データはロストする。

4pinと6pinをジャンパーで接続。

A0と5V(GR-SAKURAは3.3V)で接続。

A1と5pinをジャンパーで接続。

凡例

OK 結果が一致するもの

NG 結果が一致しないもの

△ 一部結果が異なるもの

※網羅的なテストを実施しているわけではないので、結果は参考値。

カテゴリサブカテゴリ
機能

Arduino

出力値

GR-SAKURA

出力値

互換性備考回避方法

Variables

Constants

HIGH | LOW

OK

INPUT | OUTPUT

OK

true | false

OK

Data Types

OK

コンパイルできたことでOKとする

Conversion

(cast)
OK GCCの仕様

Variable Scope

& Qualifiers

OK GCCの仕様

Utilities

sizeof()

OK
PROGMEM PROGMEM △

GR-SAKURAではアクセス関数は使えないが、直接アクセスが可能。

Functions Digital I/O pinMode() OK

GR-SAKURAでは"OUTPUTHIGH"を指定可能

GR-SAKURAでは"INPUT_PULLUP"を指定可能(Arduino1.0.1相当)

DigitalWrite() OK

たぶん

DigitalRead() OK たぶん
Analog I/O AnalogReference()

DEFAULT

未検証

(REF=3.3V)

GR-SAKURAでは10bit で 3.3/5倍の値に補正。(3.3Vで675)

INTERNAL

(REF=1.1V)

EXTERNAL

未検証

AnalogRead() OK

たぶん

AnalogWrite() OK

たぶん

Advanced I/O

tone()

未検証
noTone() 未検証
shiftOut()

MSBFIRST

OK

8bitの送出時間は

Arduinoは165us程度、

GR-SAKURAは20us程度。

LSBFIRST

OK

pulseIn()

未検証

Time

t1=millis();

delay(1000);

t2=millis();

t3=t2-t1;

2789,1788,1001

6599,5599,1000

OK

たぶん

t1=micros()

delayMicroseconds(16383)

t2=micros()

t3=t2-t1;

2835064,2818576,16488

6615420,6599036,16384

OK

たぶん

Math

min(1, 100)

1 1 OK

min(-0.5, -0.1)

-0.50 -0.50 OK

max(1, 100)

100 100 OK

max(-0.5, -0.1)

-0.10 -0.10 OK
abs(-5) 5 5 OK
abs(-3.1) 3.10 3.10 OK

constrain(0.8, -0.1, 2.5)

0.80 0.80 OK

map(600, 0, 1023, 0, 255)

149 149 OK

map(2000, 0, 1023, 0, 255)

498 498 OK 範囲外の値でも同じ結果。

pow(10, 2.1)

125.89 125.89 OK
sqrt(2) 1.41 1.41 OK
sqrt(-2) 0.00 1.00 NG

NaNは何?

(libmの振る舞いが異なる。コンパイラによる差異と思われる)

負数を指定することはないので実害はないと想定。

sq(100) 10000 10000 OK

round(10.1) : 10

round(10.49) : 10

round(10.5) : 11

round(10.9) : 11

10

10

11

11

10

10

11

11

OK

Trigonometry

sin(radians(10))

0.17 0.17 OK

たぶん

cos(radians(10))

0.98 0.98 OK

たぶん

tan(radians(10)) 0.18 0.18 OK

たぶん

tan(radians(90))

-22877332.00

-22877332.00

OK たぶん

degrees(pi)

180.00 180.00 OK
Random Numbers randumSeed() OK たぶん
random()

random(300)

261 261 OK たぶん

random(10,20)

19 19 OK たぶん
Bits and Bytes

lowByte(0x12345678)

78 78 OK

highByte(0x12345678)

56 56 OK

bitRead(B11010001, 7)

bitRead(B11010001, 6)

bitRead(B11010001, 5)

bitRead(B11010001, 4)

bitRead(B11010001, 3)

bitRead(B11010001, 2)

bitRead(B11010001, 1)

bitRead(B11010001, 0)

1

1

0

1

0

0

0

1

1

1

0

1

0

0

0

1

OK

bwr = 0xff;

bitWrite(bwr, 7, 0)

bitSet(bwr, 7)     

bitClear(bwr, 7)   

bitWrite(bwr, 7, 1)

bitWrite(bwr, 6, 0)

bitSet(bwr, 6)     

bitClear(bwr, 6)   

bitWrite(bwr, 6, 1)

bitWrite(bwr, 5, 0)

bitSet(bwr, 5)     

bitClear(bwr, 5)   

bitWrite(bwr, 5, 1)

bitWrite(bwr, 4, 0)

bitSet(bwr, 4)     

bitClear(bwr, 4)   

bitWrite(bwr, 4, 1)

bitWrite(bwr, 3, 0)

bitSet(bwr, 3)     

bitClear(bwr, 3)   

bitWrite(bwr, 3, 1)

bitWrite(bwr, 2, 0)

bitSet(bwr, 2)     

bitClear(bwr, 2)   

bitWrite(bwr, 2, 1)

bitWrite(bwr, 1, 0)

bitSet(bwr, 1)     

bitClear(bwr, 1)   

bitWrite(bwr, 1, 1)

bitWrite(bwr, 0, 0)

bitSet(bwr, 0)     

bitClear(bwr, 0)   

bitWrite(bwr, 0, 1)

11111111

1111111

11111111

1111111

11111111

10111111

11111111

10111111

11111111

11011111

11111111

11011111

11111111

11101111

11111111

11101111

11111111

11110111

11111111

11110111

11111111

11111011

11111111

11111011

11111111

11111101

11111111

11111101

11111111

11111110

11111111

11111110

11111111

11111111

1111111

11111111

1111111

11111111

10111111

11111111

10111111

11111111

11011111

11111111

11011111

11111111

11101111

11111111

11101111

11111111

11110111

11111111

11110111

11111111

11111011

11111111

11111011

11111111

11111101

11111111

11111101

11111111

11111110

11111111

11111110

11111111

OK

bit(7)

bit(6)

bit(5)

bit(4)

bit(3)

bit(2)

bit(1)

bit(0)

80

40

20

10

8

4

2

1

80

40

20

10

8

4

2

1

OK
External Interrupts attachInterrupt() LOW OK

GR-SAKURAでこれらの関数を実行すると、各種通信機能やタイマが停止するため、setupのみで実行することが望ましい。

CHANGE OK
RISING OK
FALLING OK
detachInterrupt() OK
Interrupts interrupts() OK 通信やタイマの動作に影響を及ぼすため、注意が必要。
noInterrupts() OK
Serial インスタンス OK

Arduino Megaと同様に、Serial,Serial1,Serial2,Serial3が使用可能。ただし、Arduinoの様に固定ではなく、begin()で任意のポートをアサイン可能。

begin()

OK

第2引数でアサインするポートを指定可能。

省略した場合はUSB仮想COMポートが有効となる。


USB仮想COMとIO0,IO1(SCI_SCI0P2X)は連動しない。(Arduino Leonardoと同じ動作)

end() 実行はできる。互換性は未検証。
available() 実行はできる。互換性は未検証。
read() 実行はできる。互換性は未検証。
peek() 実行はできる。互換性は未検証。
flush() 実行はできる。互換性は未検証。
print()/println()

print("78")

78 78 OK

print(78)

78

78 OK

print(78,BYTE)

N N OK

print(78,BIN)

1001110

1001110

OK

print(78,OCT)

116 116 OK

print(78,DEC)

78 78 OK

print(78,HEX)

4E 4E OK

print(1.23456, 0)

1

1

OK

println(blFlagT)

println(blFlagF)

1

0

NG

GR-SAKURAはtrue=1,false=0

Arduinoは何も出力されない。

普通、bool値をprintしないので

対応は不要?

println(cData)

a a OK

println(ucData)

b 98 NG Arduino 1.0以降は98

println(iData)

123 123 OK

print(uiData)

33 33 OK

println(lData)

100000

100000

OK

println(ulData)

32767

32767

OK

println(dData)

234000.00

234000.00

OK

println(dData)

0.00

0.00

OK

println(strBuf)

strBuf strBuf OK
println(

stringStr)

String NG Stringは未サポート

print()/println()

char桁あふれ

char c = 128;

println(c, BIN)

11111111111111111111111110000000

10000000

NG コンパイラによる差異と思われる

println(c, OCT)

37777777600

200 NG

println(c, DEC)

-128

128 NG

println(c, HEX)

FFFFFF80

80 NG
println() void OK
write()

write(65)

A A OK

write("BCD")

BCD BCD OK

write(strBuf)

strBuf strBuf OK

write(ucBuf, 1)

E E OK

改定履歴

2012.07.30 V1.00での検証結果を反映。



Attachment: http://japan.renesasrulz.com/gr_user_forum_japanese/m/mediagallery/23.aspx

  • gr-sakura
  • rxduino
  • Share
  • History
  • More
  • Cancel
Related
Recommended
サイト使用条件
プライバシーポリシー
お問い合わせ
© 2010-2023 Renesas Electronics Corporation. All rights reserved.