111822782 100414482 Массив и строки EEPROM v1.6b Набор блоков для записи и чтения массивов и строк в/из EEPROM AlexCrane, 2021 79 244258360 196426950 75907337 165666572 #include <EEPROM.h> plainText #include (Graphics.ColorValue scaledRed: 3019 scaledGreen: 3501 scaledBlue: 96) <EEPROM.h> Graphics.ColorValue black none Библиотека start declare 25815639 187132374 uint16_t gl_len_ uint16_t gl_len_ 172049339 codeTag ; ; Переменные stop 141984253 235101187 setup 125183089 85376596 EEPROM.begin( EEPROM. begin Graphics.ColorValue orange ( 61554547 169335362 Выделить память EEPROM true 252097908 ESP 236175445 132395885 81559120 242207496 Контроллер ESP Graphics.ColorValue black r0g0b0 175126978 Контроллер ESP 129118198 Graphics.ColorValue blue r0g0b31 153338211 2000 ); ); Выделение памяти для ESP 144728819 102531218 loop 81901087 145093776 insert 234649653 182698276 145534512 void MemWrite(uint16_t address_ac, uint8_t val_ac) { void (Graphics.ColorValue scaledRed: 0 scaledGreen: 4850 scaledBlue: 5011) MemWrite(uint16_t address_ac, uint8_t Graphics.ColorValue blue val_ac) { false 160963735 Убрать функции записи строк в EEPROM из проекта 261312838 86761176 91404016 184742601 Убрать функции записи строк в EEPROM из проекта 37343953 Убрать функции записи строк в EEPROM из проекта, если не используются 262756627 MemWrite1 neitral function 104174726 EEPROM.update(address_ac, val_ac); EEPROM.update(address_ac, val_ac); 92030058 Убрать функции записи строк в EEPROM из проекта AVR 170268847 125768566 35538594 49156395 and 176732359 64272310 68980988 MemWrite2_AVR 80238536 EEPROM.write(address_ac, val_ac); EEPROM. write (address_ac, val_ac); 266007194 Убрать функции записи строк в EEPROM из проекта ESP 249293871 23119248 108193649 163837771 201601802 234747199 206823479 MemWrite2_ESP 217600015 } } MemWrite3 199937657 uint16_t WriteString(uint16_t address_ac, const String& val_ac) { uint16_t len_ac = val_ac.length(); uint8_t* blen_ac = (uint8_t*) &len_ac; for(uint8_t i_ac=0;i_ac<sizeof(uint16_t);i_ac++) MemWrite(address_ac++, *blen_ac++); for(uint16_t i_ac=0;i_ac<len_ac;i_ac++) MemWrite(address_ac++, val_ac[i_ac]); return len_ac + sizeof(uint16_t); } uint16_t WriteString(uint16_t address_ac, const (Graphics.ColorValue scaledRed: 0 scaledGreen: 4850 scaledBlue: 5011) String & val_ac) { uint16_t len_ac = val_ac. length (); uint8_t * blen_ac = ( uint8_t *) &len_ac; for Graphics.ColorValue darkGreen ( uint8_t i_ac=0;i_ac< sizeof (uint16_t);i_ac++) MemWrite(address_ac++, *blen_ac++); for (uint16_t i_ac=0;i_ac<len_ac;i_ac++) MemWrite(address_ac++, val_ac[i_ac]); return len_ac + sizeof (uint16_t); } WriteString 249490327 uint8_t MemRead(uint16_t address_ac) { return EEPROM.read(address_ac); } uint8_t MemRead(uint16_t address_ac) { return EEPROM. read (address_ac); } 157915906 Убрать функции чтения строк в EEPROM из проекта 130555512 151163968 74944823 223945797 Убрать функции чтения строк из EEPROM из проекта 37053591 Убрать функции чтения строк из EEPROM из проекта, если не используются 235181411 MemRead 141753104 String ReadString(uint16_t& address_ac) { String result; uint16_t len_ac; uint8_t* blen_ac = (uint8_t*) &len_ac; *blen_ac++ = MemRead(address_ac++); *blen_ac = MemRead(address_ac++); for(uint16_t i_ac=0;i_ac<len_ac;i_ac++) result += (char) MemRead(address_ac++); gl_len_ String ReadString(uint16_t& address_ac) { String result; uint16_t len_ac; uint8_t * blen_ac = ( uint8_t *) &len_ac; *blen_ac++ = MemRead(address_ac++); *blen_ac = MemRead(address_ac++); for (uint16_t i_ac=0;i_ac<len_ac;i_ac++) result += ( char ) MemRead(address_ac++); gl_len_ 64463353 = len_ac+2; return result; } = len_ac+2; return result; } ReadString 66762652 188484801 Запись массива в EEPROM Запись массива в EEPROM 90493338 71169030 159778473 227028421 251668242 32019050 194254913 244040996 245243300 155325068 47747704 197072383 149420738 188907757 252759947 265497461 251011477 148790834 137937140 252546722 198079769 45415832 238028229 173396789 136214327 if ( if ( 104325788 220653988 Запись _|_ Запись ) { EEPROM.put( ) { EEPROM.put( 217345905 40567964 Адрес для записи 56885192 Задание адреса со входа 97023492 15919611 50475316 234139605 Задание адреса со входа для записи 192700631 Задание адреса со входа иначе берем с параметров 17422753 Graphics.ColorValue cyan r0g31b31 228755964 0 , , 20435029 260149883 Массив для записи Graphics.ColorValue purple r19g3b27 r9g3b27 Graphics.ColorValue brown r15g7b7 Graphics.ColorValue olive r15g15b0 name ); ); 110299855 130681168 Адрес для следующего Адрес для следующего = sizeof( = sizeof (Graphics.ColorValue scaledRed: 0 scaledGreen: 4850 scaledBlue: 5011) ( ); } ); } 226191747 Задание адреса из параметров AVR 149991045 118660158 215422116 249285711 135068932 16212857 130619875 Запись массива по адресу из параметров AVR 25066753 if ( if ( ) { EEPROM.put( ) { EEPROM.put( 45662120 , , 48724076 ); EEPROM.commit(); ); EEPROM.commit(); = sizeof( = sizeof ( ); } ); } 111313863 Задание адреса из параметров ESP 219199500 44488721 41129134 236347464 63924352 8375666 103674858 Запись массива по адресу из параметров ESP 145910015 if ( if ( ) { EEPROM.put( ) { EEPROM.put( 209498689 109078583 Адрес Адрес , , 140779338 ); ); = sizeof( = sizeof ( ); } ); } 130492425 Задание адреса со входа AVR 96822478 260515849 127688013 178410822 74365219 121160464 139697757 Запись массива по адресу со входа AVR 20194430 if ( if ( ) { EEPROM.put( ) { EEPROM.put( , , 241601881 ); EEPROM.commit(); ); EEPROM.commit(); = sizeof( = sizeof ( ); } ); } 38298109 Задание адреса со входа ESP 31957544 99131025 183431697 57570365 105088239 89270459 15857316 Запись массива по адресу со входа ESP 226480274 44627994 101172599 54000992 46169716 5488168 13200166 70973642 67663878 152235623 22702221 260958265 153087486 143607484 187811135 104777147 Блок для записи массива в EEPROM Параметры: Адрес для записи - адрес куда сохраняем Массив - массив для записи Входы: Запись - По переднему фронту сохраняем массив в EEPROM, использовать через RTrig Адрес - Адрес для записи Выходы: Адрес для следующего - Адрес для следующего блока записи AlexCrane, 2021 308 240666436 41359481 79666460 Чтение массива из EEPROM Чтение массива из EEPROM 90044340 78375619 285050 65884015 95205824 130342275 123293983 45909178 163653652 94008828 189926707 3448890 129350654 42539396 143225771 244195346 1106505 47892520 242005727 171746256 14907228 183465228 72261108 69855105 130149645 if ( if ( 223865782 146389712 Читать _|_ Читать ) { EEPROM.get( ) { EEPROM.get( 65224318 143081362 Адрес для чтения 14598910 Задание адреса со входа для чтения 97396186 258292827 79579400 51097388 Задание адреса со входа для чтения 257900904 Задание адреса со входа для чтения 30417392 117920488 , , 44036502 36750768 Массив куда читаем ); ); 21457133 55429445 Адрес для следующего Адрес для следующего = sizeof( = sizeof (Graphics.ColorValue scaledRed: 0 scaledGreen: 4850 scaledBlue: 5011) ( ); } ); } Чтение массива по адресу из параметров 111880288 if ( if ( ) { EEPROM.get( ) { EEPROM.get( 109337044 129887099 Адрес Адрес , , 6958493 ); ); = sizeof( = sizeof ( ); } ); } Чтение массива по адресу со входа 265709588 202167318 238486438 213972750 261077326 142376105 54123253 81497957 95443165 31428732 136523003 152969092 102598350 58761352 187209520 237796148 Блок для чтения массива из EEPROM Параметры: Адрес для чтения - адрес откуда читаем Массив - массив в который читаем Входы: Читать - По переднему фронту читаем массив из EEPROM, использовать через RTrig Адрес - Адрес для чтения Выходы: Адрес для следующего - Адрес для следующего блока чтения AlexCrane, 2021 312 93384094 152037300 250917585 Запись массива String в EEPROM Запись массива String в EEPROM 230020836 155836497 250697850 192840838 213470435 22722409 171980067 46952762 151560470 102332262 224266461 235787669 103159575 243812165 62640861 230978104 120474323 146603276 163939934 14122610 211115121 161910680 251278226 83341474 238134269 if ( if ( 122337798 174994926 Запись _|_ Запись ) { uint16_t addr ) { uint16_t addr 112823867 = = 92997702 117758348 Адрес 152692211 Задание адреса со входа для String 43479050 205882892 127032636 106729227 Задание адреса со входа для записи массива String 12203282 Задание адреса со входа иначе берем с параметров 191637689 Адрес ; for (int i ; for ( int Graphics.ColorValue blue i =0; i =0; i < < 47373852 253735470 Массив String для записи (Graphics.ColorValue scaledRed: 1831 scaledGreen: 5043 scaledBlue: 0) r6g19b0 size ; i ; i ++) { addr ++) { addr += WriteString(addr += WriteString(addr , , 245027209 [i [i ]); } ]); } 16779871 142222309 Адрес для следующего Адрес для следующего = addr = addr ; } ; } 205071097 Задание адреса со входа для String AVR 71300501 134387164 41103405 39517876 68139401 27440949 257419697 Запись массива по адресу со входа AVR 73264145 if ( if ( ) { uint16_t addr ) { uint16_t addr 244378853 = = 155245074 10489463 Адрес для записи массива String 114359783 ; for (int i ; for ( int i =0; i =0; i < < 147981819 ; i ; i ++) { addr ++) { addr += WriteString(addr += WriteString(addr , , 73761769 [i [i ]); } ]); } = addr = addr ; } ; } 82465988 Задание адреса из параметров для String AVR 127256641 65075305 204474278 112057286 254125638 168945852 161199846 Запись массива по адресу из параметров AVR 246674408 if ( if ( ) { uint16_t addr ) { uint16_t addr 70710922 = = ; for (int i ; for ( int i =0; i =0; i < < 57726532 ; i ; i ++) { addr ++) { addr += WriteString(addr += WriteString(addr , , 138277633 [i [i ]); } EEPROM.commit(); ]); } EEPROM.commit(); = addr = addr ; } ; } 125327112 Задание адреса со входа для String ESP 107437965 77940049 215029884 48787636 223419322 48411626 237826484 Запись массива по адресу со входа ESP 198282050 if ( if ( ) { uint16_t addr ) { uint16_t addr 165362948 = = 195735585 ; for (int i ; for ( int i =0; i =0; i < < 127322267 ; i ; i ++) { addr ++) { addr += WriteString(addr += WriteString(addr , , 212205374 [i [i ]); } EEPROM.commit(); ]); } EEPROM.commit(); = addr = addr ; } ; } 162037754 Задание адреса из параметров для String ESP 264130490 57646011 113306763 235945303 130951911 49715464 152184079 Запись массива по адресу из параметров ESP 255291258 136575674 177511303 176763556 55640830 91175412 159410559 216016652 157390336 244057812 188423812 202902177 51800446 207105110 246945714 191501944 Блок для записи массива String в EEPROM Параметры: Адрес для записи - адрес куда сохраняем Массив - массив для записи Входы: Запись - По переднему фронту сохраняем массив в EEPROM, использовать через RTrig Адрес - Адрес для записи Выходы: Адрес для следующего - Адрес для следующего блока записи AlexCrane, 2021 315 256599079 1878015 12244838 Чтение массива String из EEPROM Чтение массива String из EEPROM 184209268 49701186 41007941 263646182 5194385 238669803 55093373 118854381 67731788 11280325 243989603 190358130 121384500 103139420 238442023 188524720 243757454 150130920 177680296 42044020 165261629 39898805 172502033 193635542 6239010 if ( if ( 159301437 1337448 Читать _|_ Читать ) { uint16_t addr ) { uint16_t addr 119101065 = = 133529720 256947262 Адрес 79389122 Задание адреса со входа для чтения массива String 29926425 177225430 30135125 257684237 Задание адреса со входа для чтения массива String 84322185 Задание адреса со входа для чтения массива String 253315167 Адрес ; for (int i ; for ( int i =0; i =0; i < < 29494442 233504120 Массив String куда читаем ; i ; i ++) { ++) { 244356003 [i [i ] = ReadString(addr ] = ReadString(addr ); } ); } 248039060 197059937 Адрес для следующего Адрес для следующего = addr = addr ; } ; } Чтение массива по адресу со входа 35405837 if ( if ( ) { uint16_t addr ) { uint16_t addr 226006253 = = 45052752 258178989 Адрес для чтения массива String 149062936 ; for (int i ; for ( int i =0; i =0; i < < 2141648 ; i ; i ++) { ++) { 14983206 [i [i ] = ReadString(addr ] = ReadString(addr ); } ); } = addr = addr ; } ; } 140065260 Задание адреса из параметров String 26285008 172247887 144460182 95965122 Чтение массива по адресу из параметров 261622059 246900981 68649844 227398229 251124236 156482367 258749234 165110253 145967759 140757511 142723166 163841335 209882743 39531399 200297071 27763868 Блок для чтения массива String из EEPROM Параметры: Адрес для чтения - адрес откуда читаем Массив - массив в который читаем Входы: Читать - По переднему фронту читаем массив из EEPROM, использовать через RTrig Адрес - Адрес для чтения Выходы: Адрес для следующего - Адрес для следующего блока чтения AlexCrane, 2021 319 192287024 116327637 102002706 Запись строки в EEPROM Запись строки в EEPROM 244866798 112998452 73258872 49191974 119606609 154924167 170519950 9548323 75340858 21006928 249683484 169814 20326123 117377568 14806521 248751271 163111957 33470070 190762153 1961798 141576852 68325117 25804919 262408223 139766869 if ( if ( 12700927 221083412 Запись _|_ Запись ) { uint16_t addr ) { uint16_t addr 80175833 = = 6328154 13592683 Адрес 254213378 Задание адреса со входа для записи строки 178094862 82888401 80493397 56060718 Задание адреса со входа для записи строки 179324 Задание адреса со входа иначе берем с параметров 158345963 Адрес ; addr ; addr += WriteString(addr += WriteString(addr , , 164627231 176398890 Строка Строка ); ); 122067014 91787614 Адрес для следующего Адрес для следующего = addr = addr ; } ; } 79354862 Задание адреса со входа для записи строки AVR 205651242 74367472 10696088 158164451 34351418 236685989 258964199 Запись строки по адресу со входа AVR 232305794 if ( if ( ) { uint16_t addr ) { uint16_t addr 73366136 = = 141203419 65149734 Адрес для записи строки 63520064 ; addr ; addr += WriteString(addr += WriteString(addr , , ); ); = addr = addr ; } ; } 6054957 Задание адреса из параметров для записи строки AVR 267177186 105271759 127495533 135510627 48478667 74004886 146222491 Запись строки по адресу из параметров AVR 36264604 if ( if ( ) { uint16_t addr ) { uint16_t addr 264551912 = = ; addr ; addr += WriteString(addr += WriteString(addr , , ); EEPROM.commit(); ); EEPROM.commit(); = addr = addr ; } ; } 169345204 Задание адреса со входа для записи строки ESP 51370669 90373799 226728674 108663414 126680445 115328689 31403594 Запись строки по адресу со входа ESP 105499252 if ( if ( ) { uint16_t addr ) { uint16_t addr 34602220 = = 179248545 ; addr ; addr += WriteString(addr += WriteString(addr , , ); EEPROM.commit(); ); EEPROM.commit(); = addr = addr ; } ; } 113678413 Задание адреса из параметров для записи строки ESP 170201724 154720511 38527696 116318482 64233971 92661556 151572308 Запись строки по адресу из параметров ESP 170468956 58973666 177069110 98020212 194060115 129167134 157157347 165669790 43708489 171844288 187801246 35599992 110432981 213579806 99992681 Блок для записи строки в EEPROM Параметры: Адрес для записи - адрес куда сохраняем Строка - строка для записи Входы: Запись - По переднему фронту сохраняем строку в EEPROM, использовать через RTrig Адрес - Адрес для записи Выходы: Адрес для следующего - Адрес для следующего блока записи AlexCrane, 2021 307 7487518 104948091 211453694 Чтение строки из EEPROM Чтение строки из EEPROM 44828974 15854787 124285353 211613516 85535826 202806800 261579016 77358393 28813557 66855183 147910571 79808313 82476580 247085692 169483172 97686196 255489604 245781124 55260684 253260232 59151852 48466156 7719917 233237508 248966087 if ( if ( 57173213 241361238 Читать _|_ Читать ) { uint16_t addr ) { uint16_t addr 213629780 = = 49863474 65594913 Адрес 203071535 Задание адреса со входа для чтения строки 5289716 111369877 220140101 80551187 Задание адреса со входа для чтения строки 232856855 Задание адреса со входа для чтения иначе берем с параметров 115317654 Адрес ; ; 244458769 132493793 Строка Строка = ReadString(addr = ReadString(addr ); ); 251503118 219738396 Адрес для следующего Адрес для следующего = = +gl_len_ +gl_len_ 53115853 ; } ; } Чтение строки по адресу со входа 70340583 if ( if ( ) { uint16_t addr ) { uint16_t addr 233676491 = = 120292177 151291589 Адрес для чтения строки 127162053 Задание адреса из параметров для чтения строки 60450080 11662364 136399572 111276807 97168239 ; ; = ReadString(addr = ReadString(addr ); ); = = +gl_len_ +gl_len_ 236818310 ; } ; } Чтение строки по адресу из параметров 130484645 101603615 217513868 232589594 185930277 137744406 250404127 124168525 83435004 5135621 100897556 200065783 52709724 217523943 260793021 Блок для чтения строки в EEPROM Параметры: Адрес для чтения - адрес откуда читаем Строка - строка для чтения Входы: Чтение - По переднему фронту читаем строку из EEPROM, использовать через RTrig Адрес - Адрес для чтения Выходы: Адрес для следующего - Адрес для следующего блока чтения AlexCrane, 2021 304 158139118 53767358 201053511 Очистка EEPROM Очистка EEPROM 124891428 159608259 120880583 15680922 85296268 191199442 72505274 66757041 36735134 92401818 133935657 61332525 149314969 248073929 114530953 3866661 120984518 160206165 88217489 179045849 255140110 252151042 72848568 22993488 100144372 if ( if ( 63317226 149917946 Стереть _|_ Стереть ) { uint16_t address_ ) { uint16_t address_ 252901064 ; while (address_ ; while (address_ < EEPROM.length()) { EEPROM.update(address_ < EEPROM. length ()) { EEPROM.update(address_ , 255); address_ , 255); address_ ++; } } ++; } } 140629421 Стирать EEPROM полностью AVR 133317297 191242104 201759225 31721048 Стирать EEPROM полностью 19555542 Стирать EEPROM полностью, иначе нужно будет указать диапазон 176298045 106598281 59287321 98277647 Очистка EEPROM полностью 2 AVR 140591762 if ( if ( ) { uint16_t address_ ) { uint16_t address_ 161484652 ; while (address_ ; while (address_ < EEPROM.length()) { EEPROM.write(address_ < EEPROM. length ()) { EEPROM. write (address_ , 255); address_ , 255); address_ ++; } EEPROM.commit(); } ++; } EEPROM.commit(); } 149266739 Стирать EEPROM полностью ESP 101748463 218869221 199870406 101636772 32789002 40566683 73455527 Очистка EEPROM полностью 2 ESP 170119884 if ( if ( ) { for (int i ) { for ( int i 116482796 = = 168699306 203904128 Начало 228945140 Стирать EEPROM полностью 245104766 94105719 137258861 138907422 Начало ; i ; i <= <= 194055850 91681254 Конец Конец ; i ; i ++) { EEPROM.update(i ++) { EEPROM.update(i , 255); } } , 255); } } 264703876 Стирать EEPROM частично AVR 131516612 78499937 248835230 55748125 30989213 86028242 27395224 Очистка EEPROM частично 2 AVR 88193276 if ( if ( ) { for (int i ) { for ( int i 232643724 = = ; i ; i <= <= ; i ; i ++) { EEPROM.write(i ++) { EEPROM. write (i , 255); } EEPROM.commit(); } , 255); } EEPROM.commit(); } 25069797 Стирать EEPROM частично ESP 235345858 205337374 36824453 194753119 178954179 168266746 165420836 Очистка EEPROM частично 2 ESP 43854354 186522056 158747588 206855166 6664374 56479679 44546766 178812658 39198396 30317279 115371404 199860090 59218657 69564685 Блок для очистки EEPROM Параметры: Стирать EEPROM полностью - стираем все! Иначе по конкретным адресам Входы: Стереть - По переднему фронту стираем EEPROM, использовать через RTrig Начало - Адрес для начала Конец - Адрес для конца AlexCrane, 2021 249 37068417 97670304 236541332 11566083 107674261 68478271 79313981 111571702 167932572 1859785 8138227 107203327 Оптимизация 60601717 230662729 MainParametrs 230662729 CommonCode 66762652 41359481 MainParametrs_41359481 54000992 70973642 41359481-MainCode 41359481-InstanceCode 188907757-Loop 173396789 46169716 1878015 MainParametrs_1878015 216016652 1878015-MainCode 1878015-InstanceCode 243812165-Loop 83341474 55640830 97670304 MainParametrs_97670304 97670304-MainCode 0@-252 0@0 0@0 0@0 0@0 0@0 0@0 0@0 0@0 0@0 0@0 64822993 0@0 13496329 0@0 0@0 34967089 0@0 0@0 104289061 0@0 51530722 0@0 47725160 0@0 0@0 0@0 0@0 0@0 0@0 0@0 0@0 2247046 0@0 0@0 0@0 172940831 0@0 123659554 0@0 0@0 0@0 0@0 101964836 0@0 -22@0 0@0 30149340 0@0 0@0 0@0 0@0 0@0 0@0 47282309 0@0 79017893 0@0 0@0 54494786 0@0 191552070 0@0 6002861 0@0 260149883 493 423@172 corner: 1447@852