-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathStream.ino
138 lines (121 loc) · 3.41 KB
/
Stream.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include "Storage.h"
#include "GPIO.h"
#include "SPI.h"
#include "Driver/MC23LC1024.h"
// #define USE_SOFTWARE_SPI
#define USE_HARDWARE_SPI
#if defined(USE_SOFTWARE_SPI)
#include "Software/SPI.h"
Software::SPI<BOARD::D11, BOARD::D12, BOARD::D13> spi;
#elif defined(USE_HARDWARE_SPI)
#include "Hardware/SPI.h"
Hardware::SPI spi;
#endif
// External memory storage
MC23LC1024<BOARD::D10> sram(spi);
// Storage streams; 10000 bytes each
Storage::Stream ios(sram, 10000);
Storage::Stream temps(sram, 10000);
// Sample size and performance measurements
const int N = 1000;
int count = 0;
uint32_t s0, m0, m1, m2, m3, m4, m5, m6, m7;
void setup()
{
Serial.begin(57600);
while (!Serial);
// Print size of SRAM and number of bytes available after allocation
Serial.print(F("sram.SIZE = "));
Serial.println(sram.SIZE);
Serial.print(F("sram.room = "));
Serial.println(sram.room());
Serial.flush();
}
void loop()
{
// Print N analog samples to serial stream
s0 = micros();
for (int i = 0; i < N; i++) {
Serial.println(analogRead(A0));
}
Serial.println();
Serial.flush();
m0 = micros() - s0;
// Print N analog samples to sram stream
s0 = micros();
for (int i = 0; i < N; i++) {
ios.println(analogRead(A0));
}
ios.println();
m1 = micros() - s0;
// Transfer data between two sram streams
count = ios.available();
s0 = micros();
while (ios.available())
temps.write(ios.read());
m2 = micros() - s0;
// Print data from sram stream to serial stream
s0 = micros();
while (temps.available())
Serial.write(temps.read());
Serial.flush();
m3 = micros() - s0;
// Write to sram stream
s0 = micros();
for (int i = 0; i < count; i++) ios.write(i);
m4 = micros() - s0;
// Read from sram stream
s0 = micros();
uint16_t sum = 0;
for (int i = 0; i < count; i++) sum += ios.read();
m5 = micros() - s0;
// Write N analog samples to sram stream
s0 = micros();
int sample;
for (int i = 0; i < N; i++) {
sample = analogRead(A0);
ios.write((const uint8_t*) &sample, sizeof(sample));
}
m6 = micros() - s0;
// Read N analog samples from sram stream and print to serial
s0 = micros();
while (ios.available()) {
ios.readBytes((uint8_t*) &sample, sizeof(sample));
Serial.println(sample);
}
Serial.flush();
m7 = micros() - s0;
// Print the results
Serial.print(F("ios.addr = "));
Serial.println(ios.addr());
Serial.print(F("temps.addr = "));
Serial.println(temps.addr());
Serial.print(F("sram.addr = "));
Serial.println(sram.alloc(0));
Serial.print(F("Samples, N = "));
Serial.println(N);
Serial.print(F("Serial.print, m0 = "));
Serial.println(m0 / N);
Serial.print(F("SRAM::Stream.print, m1 = "));
Serial.println(m1 / N);
Serial.println();
Serial.print(F("SRAM::Stream.available, count = "));
Serial.println(count);
Serial.print(F("SRAM::Stream.write/read, m2 = "));
Serial.println(m2 / count);
Serial.print(F("SRAM::Stream.read/Serial.write, m3 = "));
Serial.println(m3 / count);
Serial.print(F("SRAM::Stream.write, m4 = "));
Serial.println(m4 / count);
Serial.print(F("SRAM::Stream.read, m5 = "));
Serial.println(m5 / count);
Serial.println();
Serial.print(F("SRAM::Stream.available, N*2 = "));
Serial.println(N * 2);
Serial.print(F("SRAM::Stream.write(2), m6 = "));
Serial.println(m6 / N);
Serial.print(F("SRAM::Stream.read(2)/Serial.print, m7 = "));
Serial.println(m7 / N);
Serial.println();
delay(1000);
}