Doob 2 749 Опубликовано: 2 января, 2021 Иногда надо уместить программу на EEPROM, но она никак не хочет туда влезать. Есть решение - карта данных любого уровня, может упаковывать и распаковывать программу, а код распаковки не занимает много места. Благодаря алгоритму Deflate теперь есть где развернуться. Я наконец-то смог запрессовать свою копалку, даже без оптимизации кода, и еще свободное место осталось. Требования: Data-card любого уровня. Интернет карта для установки программы. Установка: pastebin run KThbTuZr или wget https://raw.githubusercontent.com/zgyr/bpacker/master/installer.lua && installer && rm installer.lua или oppm register OpenPrograms/zgyr-Programs oppm install bpacker Использование: bpacker [опции] <имя файла> Опции: -q тихий режим, не показываются статусные сообщения -m минификация кода перед упаковкой (работает не всегда) -l использовать алгоритм lzss (Data card не требуется) -h справка Программа сожмет указанный файл и запишет на EEPROM. Код должен быть адаптирован для работы без OpenOS. TODO: Сделать упаковщик немного умнее. (сейчас код распаковки захардкожен, занимает лишние байты и может не работать в очень редких случаях) Улучшить минификатор. (он лучший среди Lua-минификаторов, но иногда ломает код) Ссылки: Github программы. Github минификатора. 9 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Bs0Dd 206 Опубликовано: 3 января, 2021 (изменено) Ого, стоило мне подумать про возможность упаковки программы и распаковки перед запуском, как тут-же нашелся человек, который это сделал. Возможно так получится уместить мой кодовый замок, надо попробовать. ------ Да, с 15,2кб программу ужало до 3,4кб без использования минификации Изменено 3 января, 2021 пользователем Bs0Dd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 749 Опубликовано: 3 января, 2021 Сделал тесты потребления памяти. Тест1: ожидание высвобождения памяти и вывод результата. Тест2: вывод потребляемой памяти без сборки мусора, в качестве нагрузки - несжимаемый комментарий. Тест3: тоже, но со сборкой мусора. Для высвобождения памяти можно использовать такой код for i = 0, 9 do computer.pullSignal(2) end Но тут нужны сигналы, для микроконтроллеров такое не всегда подходит. Если программа работает с сигналами, то память высвободится в процессе работы. Для пробного вывода потребления памяти можно делать так. error('Memory used: ' .. computer.totalMemory()-computer.freeMemory(), 0) Тесты показывают, что можно даже на одной памяти первого уровня (192 KiB) спокойно запускать очень сложные программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 749 Опубликовано: 7 января, 2021 Добавил алгоритм LZSS. Используется код распаковщика от @BrightYC Жмет намного хуже, но зато не требует карту данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Bs0Dd 206 Опубликовано: 7 января, 2021 Увы, инсталлер не проверяет наличие файлов на машине и при обновлении можно получить ахтунг в виде ругани и не обновившихся файлов Поэтому лучше все же добавить проверки, дабы избежать неприятностей fs = require('filesystem') if not fs.exists('/usr/bin') then fs.makeDirectory('/usr/bin') end if not fs.exists('/usr/lib') then fs.makeDirectory('/usr/lib') end if fs.exists('/usr/lib/lzss.lua') then fs.remove('/usr/lib/lzss.lua') end os.execute('wget https://raw.githubusercontent.com/BrightYC/Other/master/lzss.lua /usr/lib/lzss.lua') if fs.exists('/usr/bin/bpacker.lua') then fs.remove('/usr/bin/bpacker.lua') end os.execute('wget https://raw.githubusercontent.com/zgyr/bpacker/master/bpacker.lua /usr/bin/bpacker.lua') if fs.exists('/usr/bin/minify.lua') then fs.remove('/usr/bin/minify.lua') end os.execute('wget https://raw.githubusercontent.com/stravant/lua-minify/master/minify.lua /usr/bin/minify.lua') Ну и я бы все же дописал, что метод с LZSS требует перевести процессор в режим Lua 5.3, иначе, ахтунг с подгрузкой библиотеки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 749 Опубликовано: 8 января, 2021 Ок, сделано. Я думал, что давно уже процессоры по дефолту работают на 5.3. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 27 января, 2022 че за зашита от копирования чипа? у меня это работает имменно так, я скопировал код из чита и прошил обратно и прошивка стала падать с ошибкой load function exended is nil как то так(я не селен в англиском) чек суммы файлов одинаковые нечего не поменялось толком, но после перепрошивки нечего не работает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах