由于我无法追踪的原因,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我曾尝试将向量设为externs,但这丝毫没有帮助。
//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中,我基本上有一个循环。
任何建议都将不胜感激。
发布于 2019-03-14 00:50:22
试着这样定义你的ISR:
void __ISR(_USB_VECTOR, IPL1SOFT) USB_ISR() {
使用-Wall在我的基础上进行干净的构建。此外,我认为nomips16是新的默认设置。
编辑:另请参阅注释。显然,试图在头文件中重新声明ISR是一个促成因素。
https://stackoverflow.com/questions/55147003
复制相似问题