Ошибки компоновщика при миграции с xc32 2.10 на 2.15 - PullRequest
1 голос
/ 13 марта 2019

По причинам, которые я не могу отследить, кажется, есть некоторые существенные различия в компоновщике между 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 Ответ

1 голос
/ 13 марта 2019

Попробуйте определить свои ISR следующим образом:

void __ISR(_USB_VECTOR, IPL1SOFT) USB_ISR() {

Строит чисто на моем с -Wall. Кроме того, я считаю, что nomips16 является новым значением по умолчанию.

РЕДАКТИРОВАТЬ: также см. Комментарии. Очевидно, что попытка повторно объявить ISR в заголовочном файле была одним из факторов.

...