Не выходит записать трехмерный массив в PROGMEM

Master125680
Offline
Зарегистрирован: 16.12.2019
Здравствуйте, наверное, третий раз в жизни задаю вопрос на форуме - все всегда получалось решить самому, но здесь я в тупике, просидел часа 4 с этой проблемой.

Суть вопроса проста: как мне записать массив data в программную память? Просьба не отсылать в гугл, ибо перерыл много инфы. Хотя, наверное, я сделал какую-нибудь элементарную ошибку и не могу ее заметить.

#include <iarduino_RTC.h>
iarduino_RTC watch(RTC_DS3231);

const char *const data[13][32] PROGMEM = {{"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""}, {"", "08521553", "08511554", "08511556", "08511557", "08501558", "08501600", "08491601", "08481603", "08481604", "08471606", "08461608", "08451609", "08441611", "08431613", "08421615", "08411616", "08401618", "08381620", "08371622", "08361624", "08341626", "08331628", "08311630", "08301632", "08281634", "08271637", "08251639", "08231641", "08211643", "08201645", "08181647"}, {"", "08161649", "08141652", "08121654", "08101656", "08081658", "08061701", "08041703", "08021705", "08001707", "07581709", "07551712", "07531714", "07511716", "07491718", "07471721", "07441723", "07421725", "07401727", "07371729", "07351732", "07321734", "07301736", "07281738", "07251740", "07231742", "07201745", "07181747", "07151749", "", "", ""}, {"", "07131751", "07101753", "07081755", "07051757", "07021800", "07001802", "06571804", "06551806", "06521808", "06491810", "06471812", "06441814", "06421816", "06391818", "06361820", "06341823", "06311825", "06281827", "06261829", "06231831", "06201833", "06181835", "06151837", "06121839", "06101841", "06071843", "06041845", "06021847", "05591849", "05561851", "05541853"}, {"", "05511855", "05481857", "05461859", "05431901", "05401903", "05381905", "05351907", "05331909", "05301912", "05271914", "05251916", "05221918", "05201920", "05171922", "05151924", "05121926", "05091928", "05071930", "05041932", "05021934", "05001936", "04571938", "04551940", "04521942", "04501944", "04471946", "04451949", "04431951", "04401953", "04381955", ""}, {"", "04361957", "04341959", "04312001", "04292003", "04272005", "04252007", "04232009", "04212011", "04182013", "04162015", "04142017", "04122019", "04102021", "04092023", "04072025", "04052027", "04032028", "04012030", "03592032", "03582034", "03562036", "03552037", "03532039", "03512041", "03502043", "03482044", "03472046", "03462047", "03442049", "03432050", "03422052"}, {"", "03412053", "03402055", "03392056", "03382057", "03372059", "03362100", "03352101", "03352102", "03342103", "03332104", "03332105", "03322106", "03322107", "03322107", "03312108", "03312109", "03312109", "03312110", "03312110", "03312110", "03312111", "03312111", "03322111", "03322111", "03322111", "03332111", "03332111", "03342111", "03342110", "03352110", ""}, {"", "03362110", "03372109", "03382109", "03392108", "03402107", "03412107", "03422106", "03432105", "03442104", "03452103", "03472102", "03482101", "03492100", "03512059", "03522058", "03542056", "03552055", "03572054", "03582052", "04002051", "04022049", "04032048", "04052046", "04072044", "04082043", "04102041", "04122039", "04142037", "04162035", "04182034", "04192032"}, {"", "04212030", "04232028", "04252026", "04272024", "04292022", "04312019", "04332017", "04352015", "04372013", "04392011", "04412008", "04432006", "04452004", "04472002", "04491959", "04511957", "04531955", "04551952", "04571950", "04591947", "05001945", "05021942", "05041940", "05061937", "05081935", "05101932", "05121930", "05141927", "05161925", "05181922", "05201920"}, {"", "05221917", "05241914", "05261912", "05281909", "05301907", "05321904", "05341901", "05361859", "05381856", "05401853", "05421851", "05441848", "05461845", "05481843", "05501840", "05521837", "05531835", "05551832", "05571829", "05591827", "06011824", "06031821", "06051819", "06081815", "06101812", "06121810", "06141807", "06151804", "06171802", "06191759", ""}, {"", "06211756", "06231754", "06251751", "06271748", "06291746", "06311743", "06331741", "06351738", "06371735", "06401733", "06421730", "06441728", "06461725", "06481723", "06501720", "06521718", "06541715", "06561713", "06581710", "07001708", "07021705", "07041703", "07071700", "07091658", "07111656", "07131653", "07151651", "07171649", "07191646", "07221644", "07241642"}, {"", "07261640", "07281637", "07301635", "07321633", "07341631", "07371629", "07391627", "07411625", "07431623", "07451621", "07471619", "07491617", "07521616", "07541614", "07561612", "07581610", "08001609", "08021607", "08041605", "08061604", "08081602", "08101601", "08121559", "08141558", "08161557", "08181556", "08201554", "08211553", "08231552", "08251551", ""}, {"", "08271550", "08281549", "08301548", "08311548", "08331547", "08341546", "08361546", "08371545", "08391545", "08401544", "08411544", "08421544", "08431543", "08441543", "08451543", "08461543", "08471543", "08481544", "08491544", "08491544", "08501544", "08501545", "08511545", "08511546", "08511547", "08521547", "08521548", "08521549", "08521550", "08521551", "08521552"}};

char buffer[10]; 

int Month;
int Day;

void setup() 
{
  Serial.begin(9600);
  watch.begin(); 
  
  Month = watch.month;
  Day = watch.day;
  
  String a = strcpy_P(buffer, (char *)pgm_read_word(&(data[Month][Day])));
}

Компилятор выдает: Глобальные переменные используют 3590 байт (175%) динамической памяти

 

rkit
Offline
Зарегистрирован: 23.11.2016

У тебя не трехмерный массив, а двухмерный массив строк (указателей). И вот массив в прогмеме, а строки - нет.

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

Master125680
Offline
Зарегистрирован: 16.12.2019

Формулой не выйдет, а вот числами да.. сейчас попробую

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

Заодно сделайте его таки "сколько-нужно-мерным" массивом. С теми же строками, если бы Вы честно сделали трёхмерный массив, никаких проблем бы не было.

Master125680
Offline
Зарегистрирован: 16.12.2019

С массивом из чисел проблем не возникло, странно, что я изначально так не сделал.

Master125680
Offline
Зарегистрирован: 16.12.2019

Не понимаю, что значит "сколько-нужно-мерным" С числами сделал так:

const long data[13][32] PROGMEM = {{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 8521553, 8511554, 8511556, 8511557, 8501558, 8501600, 8491601, 8481603, 8481604, 8471606, 8461608, 8451609, 8441611, 8431613, 8421615, 8411616, 8401618, 8381620, 8371622, 8361624, 8341626, 8331628, 8311630, 8301632, 8281634, 8271637, 8251639, 8231641, 8211643, 8201645, 8181647}, {1, 8161649, 8141652, 8121654, 8101656, 8081658, 8061701, 8041703, 8021705, 8001707, 7581709, 7551712, 7531714, 7511716, 7491718, 7471721, 7441723, 7421725, 7401727, 7371729, 7351732, 7321734, 7301736, 7281738, 7251740, 7231742, 7201745, 7181747, 7151749, 1, 1, 1}, {1, 7131751, 7101753, 7081755, 7051757, 7021800, 7001802, 6571804, 6551806, 6521808, 6491810, 6471812, 6441814, 6421816, 6391818, 6361820, 6341823, 6311825, 6281827, 6261829, 6231831, 6201833, 6181835, 6151837, 6121839, 6101841, 6071843, 6041845, 6021847, 5591849, 5561851, 5541853}, {1, 5511855, 5481857, 5461859, 5431901, 5401903, 5381905, 5351907, 5331909, 5301912, 5271914, 5251916, 5221918, 5201920, 5171922, 5151924, 5121926, 5091928, 5071930, 5041932, 5021934, 5001936, 4571938, 4551940, 4521942, 4501944, 4471946, 4451949, 4431951, 4401953, 4381955, 1}, {1, 4361957, 4341959, 4312001, 4292003, 4272005, 4252007, 4232009, 4212011, 4182013, 4162015, 4142017, 4122019, 4102021, 4092023, 4072025, 4052027, 4032028, 4012030, 3592032, 3582034, 3562036, 3552037, 3532039, 3512041, 3502043, 3482044, 3472046, 3462047, 3442049, 3432050, 3422052}, {1, 3412053, 3402055, 3392056, 3382057, 3372059, 3362100, 3352101, 3352102, 3342103, 3332104, 3332105, 3322106, 3322107, 3322107, 3312108, 3312109, 3312109, 3312110, 3312110, 3312110, 3312111, 3312111, 3322111, 3322111, 3322111, 3332111, 3332111, 3342111, 3342110, 3352110, 1}, {1, 3362110, 3372109, 3382109, 3392108, 3402107, 3412107, 3422106, 3432105, 3442104, 3452103, 3472102, 3482101, 3492100, 3512059, 3522058, 3542056, 3552055, 3572054, 3582052, 4002051, 4022049, 4032048, 4052046, 4072044, 4082043, 4102041, 4122039, 4142037, 4162035, 4182034, 4192032}, {1, 4212030, 4232028, 4252026, 4272024, 4292022, 4312019, 4332017, 4352015, 4372013, 4392011, 4412008, 4432006, 4452004, 4472002, 4491959, 4511957, 4531955, 4551952, 4571950, 4591947, 5001945, 5021942, 5041940, 5061937, 5081935, 5101932, 5121930, 5141927, 5161925, 5181922, 5201920}, {1, 5221917, 5241914, 5261912, 5281909, 5301907, 5321904, 5341901, 5361859, 5381856, 5401853, 5421851, 5441848, 5461845, 5481843, 5501840, 5521837, 5531835, 5551832, 5571829, 5591827, 6011824, 6031821, 6051819, 6081815, 6101812, 6121810, 6141807, 6151804, 6171802, 6191759, 1}, {1, 6211756, 6231754, 6251751, 6271748, 6291746, 6311743, 6331741, 6351738, 6371735, 6401733, 6421730, 6441728, 6461725, 6481723, 6501720, 6521718, 6541715, 6561713, 6581710, 7001708, 7021705, 7041703, 7071700, 7091658, 7111656, 7131653, 7151651, 7171649, 7191646, 7221644, 7241642}, {1, 7261640, 7281637, 7301635, 7321633, 7341631, 7371629, 7391627, 7411625, 7431623, 7451621, 7471619, 7491617, 7521616, 7541614, 7561612, 7581610, 8001609, 8021607, 8041605, 8061604, 8081602, 8101601, 8121559, 8141558, 8161557, 8181556, 8201554, 8211553, 8231552, 8251551, 1}, {1, 8271550, 8281549, 8301548, 8311548, 8331547, 8341546, 8361546, 8371545, 8391545, 8401544, 8411544, 8421544, 8431543, 8441543, 8451543, 8461543, 8471543, 8481544, 8491544, 8491544, 8501544, 8501545, 8511545, 8511546, 8511547, 8521547, 8521548, 8521549, 8521550, 8521551, 8521552}};

 

rkit
Offline
Зарегистрирован: 23.11.2016

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

если бы Вы честно сделали трёхмерный массив, никаких проблем бы не было.

был бы лютый фарш с записью

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

Кто мне может объяснить: в Си 08521553 - это сколько?

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

rkit пишет:

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

если бы Вы честно сделали трёхмерный массив, никаких проблем бы не было.

был бы лютый фарш с записью

Да, ладно, фарш как фарш, не лютее других.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

Кто мне может объяснить: в Си 08521553 - это сколько?

;)) Ни сколько.

main.c: In function 'main':
main.c:8:13: error: invalid digit "8" in octal constant
    8 |     int x = 08521553;
      |             ^~~~~~~~


** Process exited - Return Code: 1 **

 

SergeiL
SergeiL аватар
Offline
Зарегистрирован: 05.11.2018

wdrakula пишет:

;)) Ни сколько.

main.c: In function 'main':
main.c:8:13: error: invalid digit "8" in octal constant
    8 |     int x = 08521553;
      |             ^~~~~~~~

** Process exited - Return Code: 1 **

Опасная это штука - 0 в начале константы.