РЕШЕНО Как сказать компилятору что памяти хватает ?

Тема в разделе "Arduino & Shields", создана пользователем Ariadna-on-Line, 6 июл 2021.

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Процессор ATmega128A. Подключена внешняя SRAM 64КБ. Платформа MegaCore - установлена. Компилятор ругается что прога требует для буфера данных больше 4КБ (внутреннее ОЗУ). Как компилятору сказать что в наличии есть намного больше. Прошу ответить - конкретную строчку текста и куда ее вставить ? Именно в среде Ардуино ИДЕ. С Уважением.

    ПС. Возможно кому пригодится, если захочет свою Ардуину на АТмеге128. -

    "...Что касается схемотехники - В роли регистра адреса лучше использовать 74HCT574(четыре !). Надо ввести в схему цепи задержки сигналов ALE, #WR и #RD относительно сигналов адреса/данных. В роли задержки - пара инверторов. Два инвертора - повторитель. Шесть инверторов из микры (напр. 74HCT04) как раз то что требуется. Без них Протеус показывает лажу. В данном случае он не врет, логически все верно. Полагаться на супер-пупер быстродействие регистра адреса и микры памяти - опрометчивое дело. Выставил в настройках проца задержки по максимуму - оказалось недостаточно. Даташит предупреждает об этом же..."
     
    Последнее редактирование: 6 июл 2021
  2. Asper Daffy

    Asper Daffy Иксперд

    Что-то как-то на тон приказа смахивает. А если я скажу строка №27 - устроит? Конкретно ведь

    Открываете файл <где там стоит IDE>\hardware\arduino\avr\boards.txt

    Ищете там описание своей платы (можно и новую создать, скопируйте с какой-то похожей и поменяйте имя). Описание, например, для UNO выглядит вот так

    Код (C++):
    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
    Про память строки maximum_size и maximum_data. Заодно и остальное посмотрите.

    Если будете создавать новую, меняйте ВСЕ префиксы "uno." и название в строке name= - будет у Вас совсем новая плата
     
  3. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Неа. Наоборот - просьба ответить так, чтоб даже детсадовец понял какой текст, куда вписать и какую кнопку нажать. Иначе - неминуемое и ненужное разбухание диалога.
    2. Платформу MegaCore устанавливал недавно "штатным способом". В папке, где вы указали, есть два файла - старый boards.txt и новый - boards.txt0. . В новом - есть блок для 128го. Строчки upload.maximum_data_size нет совсем.
    Не рискую пока ничего менять, чтоб не запороть ИДЕ (уже было такое). Предлагаете вписать строчку и/или переименовать файл в boards.txt ?
    3. В текущем состоянии компилятор ругается про 4КБ памяти SRAM.
    Код (C++):

    ###############################################################

    atmega128A.name=Custom ATmega 128 Breakout Board using AVRISP
    atmega128A.upload.tool=usbasp
    atmega128A.upload.maximum_size=126976
    atmega128A.bootloader.low_fuses=0xFF
    atmega128A.bootloader.high_fuses=0xCA
    atmega128A.bootloader.extended_fuses=0xFF
    atmega128A.bootloader.path=atmega
    atmega128A.bootloader.file=boot_mega128.hex
    atmega128A.bootloader.unlock_bits=0x3F
    atmega128A.bootloader.lock_bits=0x0F
    atmega128A.build.mcu=atmega128
    atmega128A.build.f_cpu=16000000L
    atmega128A.build.core=arduino
    atmega128A.build.variant=mega128
    5. Прежний файл boards.txt - раздела для 128го не содержит.
    6.. Как прятать здесь на сайте код под "Кат" ?
     
    Последнее редактирование: 7 июл 2021
  4. Asper Daffy

    Asper Daffy Иксперд

    Я в этом виноват?
    Ну, тогда живите с тем, что есть и не жалуйтесь.
     
  5. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Не - вы не виноваты и я не жалуюсь - это лишь для "профессионального роста в Ардуинщине". Ладно - рискнул пошурудить в ИДЕ. Имеем следующее -
    1. Если в файл boards.txt0 вписать строку - atmega128A.upload.maximum_data_size=65536 и перезапустить ИДЕ - компилятор продолжает ругаться на превышение размера над 4096 байт.
    2. Если boards.txt переименовать в boards_back.old, а boards.txt0 - в boards.txt - и перезапустить ИДЕ - тоже ничего не меняется. Компилятор продолжает ту же песню.
    3. Обращение к "дальним" адресам внешней памяти изнутри программы - все ОК. Пишутся и читаются.
    ПС. Возможно это просто информационный файл и влияния на внутреннюю работу ИДЕ он не оказывает.
    -
     
    Последнее редактирование: 7 июл 2021
  6. Feofan

    Feofan Нерд

    Попробовал, установил MegaCore из https://mcudude.github.io/MegaCore/package_MCUdude_MegaCore_index.json
    Кусок файла C:\Users\<user_name>\Local Settings\Arduino15\packages\MegaCore\hardware\avr\2.1.3\boards.txt
    Изменил строку maximum_data_size=4096:

    #####################
    #### ATmega128/A ####
    #####################

    # General
    128.name=ATmega128
    128.upload.tool=avrdude
    #128.upload.maximum_data_size=4096
    128.upload.maximum_data_size=65535


    Результат:
    Sketch uses 1268 bytes (0%) of program storage space. Maximum is 130048 bytes.
    Global variables use 9 bytes (0%) of dynamic memory, leaving 65526 bytes for local variables. Maximum is 65535 bytes.
     
    Ariadna-on-Line нравится это.
  7. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Оёёё. Оказывается Ардуино ИДЕ еще куда-то сует свои куски, кроме собственной папки. Я и не знал. Пошел по вашему следу - Путь оказался немного другой - C:\Users\<user_name>\App Data\Local\Arduino15\packages\MegaCore\hardware\avr\2.1.3\boards.txt
    Изменил на 128.upload.maximum_data_size=65536. Компильнул - получил то же что и у вас.
    Global variables use 9 bytes (0%) of dynamic memory, leaving 65526 bytes for local variables. Maximum is 65536 bytes. Тему можно закрывать.
    Как говорил доктор Сарториус - "человеку нужен человек". А уж какой проц изучать - дело вкуса, баловство одним словом.
     
    Последнее редактирование: 7 июл 2021
  8. Feofan

    Feofan Нерд

    C:\Users\<user_name>\Local Settings это просто ярлык/shortcut на C:\Users\<user_name>\AppData\Local. Так что в итоге попадаем в одно и то же место.
     
  9. Рокки1945

    Рокки1945 Гуру

    Когда Каспарова спросили - почему он проиграл суперкомпьютеру - он ничего не ответил - но ИМХО - если бы у него было больше времени на принятие решения то он бы его обыграл...