Создание boards.txt для новой платы

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

В общем, выкладывал в своей теме boards.txt:

##-- описание новых пунктов меню - в самое начало файла boards.txt:
menu.BOARD=board subtype
menu.cpu=Processor
menu.clock=Clock cpu/board
menu.BOD=BOD
menu.LTO=Compiler LTO
menu.BOOT=BOOT options
##-- собственно сборка для всех "мег" совместимой серии:

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

megaAll.name=*** ATmega640/1280/1281/2560/2561 ***

###--- common settings for all boards and MCU ---###
megaAll.upload.tool=avrdude
megaAll.upload.speed=115200
megaAll.upload.protocol=wiring

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

megaAll.build.core=arduino

##--- board selector submenu ---##
megaAll.menu.BOARD.arduino2560=Arduino Mega 2560 (common)
megaAll.menu.BOARD.arduino2560.upload.maximum_data_size=8192
megaAll.menu.BOARD.arduino2560.build.variant=mega
megaAll.menu.BOARD.arduino2560.build.board=AVR_MEGA2560

megaAll.menu.BOARD.megaADK=Arduino Mega ADK
megaAll.menu.BOARD.megaADK.upload.maximum_data_size=8192
megaAll.menu.BOARD.megaADK.variant=mega
megaAll.menu.BOARD.megaADK.build.board=AVR_ADK

megaAll.menu.BOARD.esram32=with ext.SRAM 32 kbytes
megaAll.menu.BOARD.esram32.upload.maximum_data_size=32256
megaAll.menu.BOARD.esram32.variant=mega
megaAll.menu.BOARD.esram32.compiler.c.elf.extra_flags={compiler.c.elf.extra_flags} -Wl,--defsym=__heap_start=0x802200,--defsym=__heap_end=0x807fff

megaAll.menu.BOARD.esram64=with ext.SRAM 64 kbytes
megaAll.menu.BOARD.esram64.upload.maximum_data_size=65024
megaAll.menu.BOARD.esram64.variant=mega
megaAll.menu.BOARD.esram64.compiler.c.elf.extra_flags={compiler.c.elf.extra_flags} -Wl,--defsym=__heap_start=0x802200,--defsym=__heap_end=0x80ffff

megaAll.menu.BOARD.esram5=MYPK-xxx with ext.SRAM 512kbytes
megaAll.menu.BOARD.esram5.upload.maximum_data_size=32256
megaAll.menu.BOARD.esram5.variant=sram
megaAll.menu.BOARD.esram5.build.board=AVR_MEGA2560
megaAll.menu.BOARD.esram5.compiler.c.elf.extra_flags={compiler.c.elf.extra_flags} -T{build.variant.path}/avr6.x -Wl,--defsym=__heap_start=0x802200,--defsym=__heap_end=0x807fff

##--- CPU submenu ---
megaAll.menu.cpu.atmega2560=ATmega2560
megaAll.menu.cpu.atmega2560.build.mcu=atmega2560
megaAll.menu.cpu.atmega2560.build.core=arduino
megaAll.menu.cpu.atmega2560.build.board=AVR_ATmega2560
megaAll.menu.cpu.atmega2560.BOOT.stk500v2.upload.maximum_size=258048
megaAll.menu.cpu.atmega2560.BOOT.optiboot.upload.maximum_size=261120

# special for 1280 arduino loader
megaAll.menu.cpu.atmega1280=ATmega1280
megaAll.menu.cpu.atmega1280.build.mcu=atmega1280
megaAll.menu.cpu.atmega1280.BOARD.mega2560.build.board=AVR_MEGA
megaAll.menu.cpu.atmega1280.BOOT.1280spec=mega1280 arduino bootloader
megaAll.menu.cpu.atmega1280.BOOT.1280spec.bootloader.high_fuses=0xDA
megaAll.menu.cpu.atmega1280.BOOT.1280spec.bootloader.file=atmega/ATmegaBOOT_168_atmega1280.hex
megaAll.menu.cpu.atmega1280.BOOT.1280spec.upload.speed=57600
megaAll.menu.cpu.atmega1280.BOOT.1280spec.maximum_size=126976
megaAll.menu.cpu.atmega1280.BOOT.stk500v2.maximum_size=126976
megaAll.menu.cpu.atmega1280.BOOT.optiboot.maximum_size=130048

megaAll.menu.cpu.atmega640=ATmega640
megaAll.menu.cpu.atmega640.build.mcu=atmega640
megaAll.menu.cpu.atmega640.build.core=MegaCore
megaAll.menu.cpu.atmega640.build.variant=standard
megaAll.menu.cpu.atmega640.build.board=AVR_ATmega640
megaAll.menu.cpu.atmega640.BOOT.stk500v2.upload.maximum_size=61440
megaAll.menu.cpu.atmega640.BOOT.optiboot.upload.maximum_size=64512

megaAll.menu.cpu.atmega2561=ATmega2561
megaAll.menu.cpu.atmega2561.build.mcu=atmega2561
megaAll.menu.cpu.atmega2561.build.core=MegaCore
megaAll.menu.cpu.atmega2561.build.variant=standard
megaAll.menu.cpu.atmega2561.build.board=AVR_ATmega2561
megaAll.menu.cpu.atmega2561.BOOT.stk500v2.upload.maximum_size=258048
megaAll.menu.cpu.atmega2561.BOOT.optiboot.upload.maximum_size=261120

megaAll.menu.cpu.atmega1281=ATmega1281
megaAll.menu.cpu.atmega1281.build.mcu=atmega1281
megaAll.menu.cpu.atmega1281.build.core=MegaCore
megaAll.menu.cpu.atmega1281.build.variant=standard
megaAll.menu.cpu.atmega1281.build.board=AVR_ATmega1281
megaAll.menu.cpu.atmega1281.BOOT.stk500v2.maximum_size=126976
megaAll.menu.cpu.atmega1281.BOOT.optiboot.maximum_size=130048

##--- CLOCK submenu ---##
# low fuse bits:
# bit7   -- CKDIV8 ==0 divider 1/8 is ON!
# bit6   -- CKOUT  ==0 CLKO is worked to output!
# bit5,4 -- SUT1,0: power on reset timing
# bit3,2,1,0 -- CKSEL3:0:
# -----------------------
# 0xF8..0xFF -- Low power external oscilator
# 0xF6..0xF7 -- Full swing external oscilator
# 0xF4..0xF5 -- Low frequency etxernal oscilator
# 0xF3       -- Internal 128kHz oscilator
# 0xF2       -- Calibrated internal oscilator (8Mhz)
# 0xF0       -- external clock no oscilator
#

megaAll.menu.clock.20ext=20 MHz external
megaAll.menu.clock.20ext.build.f_cpu=20000000L
megaAll.menu.clock.20ext.bootloader.low_fuses=0xf7

megaAll.menu.clock.18ext=18.432 MHz external
megaAll.menu.clock.18ext.build.f_cpu=18432000L
megaAll.menu.clock.18ext.bootloader.low_fuses=0xf7

megaAll.menu.clock.16ext=16 MHz external
megaAll.menu.clock.16ext.build.f_cpu=16000000L
megaAll.menu.clock.16ext.bootloader.low_fuses=0xf7

megaAll.menu.clock.12ext=12 MHz external
megaAll.menu.clock.12ext.build.f_cpu=12000000L
megaAll.menu.clock.12ext.bootloader.low_fuses=0xf7

megaAll.menu.clock.8ext=8 MHz external
megaAll.menu.clock.8ext.build.f_cpu=8000000L
megaAll.menu.clock.8ext.bootloader.low_fuses=0xf7

megaAll.menu.clock.int8=internal 8 MHz
megaAll.menu.clock.int8.build.f_cpu=8000000L
megaAll.menu.clock.int8.bootloader.low_fuses=0xE2

megaAll.menu.clock.int1M=internal 1 MHz
megaAll.menu.clock.int1M.build.f_cpu=1000000L
megaAll.menu.clock.int1M.bootloader.low_fuses=0x62

megaAll.menu.clock.128k=internal 128kHz
megaAll.menu.clock.128k.build.f_cpu=128000L
megaAll.menu.clock.128k.bootloader.low_fuses=0x62

##--- BOD Level submenu ---##
# extended fuse bits only this works:

megaAll.menu.BOD.dis=Disabled
megaAll.menu.BOD.dis.bootloader.extended_fuses=0xff
megaAll.menu.BOD.1v8=1.8v (4Mhz)
megaAll.menu.BOD.1v8.bootloader.extended_fuses=0xfe
megaAll.menu.BOD.2v7=2.7v (8Mhz)
megaAll.menu.BOD.2v7.bootloader.extended_fuses=0xfd
megaAll.menu.BOD.4v3=4.3v (16Mhz)
megaAll.menu.BOD.4v3.bootloader.extended_fuses=0xfc

##--- LTO submenu ---##
# Compiler link time optimization
megaAll.menu.LTO.Os=Disabled
megaAll.menu.LTO.Os.compiler.c.extra_flags=
megaAll.menu.LTO.Os.compiler.c.elf.extra_flags=
megaAll.menu.LTO.Os.compiler.cpp.extra_flags=
megaAll.menu.LTO.Os.ltoarcmd=avr-ar

megaAll.menu.LTO.Os_flto=Enabled
megaAll.menu.LTO.Os_flto.compiler.c.extra_flags=-Wextra -flto
megaAll.menu.LTO.Os_flto.compiler.c.elf.extra_flags=-w -flto
megaAll.menu.LTO.Os_flto.compiler.cpp.extra_flags=-Wextra -flto
megaAll.menu.LTO.Os_flto.ltoarcmd=avr-gcc-ar

##--- BOOT submenu ---##
# High fuse bits this:
# bit7   -- OCDEN   -- ?!?
# bit6   -- JTAGEN  -- JTAG debugging is enable?
# bit5   -- SPIEN   -- SPI loading is enable?
# bit4   -- WDTON   -- watchdog is on always?
# bit3   -- EESAVE  -- protected EEPROM for erase?
# bit2,1 -- BOOTSZ  -- size for bootloader: 00-4096b, 01-2048b, 10-1024b, 11-512b
# bit0   -- BOOTRST -- from where reset start

# only SPI + bootsector=4096
megaAll.menu.BOOT.stk500v2=stk500v2
megaAll.menu.BOOT.stk500v2.bootloader.high_fuses=0xD8
megaAll.menu.BOOT.stk500v2.bootloader.file=stk500v2/stk500boot_v2_mega2560.hex

# optiboot in 1024 sector
megaAll.menu.BOOT.optiboot=Optiboot in 1024 bytes
megaAll.menu.BOOT.optiboot.bootloader.high_fuses=0xD6
megaAll.menu.BOOT.optiboot.bootloader.file=optiboot_flash_256kb/{build.mcu}/optiboot_flash_{build.mcu}_{upload.speed}_{build.f_cpu}.hex

Как выяснилось, он если и работает то как-то "не так" как ожидалось..

В меню, при выборе платы - всё кучеряво: новые опции появляются, все что надо выбирается и если запустить "компиляцию" (прошивку ещё не трогал) то при полном показе сообщений вроде как даже "работает": выбранные опции частоты - передаются в компилятор верно, тип процессоров указывается тоже верно, в опциях json перечисленные опции тоже вроде как разбираются правильно.

Нашел небольшой косяк (тут он есть тоже) из-за которого не работают доп. опции линковщику от "подтипа платы" c.elf.extra_flags - они сдублированы в подменю LTO и тупо перекрывались им. Закомментаривание подменю LTO (и рекурсии в переменной) решает проблему и запускает эти доп. опции тоже вполне нормально.

Сами опции блока LTO тут не рабочие, и тоже нашел почему - по умолчанию оно включено в опциях компилятора. Надо отключать в platform.txt как это сделано у MegaCore. В общем-то этот файл писался по их образцу с творческой переработкой. :) Надо было и platform.txt тырить от них жеж...

Но ..

1. если включено агрессивное кеширование ядра, то .. библиотека не компилируется вовсе и сборка вылетает с ошибкой "отстутствует точка входа main" что понятно - она в библиотеке..

2. Ни в одном режиме или комплекте опций "компиляция" не идет дальше сборки проекта через objcopy. HEX-файл выдается нормально, сообщений об ошибке нет, но на этом все и заканчивается. Сообщений об используемой памяти нет ..

Кто-то может посмотреть что не так? Не могу понять в чем дело и куда копать. Переключаешься на любую плату и .. все идет как надо: компиляция библиотек, вывод итого .. переключаешься обратно и фиг-то там.. только отключать опцию агрессивного кеширования.

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

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Никто не знает, чего там творит ИДЕ, прочитав боардс? Как-то опять, что ни спроси в ответ тишина...

В общем, сравнил platform.txt от версии 1.8.2 (от версии 1.8.5 не сохранил) и от MegaCore .. отличий миниум и они все в общем-то несущественны. У Мегакоре тупо отключены опции -flto во всех параметрах и включаются в boards.txt ..

Перенес подменю LTO в своем boards "вперед" .. результат тот же самый. Библиотеки не компиляет, а потом матерится на отсутствие main .. точнее компиляет только одну pulse.c почему-то..

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ха! Таки нашел в чем проблема и как её обойти. В общем можно делать такие комбинированные менюшки для выбора параметров платки "по желанию".. (можно собрать все 328-е платы аналогично).