Использование динамической памяти Mega328

russo
Offline
Зарегистрирован: 20.11.2014

Пишу код с выбором значений, вот часть кода

switch (cardCode)
      {
        case 27780: temp = String("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); break;
        case 24876: temp = String("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); break;
        case 24754: temp = String("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); break;
        case  5406: temp = String("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); break;
        case  5459: temp = String("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); break;
        case 27201: temp = String("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); break;
        case 24732: temp = String("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); break;
        case 24720: temp = String("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); break;
        case  5379: temp = String("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); break;
        default: temp = String("карты нет в базе");
      }

При компиляции выходит ---Скетч использует 11596 байт (37%) памяти устройства. Всего доступно 30720 байт.Глобальные переменные используют 1481 байт (72%) динамической памяти, оставляя 567 байт для локальных переменных. Максимум: 2048 байт.

Если закоментирую половина CASE то размер использования динамической памятиуменьшается до 42%. Мне надо сделать 40 case выборок, пока только 10. Т.е. памяти не хватит. Как это запихать во флеш память? Пытался FOR сделать, также, более 10ти FOR вываливает ошибку при работе программы, сбивается адресация при выводе этих строк на max7219.

Logik
Offline
Зарегистрирован: 05.08.2014

А писать без этой хххххх-ни никак нельзя? Если нельзя, в чем я дофига сомниваюсь, ну засунуть эту ххххх-рень в флеш.

b707
Offline
Зарегистрирован: 26.05.2017

напишите, чего вы пытаетесь добиться. То. что вы делаете десятки одинаковых строк с ИКСами - это явно какой-то костыль, который по нормальному делается не так.

Я имею в виду вот эту бредятину:

String("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

 

 

russo
Offline
Зарегистрирован: 20.11.2014

Там русские символы для вывода текста на бегущую строку, служебная инфа. Длина строк символов 50 символов максимум в каждой строке.

russo
Offline
Зарегистрирован: 20.11.2014

Человек проходит с RFID картой и на строку выводиться инфа - ФИО, телефон сот и рабочий

Можно и mega2560 применить, но мы же не ищем легких путей )

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

А так?
 

unsigned int cardCode =0;
String temp;
void setup() {
  // put your setup code here, to run once:

}
void loop() {
  
switch (cardCode)
      {
        case 27780: temp = String(F("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); break;
        case 24876: temp = String(F("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); break;
        case 24754: temp = String(F("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); break;
        case  5406: temp = String(F("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); break;
        case  5459: temp = String(F("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); break;
        case 27201: temp = String(F("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); break;
        case 24732: temp = String(F("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); break;
        case 24720: temp = String(F("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); break;
        case  5379: temp = String(F("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); break;
        default: temp = String(F("карты нет в базе"));
      }

  // put your main code here, to run repeatedly:

}

 

Logik
Offline
Зарегистрирован: 05.08.2014

Т.е. нужна БД с ФИО и нумерами карт? Тогда строки в флеш если БД константа иначе или наращивать память или другой контроллер с большой памятю. Строки в флеш - это как #5

 

b707
Offline
Зарегистрирован: 26.05.2017

если строки не меняются - можно запихнуть во флеш макросом F(). как уже подсказали выше.

Если стрки переменные - НИКАК. 40 строк по 50 символов - это уже 2000 байт. а у Уно вся память всего 2048, а надо ведь и на другие переменные место оставить

Logik
Offline
Зарегистрирован: 05.08.2014

)))))

b707
Offline
Зарегистрирован: 26.05.2017

russo пишет:

Человек проходит с RFID картой и на строку выводиться инфа - ФИО, телефон сот и рабочий

все эти данные можно хранить на самой RFID. а программой только читать. Тогда в программу "поместяться" данные не только 40, но хоть 100500 карт

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

russo пишет:

Человек проходит с RFID картой и на строку выводиться инфа - ФИО, телефон сот и рабочий

все эти данные можно хранить на самой RFID. а программой только читать. Тогда в программу "поместяться" данные не только 40, но хоть 100500 карт

и это было бы правильное решение и, универсальное

Logik
Offline
Зарегистрирован: 05.08.2014

То смотря скока места на карте, если класик майфер, то влезета а если какой ультралайт, то там мало.

russo
Offline
Зарегистрирован: 20.11.2014

Спасибо за ответ, завтра попробую на работе.

код с 10-ю строками занимал 72 процента динамики, добавил F, стал занимать 24%

Спасибо за волшебную букву F :)

russo
Offline
Зарегистрирован: 20.11.2014

По поводу карт - у меня Индалла карты виганд26 бит, на них ничего не пишется.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

russo пишет:

Спасибо за ответ, завтра попробую на работе.

код с 10-ю строками занимал 72 процента динамики, добавил F, стал занимать 24%

Спасибо за волшебную букву F :)

После добавления еще 30 строк должен так и остаться 24% )))