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

Я использую компилятор Microchips XC32 C и инструменты для создания исполняемого файла для процессора SAM E70.

Мне нужно создать функцию, которая выполняется из ОЗУ, а не из ПЗУ/флэш-памяти, потому что эта функция использует специальные инструкции для чтения уникальных 128 бит в начале флэш-памяти.

Итак, я определил начало функции следующим образом:

      __ramfunc__ void ReadUniqueID(uint32_t *pdwUniqueID)
{
    uint32_t status;

    if (pdwUniqueID == NULL)
        return;
    printf("ReadUniqueID begin\r\n", pdwUniqueID[0]);

Согласно документации __ramfunc__предполагается, что функция выполняется из оперативной памяти.

Однако при связывании возникают следующие ошибки.

      c:\program files\microchip\xc32\v3.01\bin\bin\..\..\lib\gcc\pic32c\8.3.1\..\..\..\..\bin\bin/pic32c-ld.exe: Link Warning: attributes for input section '.RAMFUNC$.__stub' conflict with output section '.RAMFUNC$'
c:\program files\microchip\xc32\v3.01\bin\bin\..\..\lib\gcc\pic32c\8.3.1\..\..\..\..\bin\bin/pic32c-ld.exe: section .text.Reset_Handler%184 LMA [0044ba08,0044bb8b] overlaps section .text%180 LMA [0044b3bc,0044ba0f]
c:\program files\microchip\xc32\v3.01\bin\bin\..\..\lib\gcc\pic32c\8.3.1\..\..\..\..\bin\bin/pic32c-ld.exe: section .bss%44 VMA [2045fff4,2045ffff] overlaps section .RAMFUNC$ VMA [2045ff58,20460007]
Link Error: can't load section .RAMFUNC$ contents

Любая помощь или указатели будут очень признательны.

1 ответ

Проблема оказалась в том, что я использовал printf() в функции "ramfunc". Удалил printf(), и все работает как положено.

Другие вопросы по тегам