Компилятор MPLAB X32 и перемещение функции в оперативную память вызывают ошибку компоновщика

#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 (), и все работает так, как ожидалось.