ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
469105 Топик полностью
fk0, легенда (30.11.2013 23:17 - 01.12.2013 00:33, просмотров: 705) ответил scorpion на У меня профессиональное горе. На новой работе снова используют пики. Правда на этот раз dsPIC30. Лучше, конечно, чем 18е, но всё равно кака судя по даташиту. Какая среда для них в данный исторический момент лучше ? Оне пользуют MPLAB.
Компилятор без вариантов: C30 v3.31 (все остальные версии глючные, включая XC16 последнюю). Внутри это gcc, что уже не так тоскливо. MPLAB-X с ним работать не будет, так что MPLAB-без-X. Но собственно в качестве "среды" не обязательно MPLAB. MPLAB нужен только для отладки и программирования программатором. Лично я всё делаю в Vim. Один сотрудник у нас всё делал в MPLAB-X, а отлаживал/программировал в MPLAB-без-X. Другой, в Netbeans кажется. Третий всё делал в Eclipse. Компиляция через Makefile и тогда любая сторонняя C/C++ IDE годится. Вот с отладкой реально тоскливо. Я тут 100500 раз уже писал. MPLAB не видит не глобальные символы "в половине случаев". Причём бывает в watch window не видит (out of scope или нет вообще), а при наведении мышки в исходнике показывает переменные -- чудеса. Для отладки конкретного модуля можно сделать всё глобальным на время (можно завести свой макрос, типа MYSTATIC, для использования вместо static за пределами функций -- дальше понятно...) Или смотреть вручную в File registers окне, только адреса символов нужно заранее в помощью программы nm получить. Вторая проблема: MPLAB неправильно ассоциирует строку дизассемблера (или значение регистра $PC попросту) с исходниками. Всегда неправильно, если один .c файл включается в другой через #include (для отладки можно включить вручную...) В остальных случаях -- иногда. И можно долго ломать голову, прежде чем догадаешься. Надо знать заранее и перепроверять, если есть сомнения. По той же причине может не ставить бреакпойнты. И по той же причине окно Disassemble показывает чушь или ничего не показывает. Тут решение опять же: objdump'ом сделать дизассемблер и разбираться вручную (шагать и брейкпоинты ставить в окне Program memory, в режиме дизассемблера -- там всегда всё правильно, но нет символов). PS: ещё есть проблема поиска исходников, когда делаешь File->Import для *.cof (в MPLAB-без-X). Я, честно говоря, не понял в чём она заключаетя. То ищет нормально, то не ищет, то ищет в странных местах. Но я примерно понял откуда ноги растут: в *.cof записаны абсолютные пути. Если пути относительные, то MPLAB сразу ищет всё ок (*.cof должен быть в каталоге с исходниками). Поэтому процесс компиляции у меня выглядит так (для make): set -o pipefail && c30 $(CFLAGS) -E $< | m4 -s -P | c30 $(CFLAGS) -c -o$*.O -x c - && bbe -b "/$(shell pwd | sed s,/,\\\\x2f,g)/:/\\x00/" -e "r 0 $<\x00" -o $@ $*.O -- выглядит страшно... bbe здесь производит замену /home/user/path/filename.c на просто filename.c внутри объектного файла -- тогда нет проблем с MPLAB. PPS: там ещё глобальный косяк с malloc описанный здесь: http://caxapa.ru/469110.html PPPS: а ещё традиционно все MPLAB не отображают стек (видимо, тяжёлое наследие от PIC16). Потому, как на PIC18 и уж точно на PIC24 с этим никаких аппаратных проблем нет. Но на PIC18 просто "не поддерживает", а на PIC24 пишет "не могу из-за оптимизации". Даже при задании -O0. Написал свои программы для распечатки стеков для PIC18 и PIC24... Подробности:
$ pic30-coff-gcc -v -v -v 
Using built-in specs.
Target: pic30-coff
Configured with: ../gcc-4.0.2/gcc-4.0.2/configure --prefix=/opt/c30 --target=pic30-coff --enable-languages=c
Thread model: single
gcc version 4.0.3 (dsPIC30, Microchip v3.31) Build date: Apr 17 2012
Библиотеку C использовать фирмы Dinkumware которая включается с ключём -legacy-libc (без этого глюкодром). И, возможно, стоит поставить -msmart-io=0. Мне в итоге пришлось заменить malloc, весь ввод-вывод (printf и т.п.) и что-то ещё по-мелочи. Иначе слишком жирное оно (хелло-ворлд на 40кБайт) и есть ряд неясностей. Я тут писал в разделе pic.
[ZX]