Почему в Arduino Pro Mini указано меньше памяти?

forfrends
Offline
Зарегистрирован: 24.02.2015

Всем привет! В создании одного проекта я столкнулся с весьма неожиданным "подводным камнем". Изначально проект тестировался на Ардуино Уно, так как на ней было проще сделать отладку, но конечный проект будет компиллироваться для 8-ми МГц Ардуино про мини (Atmega 328P).

При компиллировании для UNO получаю следующее:

Скетч использует 31204 байт (96%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 939 байт (45%) динамической памяти, оставляя 1109 байт для локальных переменных. Максимум: 2048 байт.

Много места занимают Битмапы. 31204 байт (96%) памяти устройства. Всего доступно 32256 байт.

При попытке компиллирования этого же скетча для Ардуино про мини получаем:

Скетч использует 31204 байт (101%) памяти устройства. Всего доступно 30720 байт.text section exceeds available space in board

Глобальные переменные используют 939 байт (45%) динамической памяти, оставляя 1109 байт для локальных переменных. Максимум: 2048 байт.
Скетч слишком большой; прочитайте http://www.arduino.cc/en/Guide/Troubleshooting#size
Ошибка компиляции для платы Arduino Pro or Pro Mini.

То есть, скетч занимает все те же 31204 байт, А вот с памятью что-то не то: Всего доступно 30720 байт. Куда делись 1536 байт???? Как это можно исправить?

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, это же Мини - что от него требовать?

P.S. Про Optiboot слышал что-нить?

b707
Offline
Зарегистрирован: 26.05.2017

в этих платах одинаковое число программной памяти - 32768 байт. просто, кроме вашего скетча, в этой же памяти лежит загрузчик, который помогает вам прошивать плату через USB. Размер этого загрузчика в Уно и про мини разный. поэтому и свободной памяти после него оставется разное число байт.

Решение простое - прописать в про мини загрузчик меньшего обьема, например оптибут. Или вообще обойтись без него (но тогда ардуину надо будет прошивать через программатор)

forfrends
Offline
Зарегистрирован: 24.02.2015

sadman41 пишет:
Ну, это же Мини - что от него требовать?

И в Ардуино Про Мини и в UNO используется один и тот же микроконтроллер: Atmega328, с 32К памяти.

b707 пишет:
 просто, кроме вашего скетча, в этой же памяти лежит загрузчик

А в Uno тоже есть загрузчик. Загрузчик везде должен быть одинаков: 500 байт. В уно как раз и получается: 32768 - 32256 = 512

А вот с Про мини (вместе с загрузчиком) теряется не 512 байт а 2 Кило байта!

И это не зависимо от того что на самом деле "зашито" в МК. Я использую "голые" Atmega328P, прошиваю их программатором. Загрузчик мне вообще не нужен. По этому после компиляции проекта я беру hex-файл без загрузчика (Ардуино Иде создает два файла прошивки, с загрузчиком и без). 

Вопрос в том как решить прблему с тем что Ардуино Иде изначально пишет что у МК гораздо меньше памяти и не компиллирует проект нормально?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

forfrends пишет:

Загрузчик везде должен быть одинаков: 500 байт. В уно как раз и получается: 32768 - 32256 = 512

А вот с Про мини (вместе с загрузчиком) теряется не 512 байт а 2 Кило байта!

Никому он ничего не должен. В нано и про мини зашит другой загрузчик, нежели в уно

sadman41
Offline
Зарегистрирован: 19.10.2016

Откуда вы такие безапелляционные приходите - от гайвера что ли? Загрузчик всегда был жирным в Ардуине. И только когда начали тудыть оптибут лить - он стал потоньше. Выбери Уно, скомпилируй и залей через ICSP-программатор в Миньку, если другое лень делать - МК-то одинаковые.

b707
Offline
Зарегистрирован: 26.05.2017

forfrends пишет:

Я использую "голые" Atmega328P, прошиваю их программатором. Загрузчик мне вообще не нужен. По этому после компиляции проекта я беру hex-файл без загрузчика (Ардуино Иде создает два файла прошивки, с загрузчиком и без). 

Вопрос в том как решить прблему с тем что Ардуино Иде изначально пишет что у МК гораздо меньше памяти и не компиллирует проект нормально?

Вопрос в другом - если вы используете голые МК - какого же лешего вы выбираете в Ардуино ИДЕ плату "Про мини"?  Создайте в меню Адуино ИДЕ запись для "голого контроллера", пропишите в нем обьем памяти 32768 байт - и ИДЕ не будет ругаться.

А уж как это сделать - разберитесь, давйте-ка, сами! Задолбали новички, которым все подробно обьясняешь - а они нифига не зная начинают еще и спорить. решайте ее сами.

svm
Offline
Зарегистрирован: 06.11.2016

b707 пишет:

Вопрос в другом - если вы используете голые МК - какого же лешего вы выбираете в Ардуино ИДЕ плату "Про мини"?  Создайте в меню Адуино ИДЕ запись для "голого контроллера", пропишите в нем обьем памяти 32768 байт - и ИДЕ не будет ругаться.

Ну или записать в про мини загрузчик от наны, и станет она наной.

Green
Offline
Зарегистрирован: 01.10.2015

Дак он и так прошивает программатором, куда уж меньше! Просто сообщение компилятора о 101% у человека выносит последний мозг.)))

forfrends
Offline
Зарегистрирован: 24.02.2015

Green пишет:

Дак он и так прошивает программатором, куда уж меньше! Просто сообщение компилятора о 101% у человека выносит последний мозг.)))

Это точно, именно эти 101% меня и смущают.

b707 пишет:

А уж как это сделать - разберитесь, давйте-ка, сами! Задолбали новички, которым все подробно обьясняешь - а они нифига не зная начинают еще и спорить. решайте ее сами.

А зачем тогда форум? Где же мне тогда спрашивать?

Ок. Я так понял есть какие-то настройки для конкретного камня. Посмотрел в файлах IDE. Это оно?

C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3\boards.txt

Вот установки для Uno:

uno.name=Arduino Uno

uno.vid.0=0x2341
uno.pid.0=0x0043
uno.vid.1=0x2341
uno.pid.1=0x0001
uno.vid.2=0x2A03
uno.pid.2=0x0043
uno.vid.3=0x2341
uno.pid.3=0x0243

uno.upload.tool=avrdude
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.maximum_data_size=2048
uno.upload.speed=115200

uno.bootloader.tool=avrdude
uno.bootloader.low_fuses=0xFF
uno.bootloader.high_fuses=0xDE
uno.bootloader.extended_fuses=0xFD
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.bootloader.file=optiboot/optiboot_atmega328.hex

uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.board=AVR_UNO
uno.build.core=arduino
uno.build.variant=standard

А вот установки для Arduino Pro Mini 8 Mhz:

pro.name=Arduino Pro or Pro Mini

pro.upload.tool=avrdude
pro.upload.protocol=arduino

pro.bootloader.tool=avrdude
pro.bootloader.unlock_bits=0x3F
pro.bootloader.lock_bits=0x0F

pro.build.board=AVR_PRO
pro.build.core=arduino
pro.build.variant=eightanaloginputs

## Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328P
## ---------------------------------------------------
pro.menu.cpu.8MHzatmega328=ATmega328P (3.3V, 8 MHz)

pro.menu.cpu.8MHzatmega328.upload.maximum_size=30720
pro.menu.cpu.8MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.8MHzatmega328.upload.speed=57600

pro.menu.cpu.8MHzatmega328.bootloader.low_fuses=0xFF
pro.menu.cpu.8MHzatmega328.bootloader.high_fuses=0xDA
pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=0xFD
pro.menu.cpu.8MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex

pro.menu.cpu.8MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.8MHzatmega328.build.f_cpu=8000000L

Подскажите, как правильно описать голый Камень Atmega328P +без использования бутлоадера (если это возможно) + с выбором частоты 8Mhz / 16Mhz / внутренняя RC цепочка ?

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

forfrends пишет:

Подскажите, как правильно описать голый Камень Atmega328P +без использования бутлоадера (если это возможно) + с выбором частоты 8Mhz / 16Mhz / внутренняя RC цепочка ?

скачай аддон miniCore, там у тебя всё будет и частоты любые и на внутреннем RC генераторе

forfrends
Offline
Зарегистрирован: 24.02.2015

О, спасибо! Попробую.

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

forfrends пишет:

О, спасибо! Попробую.

пробовать не надо, просто пользуй )))

b707
Offline
Зарегистрирован: 26.05.2017

forfrends пишет:

А зачем тогда форум? Где же мне тогда спрашивать?

если вы не знаете и пришли на форум спрашивать - нафига вы полезли спорить что "это точно  не загрузчик , загрузчики у всех ардуино одинаковы". Тут так - если хотите с гордым видом нести чушь - то и будьте достаточно горды, чтоб решить свою задачу сами.

Вообще, после того как вы нашли параметры в файле boards.txt - найти как их редактировать. справился бы уже каждый школьник. И не обязательно ставить для этого пакет MiniCore

Upper
Offline
Зарегистрирован: 23.06.2020

b707 пишет:

Вообще, после того как вы нашли параметры в файле boards.txt - найти как их редактировать. справился бы уже каждый школьник. И не обязательно ставить для этого пакет MiniCore

А вы сами можете отредактировав board.txt получить то, что хочет ТС - "правильно описать голый Камень Atmega328P +без использования бутлоадера (если это возможно) + с выбором частоты 8Mhz / 16Mhz / внутренняя RC цепочка ?". И если да, то уверены, что это сможет любой школьник?

 

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

В miniCore конфигурирование сделано красиво и, правильно, загрузчики скомпилированы под все предлагаемые частоты, эталон так сказать, для сравнения посмотрите к примеру ядро Гайвера

И лезть и править файл боард в IDE это костыль в чистом виде, не надо учить ТС плохому

b707
Offline
Зарегистрирован: 26.05.2017

Upper пишет:

А вы сами можете отредактировав board.txt получить то, что хочет ТС - "правильно описать голый Камень Atmega328P +без использования бутлоадера (если это возможно) + с выбором частоты 8Mhz / 16Mhz / внутренняя RC цепочка ?". И если да, то уверены, что это сможет любой школьник?

у меня в ардуино ИДЕ это настроено, причем настроено вручную. И сделал я это сам примерно через полгода после того как первый раз взял ардуино в руки.

ТС. как видно по регистрации - "увлекается ардуиной" с 2015 года... то есть примерно вдвое дольше, чем я :) поэтому я думаю, что он может с этим справится...  если захочет.

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

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

В miniCore конфигурирование сделано красиво и, правильно...

И лезть и править файл боард в IDE это костыль в чистом виде, не надо учить ТС плохому

Хочешь сказать, что в миникоре это сделано как-то принципиально иначе, чем правка текстового файла boards ? :)

forfrends
Offline
Зарегистрирован: 24.02.2015

Спасибо всем! То что нужно!

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

В miniCore конфигурирование сделано красиво и, правильно...

И лезть и править файл боард в IDE это костыль в чистом виде, не надо учить ТС плохому

Хочешь сказать, что в миникоре это сделано как-то принципиально иначе, чем правка текстового файла boards ? :)

а ты сам посмотри, недаром автор Гайвера попинал )))
PS там в файле, но подход иной...вот завтра выпустят 328 проц по 3 наномикронной технологии и как ты один гигагерц прикрутишь?  )))