我正在使用 Microchips XC32 C 编译器和工具为 SAM E70 处理器构建可执行文件。
我必须创建一个从 RAM 而不是 ROM/Flash 执行的函数,因为该函数使用特殊指令来读取 Flash 开头的唯一 128 位。
所以我定义了函数的开头,如下所示:
__ramfunc__ void ReadUniqueID(uint32_t *pdwUniqueID)
{
uint32_t status;
if (pdwUniqueID == NULL)
return;
printf("ReadUniqueID begin\r\n", pdwUniqueID[0]);
根据文档
__ramfunc__
应该确保该函数是从ram执行的。
但是链接时出现以下错误。
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
任何帮助或指示将不胜感激。
问题原来是我在“ramfunc”函数中使用了 printf() 。我删除了 printf(),一切都按预期工作。