ATtiny85のベンチマーク
ATtiny85ベンチマーク
こちらのベンチマークの続きである。
Dhrystoneはダメだった
本当はDhrystoneを動作させたかったが、ATtiny85の容量が足りず、プログラムをそのままの形では実行できず断念。
代わりに
どこかのページ(失念)を参考に、四則演算を繰り返し行うソースコードをつくり、Arduino(ATmega328p)と比較することにした。
ATtiny85の結果をArduinoに転送
こちらのソフトウェアシリアル手法を使ってATtiny85の計算結果をArduinoに転送した。この方法だと、残念ながら、ATtiny85のクロックは1MHzとなってしまう(本来は20MHz?)。なおArduinoのクロックは16MHzである。
ATtiny85およびArduino共通ソースコード
Benchmarkとして適切かどうかは不明であるが、10000回、四則演算した時間を計測する。
#define NUM 1000*10
char buf[128];
void pseudo_benchmark() {
volatile float value; // "volatile" is necessary.
uint32_t t0, t1, len, i;
memset(buf, 0, sizeof(buf));
sprintf(buf, "\nATtiny85-Start\n"); // ここは「ATtiny85」または「Arduino」となる
t0 = millis();
value = 1.0;
for (i = 0; i < NUM; i++) {
value += 0.1;
}
t1 = millis();
sprintf(buf+strlen(buf), " +: %d\n", t1 - t0);
t0 = millis();
value = 12345678.0;
for (i = 0; i < NUM; i++) {
value -= 0.1;
}
t1 = millis();
sprintf(buf+strlen(buf), " -: %d\n", t1 - t0);
t0 = millis();
value = 1.0;
for (i = 0; i < NUM; i++) {
value *= 1.1;
}
t1 = millis();
sprintf(buf+strlen(buf), " *: %d\n", t1 - t0);
t0 = millis();
value = 12345678.0;
for (i = 0; i < NUM; i++) {
value /= 1.1;
}
t1 = millis();
sprintf(buf+strlen(buf), " /: %d\n", t1 - t0);
sprintf(buf+strlen(buf), "ATtiny85-End\n"); // ここは「ATtiny85」または「Arduino」となる
}
ATtiny85ソースコード
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 4); // RX, TX
// ここに上記の共通ソースコードあり
void setup()
{
mySerial.begin(4800);
pseudo_benchmark();
}
void loop()
{
if (mySerial.available()) {
(void)mySerial.read(); // throw away
for (int i = 0; i < strlen(buf); i++) {
mySerial.write(buf[i]);
}
}
}
Arduinoソースコード
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
// ここに上記の共通ソースコードあり
void setup()
{
Serial.begin(9600);
mySerial.begin(4800);
pseudo_benchmark();
Serial.println(buf);
}
void loop() // run over and over
{
if (Serial.available()) {
String data = Serial.readStringUntil('\n');
mySerial.write('S'); // sending dummy date to start ATtiny85.
}
if (mySerial.available()) {
Serial.write(mySerial.read());
}
}
起動時にベンチマークのもととなる計算を実施。ソフトウェアシリアルを使って、ArduinoとATtiny85とを接続する。Arduinoに接続されたPCから何かを入力すると、ArduinoからATtiny85へコマンド('S')を送り、ATtiny85は結果をArduinoに返し、ArduinoはPCに計算結果を表示。
結果
ここで、ATtiny85のクロックは1MHz、Arduinoのクロックは16MHz。比較という視点では、ほぼ、相当する結果が得られているようだ。
Author And Source
この問題について(ATtiny85のベンチマーク), 我々は、より多くの情報をここで見つけました https://qiita.com/infinite1oop/items/a65073ffadfeec5209b4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .