Пытаюсь закинуть в заявленные 256к пару-тройку больших массивов:
#include <morepgmspace.h>
const uint16_t array1[] PROGMEM {0x0000,0x0000}; //размер меньше 0x7FFF
uint16_t i=0;
uint16_t aa = pgm_read_word_far (GET_FAR_ADDRESS(array1) + i);
Если размер кода+массивов меньше 64к - проблем нет. если в сумме больше, то возникают ошибки вида:
Спойлер
..\ccQVjUD5.s: Assembler messages:
..\ccQVjUD5.s:73286: Error: value of 71358 too large for field of 2 bytes at 95
..\ccQVjUD5.s:73290: Error: value of 71422 too large for field of 2 bytes at 103
..\ccQVjUD5.s:73291: Error: value of 70845 too large for field of 2 bytes at 105
..\ccQVjUD5.s:73293: Error: value of 71678 too large for field of 2 bytes at 109
lto-wrapper.exe: fatal error: ..\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-gcc returned 1 exit status
compilation terminated.
/…/arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/…/lib/gcc/avr/7.3.0/…/…/…/…/avr/bin/ld.exe: error: lto-wrapper failed
collect2.exe: error: ld returned 1 exit status
Курение интернетов дало информацию, что штатный компилятор сперва кладет PROGMEM константы и только потом код.
На гите нашел Megacore. С ним получилось нормально завершить процесс компиляции, но вот прошить мегу не получается (там очень много настроек, пока не смог подобрать нужное сочетание). Нужно получить подтверждение, что проблему стоковыми средствами не решить.
Тогда создам отдельную тему про настройки megacore.