HiFive1を使って、PCとのシリアル通信を実行する。
やり方は非常に簡単だ。プログラムはArduinoのサンプルからコピーしてきた。
void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.print("RISC-V HiFive1 Start\r\n"); } void loop() { // put your main code here, to run repeatedly: int c; if (Serial.available() > 0) { c = Serial.read(); Serial.write(c); } }
HiFive1のバグか、そもそも仕様なのか、setup()
内で大量にprintをしていると途中で固まる気がする。
これ、最初はあまり気が付かなかったのだけれども、そのままC++のプログラムなんだな。
loop()
はmain()
内で何度も動作しているし、setup()
はmain()
の最初で動作している。
Serial
はクラスとして定義されており、Serial.print()
はクラスのメンバ関数として定義されている。
~/.arduino15/packages/sifive/hardware/riscv/1.0.2
には、HiFive1用の各種関数群などが用意されている。
- cores/arduino/UARTClass.h
23:#include "HardwareSerial.h" 25:class UARTClass : public HardwareSerial
- cores/arduino/HardwareSerial.h
class HardwareSerial : public Stream
- cores/arduino/Stream.h
class Stream : public Print
- cores/arduino/Print.h
class Print { ... size_t print(const __FlashStringHelper *); size_t print(const String &); size_t print(const char[]); size_t print(char); size_t print(unsigned char, int = DEC); size_t print(int, int = DEC); size_t print(unsigned int, int = DEC); size_t print(long, int = DEC); size_t print(unsigned long, int = DEC); size_t print(double, int = 2); size_t print(const Printable&); ... };