【问题标题】:Linker errors when migrating from xc32 2.10 to 2.15从 xc32 2.10 迁移到 2.15 时出现链接器错误
【发布时间】:2019-03-13 16:38:44
【问题描述】:

由于我无法追踪的原因,2.10 和 2.15 之间的链接器似乎存在一些实质性差异。在用“extern”修复了一些多重定义之后,我已经到了让我对不同之处感到困惑的地步。我有适用于 2.10 的功能代码,但在 2.15 中存在一些向量冲突。

/Applications/microchip/xc32/v2.15/bin/xc32-gcc -mprocessor=32MZ2048EFH144 -DXPRJ_default=default -legacy-libc -Wl,--defsym=_min_heap_size=65536,--no-code-in-dinit,--no-dinit-in-serial-mem -o bin/serial-r312-flash.elf obj/flash_interrupts.o obj/flash_main.o         
obj/main.o: In function `__vector_dispatch_24':
main.c:(.vector_24+0x0): multiple definition of `__vector_dispatch_24'
obj/flash_interrupts.o:interrupts.c:(.vector_24+0x0): first defined here
obj/flash_main.o: In function `__vector_dispatch_9':
main.c:(.vector_9+0x0): multiple definition of `__vector_dispatch_9'
obj/flash_interrupts.o:interrupts.c:(.vector_9+0x0): first defined here
/Applications/microchip/xc32/v2.15/bin/bin/gcc/pic32mx/4.8.3/../../../../bin/pic32m-ld: Link terminated due to previous error(s).
collect2: error: ld returned 255 exit status
make: *** [flash] Error 255

我试图将向量设为外部,但这一点也没有帮助。

//interrupt.h
extern void __attribute__((vector(_TIMER_2_VECTOR), interrupt(ipl7AUTO), nomips16))SampleTimerHandler(void);

//interrupt.c
void __attribute__((vector(_TIMER_2_VECTOR), interrupt(ipl7AUTO), nomips16)){}

在 main.c 中,我基本上有一个循环。

任何建议将不胜感激。

【问题讨论】:

    标签: pic microchip


    【解决方案1】:

    尝试这样定义您的 ISR:

    void __ISR(_USB_VECTOR, IPL1SOFT) USB_ISR() {

    使用 -Wall 在我的基础上构建干净。另外,我相信nomips16 是新的默认值。

    编辑:另见 cmets。显然,试图在头文件中重新声明 ISR 是一个促成因素。

    【讨论】:

    • 我试了一下,它在 2.10 上编译并运行良好,但在 2.15 上仍然死机。我想知道链接描述文件是否对 PIC32MZ2048EFH144 不利。
    • 我最近在 ISR def 中有 g++ 不喜欢 __attribute__。由于 xc32 和 ++ 是相同的 gcc,我认为它们在升级过程中可能会在两者中引入相同的错误 :-)。我忘了提到你(我)不需要在 .h 中声明 ISR - 这可能是另一个问题,因为它是一个 C 函数并且你正试图用 decl 重命名它。
    • .h 导致了 2.15 但不是 2.10 的问题。将此注释添加到您的答案中,我会接受。我认为这都是很好的信息。
    • 您是否同时删除了__attribute__ 和声明以使其满意?
    • 我不必那样做。它只需要重新声明 ISR,将带有 ((相干)) 的任何内容都设置为外部并将中断的标头拉出。回顾我的 SVN 修订版,大部分更改都是在我从 1.42 到 2.05 时发生的。我猜设计团队喜欢一些旧的方式。我可能也应该尝试拉__attribute__,但它正在工作。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2017-10-04
    相关资源
    最近更新 更多