#c #linker #embedded #firmware #xc32
#c #линкер #встроенный #прошивка #xc32
Вопрос:
Я использую компилятор Microchips XC32 C и инструменты для создания исполняемого файла для процессора SAM E70.
Я должен создать функцию, которая выполняется из оперативной памяти, а не из ПЗУ/флэш-памяти, потому что эта функция использует специальные инструкции для считывания уникальных 128 бит в начале флэш-памяти.
Поэтому я определил начало функции следующим образом:
__ramfunc__ void ReadUniqueID(uint32_t *pdwUniqueID) { uint32_t status; if (pdwUniqueID == NULL) return; printf("ReadUniqueID beginrn", pdwUniqueID[0]);
Согласно документации __ramfunc__
, предполагается, что функция выполняется из оперативной памяти.
Однако при связывании возникают следующие ошибки.
c:program filesmicrochipxc32v3.01binbin....libgccpic32c8.3.1........binbin/pic32c-ld.exe: Link Warning: attributes for input section '.RAMFUNC$.__stub' conflict with output section '.RAMFUNC
Любая помощь или указания будут высоко оценены.
Ответ №1:
Проблема оказалась в том, что я использовал printf() в функции "ramfunc". Удалил printf (), и все работает так, как ожидалось.
c:program filesmicrochipxc32v3.01binbin....libgccpic32c8.3.1........binbin/pic32c-ld.exe: section .text.Reset_Handler4 LMA [0044ba08,0044bb8b] overlaps section .text0 LMA [0044b3bc,0044ba0f] c:program filesmicrochipxc32v3.01binbin....libgccpic32c8.3.1........binbin/pic32c-ld.exe: section .bssD VMA [2045fff4,2045ffff] overlaps section .RAMFUNC$ VMA [2045ff58,20460007] Link Error: can't load section .RAMFUNC$ contents Любая помощь или указания будут высоко оценены.
Ответ №1:
Проблема оказалась в том, что я использовал printf() в функции «ramfunc». Удалил printf (), и все работает так, как ожидалось.