Максимальный размер массива?

RANDREY
Offline
Зарегистрирован: 10.06.2012

Хочется прикинуть максимальный размер массива который можно разместить в своей программе.

Плата ArduinoMEGA2560 оригинал.

10Кb - это код. 2 массива с одинаковым размером BYTE myP[] = {2, 4, 8, 3, 6........};

Компилятор Arduino 1.0.1

Сколько можно втиснуть (зависит от компилятора?) 255 значений BYTE, 65535 значений? или больше?

Проверить самому пока нет возможности, надо переводить в программу значения.Если другой способ, типа линковки файла в котором лежат значения BYTE не в текстовом формате, а как BYTE 1байт - 1 значение?

maksim
Offline
Зарегистрирован: 12.02.2012

Зависит от объема оперативной памяти. 

RANDREY
Offline
Зарегистрирован: 10.06.2012

всего 8K ОЗУ?? за минусом переменных программы?

в ZX -SPECTRUME было 48К, в продвинутых 128К, потом 1М приделали...

а флешпамять 256К только для программы? нельзя ли её задействовать? Только на чтение.

Надо под рукой иметь 2 массива максимально по 64Кb в качестве значений "волны" для ЦАП.

По следам генератора на сайте http://cxem.net/arduino/arduino62.php

сказано "Для синусоидально сигнала, я написал простой скрипт на Python, который выводит 20000 значений"

"сохранил этот массив в памяти Arduino под названием sine20000[] и беру из него значения которые необходимо отправить в ЦАП. Это намного быстрее, чем вычислять значения каждый раз."

byte sine20000[] PROGMEM = {127, 127, 127, 127,....

вроде дошло ключ PROGMEM указывает где массив воткнуть, проверю как соберу данные

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

ну такой массив ограничется только ПЗУ, если скорость выборки значений не принципиальна и жалко выводов, можно взять какую нить флешку с SPI интерфейсом и набить ее до упора вашим массивом...

если не ошибаюсь макс скорость spi  sck/4, то нормальная скорость выборки массива получается

maksim
Offline
Зарегистрирован: 12.02.2012

RANDREY пишет:

а флешпамять 256К только для программы? нельзя ли её задействовать? Только на чтение.

Надо под рукой иметь 2 массива максимально по 64Кb в качестве значений "волны" для ЦАП.

byte sine20000[] PROGMEM = {127, 127, 127, 127,....

вроде дошло ключ PROGMEM указывает где массив воткнуть, проверю как соберу данные

Можно, все верно PROGMEM, вы же не уточнили что за массив и для чего.

byte PROGMEM pgm[] =
{
  0x0D,0xD3,0xEB,0xFC,0xF2,0xF0,0xE0,0xE7,0xE2,0xF3,0xEA,0xEE,0xE2,0xEE,0xE9,0x20,0xE4,0xE0,0xF2,
  0xC2,0xE5,0xF0,0xF1,0xE8,0xFF,0x20,0xCF,0xCE,0x20,0x31,0x2E,0x30,0x20,0x33,0x31,0x2E,0x30,0x33,
  0xCC,0xE0,0xEA,0xF1,0xE8,0xEC,0x20,0xC5,0xEF,0xE8,0xF4,0xE0,0xED,0xF6,0xE5,0xE2,0x0D,0x72,0x75,
  0x6D,0x61,0x6B,0x73,0x69,0x6D,0x65,0x70,0x69,0x66,0x61,0x6E,0x74,0x73,0x65,0x76,0x40,0x6D,0x61
};

byte buff = pgm_read_byte(&pgm[i]); // чтение байта из флэш

 

maksim
Offline
Зарегистрирован: 12.02.2012

Michal пишет:

если не ошибаюсь макс скорость spi  sck/4

Fosc/2

RANDREY
Offline
Зарегистрирован: 10.06.2012

у меня отдельный шилд SD карты есть, но пока не планирую использовать. Пока в программе жестко прошить массив.

Скорость нужна маленькая, до 1Кb секс.

Расчёт 256-8 (загрузчик)=248-48 (прога)=200

Значит 2 массива по 100Kb можно прописать.

Позже просто прошивку обновлять с соседней ардуины выбирая с карты СД нужную прошивку с волной.

Osseum
Offline
Зарегистрирован: 25.04.2013

Резисторы составляют собой восьмибитный ЦАП, его точность соответственно порядка 1/256, поэтому достаточно иметь порядка 256 значений синуса в таблице. Вот пример: "http://interface.khm.de/index.php/lab/experiments/arduino-dds-sinewave-generator/"

Можно нагуглить перевод этой статьи.

RANDREY
Offline
Зарегистрирован: 10.06.2012

Спасибо!