Don't know much about memory/ram etc... I have this circular buffer code (yes its very basic!) but as is it takes 400% memory usage. Is there something I can do different to keep the array sizes I want but minimize memory usage?
#define MP_DIM_X 100 //Storage will be 1 less than this
float mp [MP_DIM_X][20];
unsigned int mp_head;
unsigned int mp_tail;
float storeSomething[6][20];
float readSomething[1][20];
float writeSomething[1][20];
void setup() {
//-------------------------------------//
//Serial
//-------------------------------------//
Serial.begin(9600);
delay(200);
Serial.println("\n\n\n\n\n\n\n\nStart");
delay(200);
mp_head = 0;
mp_tail = 0;
for (int i = 0; i < 7; i++) {
writeSomething[0][0] = 0;
writeSomething[0][1] = i * 2 + 1;
bufferPush(writeSomething);
}
bufferLastMember(readSomething);
bufferShift(readSomething);
for (int i = 0; i < 2; i++) {
storeSomething[0][i] = readSomething[0][i];
}
bufferShift(readSomething);
for (int i = 0; i < 2; i++) {
storeSomething[1][i] = readSomething[0][i];
}
bufferShift(readSomething);
for (int i = 0; i < 2; i++) {
storeSomething[2][i] = readSomething[0][i];
}
bufferShift(readSomething);
for (int i = 0; i < 2; i++) {
storeSomething[3][i] = readSomething[0][i];
}
bufferShift(readSomething);
for (int i = 0; i < 2; i++) {
storeSomething[4][i] = readSomething[0][i];
}
bufferShift(readSomething);
for (int i = 0; i < 2; i++) {
storeSomething[5][i] = readSomething[0][i];
}
bufferLastMember(readSomething);
for (int i = 0; i < 8; i++) {
writeSomething[0][0] = 0;
writeSomething[0][1] = i * 2 + 101;
bufferPush(writeSomething);
}
}
void bufferPointerAdd(unsigned int &num) {
if (num == MP_DIM_X - 1) {
num = 0;
}
else {
num++;
}
}
void bufferPointerSub(unsigned int &num) {
if (num == 0) {
num = MP_DIM_X - 1;
}
else {
num--;
}
}
void bufferPush(float (&a)[1][20]) {
for (int i = 0; i < 2; i++) {
mp[mp_tail][i] = a[0][i];
}
bufferPointerAdd(mp_tail);
}
void bufferShift(float (&a)[1][20]) {
for (int i = 0; i < 2; i++) {
a[0][i] = mp[mp_head][i];
}
bufferPointerAdd(mp_head);
}
void bufferLastMember(float (&a)[1][20]) {
for (int i = 0; i < 2; i++) {
a[0][i] = mp[(mp_tail - 1)][i];
}
}
int bufferSize() {
if (mp_tail < mp_head) {
return (MP_DIM_X + mp_tail - mp_head);
}
else {
return (mp_tail - mp_head);
}
}
boolean bufferIsFull() {
if (bufferSize() == MP_DIM_X - 1) {
return true;
}
else {
return false;
}
}
boolean bufferIsEmpty() {
if (bufferSize() == 0) {
return true;
}
else {
return false;
}
}
void loop() {
// put your main code here, to run repeatedly:
}