Хватит ли мне памяти?

woofmaster
Offline
Зарегистрирован: 29.11.2016

Есть глобальные переменные вида
String value1 = "string26byte";
Сделать локальными нет возможности. Это своего рода константы, то есть текст в них сравнивается с текстом из сериал порта. Так вот этих переменных 181 штука:) и мне почему то кажется, что не хватит оперативки на все эти переменные. Что можете сказать по этому поводу?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Могу сказать, что для 181 переменной по 26 байтов типа String (занимает 6 байтов) с учётом накладных расходов – 2 байта, потребуется 181*(26+6+2)=6154 байта.  (Вы эти действия в третьем классе проходить будете, а пока поверьте на слово). 

Также могу сказать, что если Вам кажется - перекреститесь, а если Вам нужно, чтобы кто-то за Вас сравнил число 6154 с размером оперативной памяти, так Вы, блин, хоть бы сказали, ЧЬЮ память Вы имеете в виду. Меги? Или Тиньки, или может «Sunway TaihuLight»?

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

Если значения имеют вид типа "string26byte";"string27byte";"string28byte"; или вобще "string**byte"; "string******"; и т.д. то эту бредятину вобще хранить так не нужно, нужно разделять на осмысленые части и сравнивать по частям. И не в String а в char[].

woofmaster
Offline
Зарегистрирован: 29.11.2016

Евгений меня правильно понял, то есть "string26byte" - это 26 различных не повторяющихся символов. Плата UNO. Так значит воспользоватся progmem как советовал arduino328?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

woofmaster пишет:
Так значит воспользоватся progmem как советовал arduino328?
Не зна, от задачи зависит. И от того, есть ли у Вас столько места в прогмем.

Только тип String Вы туда по любому не запихнёте. Придется обходится массивами char

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ЕвгенийП пишет:

И от того, есть ли у Вас столько места в прогмем.

Константы определенные PROGMEM лишнего места в программной памяти не занимают. Если по замыслу разработчика константы должны быть в оперативке, они все равно будут размещены в программной, откуда затем будут копироваться при инициализации программы.