从xc32 2.10迁移到2.15时的链接器错误

时间:2019-03-13 16:38:44

标签: pic microchip

出于无法追踪的原因,链接器中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中,我基本上有一个循环。

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

尝试像这样定义您的ISR:

array2

使用-Wall在我的建筑物上进行清洁。另外,我相信void __ISR(_USB_VECTOR, IPL1SOFT) USB_ISR() {是新的默认设置。

编辑:另请参见评论。显然,尝试在头文件中重新声明ISR是一个重要因素。