dimka76 63 11 апреля, 2019 Опубликовано 11 апреля, 2019 · Жалоба Здравствуйте. Нашел инструкцию как использовать компилятор для MIPS от Imagination Technologies для микроконтроллеров PIC32. Вот ссылка на инструкцию https://evosyn.com/pic32img.html Примеры взял с этого же сайте Но при сборке проекта, точнее при создания выходного файла для прошивки МК выдает следующую ошибку f:/mips-mti-elf/2016.05-03/bin/mips-mti-elf-objcopy --change-section-lma .bootflash-0xa0000000 --change-section-lma .exception_vector-0x80000000 --change-section-lma .text-0x80000000 --change-section-lma .init-0x80000000 --change-section-lma .fini-0x80000000 --change-section-lma .eh_frame-0x80000000 --change-section-lma .jcr-0x80000000 --change-section-lma .ctors-0x80000000 --change-section-lma .dtors-0x80000000 --change-section-lma .rodata-0x80000000 --change-section-lma .data-0x80000000 --change-section-lma .bss-0x80000000 --change-section-lma .startdata-0x80000000 bin/led_flash.elf bin/led_flash_physical.elf objcopy -O ihex bin/led_flash_physical.elf bin/led_flash_pickit.hex BFD: bin/led_flash_pickit.hex: address 0xffffffff9d002be0 out of range for Intel Hex file objcopy:bin/led_flash_pickit.hex: Bad value make: *** [Makefile:75: all] Error 1 Также прикрепляю файлы скрипта линкера и собственно Makefile. Помогите пожалуйста исправить ошибку. Makefile pic32mx2xx_uhi.ld Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 11 апреля, 2019 Опубликовано 11 апреля, 2019 · Жалоба Сравнительно недавно gcc стал 64-битным внутри. Во всяком случае с каких-то пор адреса в листингах стали 64-битными даже для 8- и 32-битных целевых платформ. Похоже, этот магическй адрес получается вычитанием чего-то из нуля и пока числа были 32-битными, результат попадал в адресное пространство. Вам нужно заставить компоновщик (линкер) генерить .map, в этом файле найти получившийся адрес 0xffffffff9d002be0, посмотреть, при сборке какой секции он получается и уже дальше искать то самое вычитание и накладывать маску 0xFFFFFFFF на результат. Я бы делал так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 11 апреля, 2019 Опубликовано 11 апреля, 2019 · Жалоба В map фале адреса 0xffffffff9d002be0 нет. Но в нем все адреса действительно 64-ех битные. Quote .MIPS.abiflags 0x000000009d002be0 0x18 0x000000009d002be0 __MIPS_abiflags_start = . *(.MIPS.abiflags) .MIPS.abiflags 0x000000009d002be0 0x18 f:/mips-mti-elf/2016.05-03/bin/../lib/gcc/mips-mti-elf/4.9.2/../../../../mips-mti-elf/lib/mipsel-r2-soft-newlib/lib\crt0.o 0x000000009d002bf8 __MIPS_abiflags_end = . Но после работы компоновщика производится еще и преобразование виртуальных адресов в физические, чтобы программатор мог правильно разместить прошивку во FLASH микроконтроллера. Quote If you are using a PICkit or similar Microchip inspired tool to upload object code to your MCU, you will need to convert the virtual addresses specified in the elf generated by the Codescape toolchain to physical ones. This can be done using objcpy. Это производится следующим образом objcpy --change-section-lma .lowerbootflashalias-0xA0000000 \ --change-section-lma .bootflash1-0xA0000000 \ --change-section-lma .bootflash2-0xA0000000 \ --change-section-lma .exception_vector-0x80000000 \ --change-section-lma .text-0x80000000 \ --change-section-lma .init-0x80000000 \ --change-section-lma .fini-0x80000000 \ --change-section-lma .eh_frame-0x80000000 \ --change-section-lma .jcr-0x80000000 \ --change-section-lma .ctors-0x80000000 \ --change-section-lma .dtors-0x80000000 \ --change-section-lma .rodata-0x80000000 \ --change-section-lma .data-0x80000000 \ --change-section-lma .bss-0x80000000 \ --change-section-lma .startdata-0x80000000 \ your.elf your_physical.elf Может быть утилита mips-mti-elf-objcopy как раз и портит адреса ? Пробовал и x86 и х64 версии компилятора. Также пробовал одну из старых (трехлетней давности) версий компилятора. Во всех случаях результат одинаково отрицательный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 11 апреля, 2019 Опубликовано 11 апреля, 2019 · Жалоба Я не нашел в скрипте компоновщика секций .lowerbootflashalias, .bootflash1, .bootflash2. Остальные вроде как должны иметь адреса больше 0x9D000000 и при вычитании 0x80000000 заема происходить не должно. Я бы убрал все --change-section-lma и добавлял по одной. На какой споткнется - ту секцию в .map и смотреть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба objcpy --change-section-lma .lowerbootflashalias-0xA0000000 \ --change-section-lma .bootflash1-0xA0000000 \ --change-section-lma .bootflash2-0xA0000000 \ .............. ............. Это приведено лишь на сайте с описанием, ссылку на который я приводил в первом сообщении. На самом деле, в Makefile из примера с того же сайта, эти строки отсутствуют. Вот как выглядят эти строки в Makefile из примера. OBJCOPY_TO_PHY := --change-section-lma .bootflash-0xa0000000 OBJCOPY_TO_PHY += --change-section-lma .exception_vector-0x80000000 OBJCOPY_TO_PHY += --change-section-lma .text-0x80000000 OBJCOPY_TO_PHY += --change-section-lma .init-0x80000000 OBJCOPY_TO_PHY += --change-section-lma .fini-0x80000000 OBJCOPY_TO_PHY += --change-section-lma .eh_frame-0x80000000 OBJCOPY_TO_PHY += --change-section-lma .jcr-0x80000000 OBJCOPY_TO_PHY += --change-section-lma .ctors-0x80000000 OBJCOPY_TO_PHY += --change-section-lma .dtors-0x80000000 OBJCOPY_TO_PHY += --change-section-lma .rodata-0x80000000 OBJCOPY_TO_PHY += --change-section-lma .data-0x80000000 OBJCOPY_TO_PHY += --change-section-lma .bss-0x80000000 OBJCOPY_TO_PHY += --change-section-lma .startdata-0x80000000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба Убрал вообще все --change-section-lma. Закоментировал их OBJCOPY_TO_PHY := #OBJCOPY_TO_PHY := --change-section-lma .bootflash-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .exception_vector-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .text-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .init-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .fini-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .eh_frame-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .jcr-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .ctors-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .dtors-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .rodata-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .data-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .bss-0x80000000 #OBJCOPY_TO_PHY += --change-section-lma .startdata-0x80000000 И все равно та же ошибка остается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба Прикрепите к сообщению .map целиком. Попробуем разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба output.map Еще, на всякий случай, карта памяти микроконтроллера. PIC32MX2XX_memory map.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба 13 минут назад, dimka76 сказал: output.map Да, не видно криминала. Пошел по первой ссылке, поставил на закачку компилятор. После обеда попробую повторить ваш путь и получить ошибку у себя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба Хочу заметить, что автор работал в Linux, я в Windows. И компилятор должен быть mips-mti-elf, а не mips-img-elf. Еще я провел такой эксперимент. mips-mti-elf-objcopy заменил на objcopy из состава компилятора xc32 от Microchip. И ошибка пропала, все проходит успешно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба 1 час назад, dimka76 сказал: И компилятор должен быть mips-mti-elf, а не mips-img-elf. Блин, предупреждать надо было... 1 час назад, dimka76 сказал: Еще я провел такой эксперимент. Так что, не искать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба 22 minutes ago, Сергей Борщ said: Так что, не искать? Вообще, хорошо бы было разобраться. Если вас не затруднит конечно. А то собирать компилятор по кускам из разных мест как-то не красиво. https://codescape.mips.com/components/toolchain/2018.09-03/downloads.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба 19 минут назад, dimka76 сказал: Вообще, хорошо бы было разобраться. Под линухом собралось без единого предупреждения. Может вам пора менять систему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба Я думаю другие примеры поискать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба Хочется вместо платного MpLab от Microchip попытаться освоить бесплатный инструмент ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться