MPLAB X32 编译器和将函数移动到 RAM 会导致链接器错误

Posted

技术标签:

【中文标题】MPLAB X32 编译器和将函数移动到 RAM 会导致链接器错误【英文标题】:MPLAB X32 compiler and moving function to RAM causes linker error 【发布时间】:2022-01-11 23:57:52 【问题描述】:

我正在使用 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

任何帮助或指点将不胜感激。

【问题讨论】:

【参考方案1】:

问题原来是我在“ramfunc”函数中使用了 printf()。删除了 printf(),一切都按预期工作。

【讨论】:

以上是关于MPLAB X32 编译器和将函数移动到 RAM 会导致链接器错误的主要内容,如果未能解决你的问题,请参考以下文章

MpLab设置编译文件输出路径

MPLAB IDE 编译器文件归类整理

mplab xIde 编译成功,但不能生成Hex文件

MPLAB 编译总是失败,求高手解答。

在MPLAB 8.92 安装 XC8

MPLAB IDE中,怎么把引用头文件的路径改成自定义的