Расширить пространство программы, избавившись от загрузчика на NANO

У меня просто есть сложная программа, которая работает на НАНО. Теперь, когда я использую свои printlns для отладки, у меня заканчивается память.

Я читал об использовании программатора, чтобы избавиться от загрузчика, который использует пространство 2K на NANO. Я купил USBtinyISP и заставил его успешно работать... почти я могу запрограммировать nano так, как хотел, но я не получаю никакого дополнительного пространства.

При программировании с помощью debug printlns я сталкиваюсь с тем же сообщением, что и раньше, в котором указано то же максимальное пространство внутри (я думаю, это было 30700).

Почему это так? Я думал, что загрузчик переопределяется при использовании программатора и таким образом освобождает 2K программируемого пространства.

Обратите внимание: я не спрашиваю, как оптимизировать мой программный код! Спасибо, что обратили внимание ;)

Большое вам спасибо.

, 👍3

Обсуждение

"Новый загрузчик" имеет всего 0,5 КБ, но arduino не изменил nano.menu.cpu.atmega328.upload.maximum_size, @Juraj

Когда я попаду в space crunch, я сделаю код на mega, а затем, когда он будет отлажен, уменьшу его до nano. Не идеальный ответ, но вполне осуществимый., @Gil


1 ответ


Лучший ответ:

6

Он применяет эту строку из arduino: avr boards.txt

nano.menu.cpu.atmega328.upload.maximum_size=30720

Чтобы было ясно, предполагается, что плата имеет загрузчик, даже если вы не используете его для загрузки кода на плату, то есть загрузки через программатор.

Вы могли бы отредактировать его и сами поменять некоторые предохранители. Но вы также можете просто использовать MCUdude MiniCore, выбрав опцию, которая не использует загрузчик, например ATmega328P без загрузчика, что дает вам максимальную загрузку 32768:

328.menu.bootloader.no_bootloader.upload.maximum_size=32768

Имейте в виду, что в любом случае вам нужно будет установить предохранители для отсутствия загрузчика. Как бы странно это ни звучало, выбор опции No Bootloader в MCUdude MiniCore для ATmega328P, а затем выполнение Burn Bootloader устанавливает эти предохранители для вас, несмотря на то, что в этом случае имя фактически не сжигает загрузчик. Если бы вы изменили максимальный размер загрузки для платы Nano, вам нужно было бы вручную установить предохранители аналогично тому, что делает Burn "Bootloader" для MiniCore ATmega328P с опцией No-bootlader.

,

Большое вам спасибо! Только что попробовал свой первый пункт, который сработал как по волшебству! Сэкономил мне кучу времени, я должен тебе пиво!, @MrNats86

Дополнительная информация: Поскольку у меня была переустановка моей системы, мне также пришлось перенастроить boards.txt . Я наткнулся на этот блог, в котором довольно хорошо объясняются предохранители: http://www.martyncurrey.com/arduino-atmega-328p-fuse-settings/, @MrNats86

Я бы на вашем месте предпочел ознакомиться с таблицей данных, а не с этим. Во-первых, в нем говорится: "Я полагаю, что RSTDISBL реализован по соображениям безопасности, чтобы остановить перепрограммирование чипа или загрузку прошивки". Нет, не совсем, для этого есть и другие возможности. RSTDISBL существует в основном для того, чтобы позволить этому контакту функционировать как обычному GPIO. В любом случае, прочтите техническое описание для получения более точных описаний., @timemage