Не выходит записать трехмерный массив в PROGMEM
- Войдите на сайт для отправки комментариев
Сб, 24/09/2022 - 13:20
Здравствуйте, наверное, третий раз в жизни задаю вопрос на форуме - все всегда получалось решить самому, но здесь я в тупике, просидел часа 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%) динамической памяти
У тебя не трехмерный массив, а двухмерный массив строк (указателей). И вот массив в прогмеме, а строки - нет.
Судя по виду, значительно легче это было бы хранить числами, а не строками. А то и формулой.
Формулой не выйдет, а вот числами да.. сейчас попробую
Заодно сделайте его таки "сколько-нужно-мерным" массивом. С теми же строками, если бы Вы честно сделали трёхмерный массив, никаких проблем бы не было.
С массивом из чисел проблем не возникло, странно, что я изначально так не сделал.
Не понимаю, что значит "сколько-нужно-мерным" С числами сделал так:
если бы Вы честно сделали трёхмерный массив, никаких проблем бы не было.
был бы лютый фарш с записью
Кто мне может объяснить: в Си 08521553 - это сколько?
если бы Вы честно сделали трёхмерный массив, никаких проблем бы не было.
был бы лютый фарш с записью
Да, ладно, фарш как фарш, не лютее других.
Кто мне может объяснить: в Си 08521553 - это сколько?
;)) Ни сколько.
;)) Ни сколько.
Опасная это штука - 0 в начале константы.