У меня есть ошибка в коде Arduino, который, кажется, не имеет смысла для меня. В целом, этот код будет воспроизводить музыкальные мелодии, сохраняя информацию о частоте и длительности нот, которые будут воспроизводиться на пьезо (одиночный тональный громкоговоритель). Чтобы сохранить память, я объявил/инициализировал два отдельных массива (как часть класса под названием TuneManager), который будет удерживать следующий набор частот/длительностей с двумя индексами: currentNoteIndex (который отслеживает, какая из нот будет воспроизводиться следующим образом) и loadableNoteIndex (который отслеживает следующее местоположение в массивах, которое может быть перезаписано новой записью).Несколько массивов int, указывающих на тот же адрес памяти?
int currentNoteIndex = 0;
int loadableNoteIndex = 0;
int tuneFreq[MAX_NOTE_BUFFER];
int tuneDur[MAX_NOTE_BUFFER];
Затем, когда приходит время, чтобы загрузить больше нот в этих массивах, я расшифровать их из строки, которая представляет собой композицию и загрузить их, как это:
tuneFreq[loadableNoteIndex] = atoi(noteFreq);
tuneDur[loadableNoteIndex] = atoi(noteDur);
Если я распечатать и переменных noteFreq и noteDur, я получаю ожидаемые значения. К сожалению, если я выхожу из сохраненных значений массива, я получаю неверный вывод.
Serial.print(tuneFreq[loadableNoteIndex]);
Serial.print(" ");
Serial.print(tuneDur[loadableNoteIndex]);
Например, если noteFreq был 150, но noteDur был 200, выходной сигнал будет "200 200" вместо ожидаемых "150 200". Кроме того, если бы я должен был переключить порядок операторов присваивания перед печатью, он будет печатать «150 150» вместо «200 150». Это заставляет меня думать, что оба массива каким-то образом ссылаются на одни и те же адреса памяти, но я не могу понять, что пошло не так.
Если вы хотите полный код, посмотрите на TuneManager CPP и ч файлы здесь: https://github.com/bajuwa/RoboKitty/tree/TuneBuffer/EightBitTunes
Это не нулевой размер, это [незаконно] (http://coliru.stacked-crooked.com/a/6aedd892f0c459c2). – chris
Спасибо! Это сделало замечательную работу по лечению моей головной боли. X) Я был настолько сосредоточен на совпадении всего этого, что я даже не думал о файле заголовка. Xx – bajuwa
Разрешено с gcc: https://gcc.gnu.org/onlinedocs/ gcc/Zero-Length.html, но Ill edit. – quantdev