Перейти к содержанию
    

Исправление линкера XC16 v1.26 и ниже при попытке использования последнего слова во flash

При попытке компиляции проекта с размещением массива/структуры такого вида в последней странице flash (для эмуляции EEPROM):

__attribute__((space(prog),page,address(__PROGRAM_BASE + __PROGRAM_LENGTH - (_FLASH_PAGE * 2)),noload,keep,section(".eeprom"))) union {
        int bin[_FLASH_PAGE -1];// -1 need to avoid linker error "absolute section crosses the boundary of region program"
} last_flash_page_cal_data;

линкеры coff-ld.exe и elf-ld.exe "падают".

 

Покопавшись отладчиком, я обнаружил, что проблема в опечатке в следующей строке формата fprintf в линкере:

"/n Could not use block at address %d and of size % to locate section %s because this will lead to having executable code  at the last word of program memory./n"

здесь пропущен символ 'u' после знака '%', т.о. получается нарушение соответствия формата аргументам fprinf.

Вот патч для исправления виндового линкера v1.26:

coff-ld.exe
0006F666: 20 75;change '% ' to '%u'

elf-ld.exe
00089D32: 20 75;change '% ' to '%u'

Но более старые версии XC16, и версии под другие ОС тоже содержат эту ошибку.

Также прилагаю продвинутую автопатчилку, которая вставляет символ 'u', а не заменяет им пробел.

Под виндой патчилка должна сама находить посл. установленную версию XC16.

Под Linux-ом можно запускать с помощью WINE. Но каталог с линкерами (coff-ld и elf-ld) придётся указать руками. И про write permissions не забудьте.

Или можно пропатчить линуксовые coff-ld и elf-ld на компе с виндой.

С MacOS не тестировал.

xc16linker_bugfix2.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...