Компилятор без вариантов: 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...
Подробности:
[ZX]
$ 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.
-
- Я XC16 юзаю и проблем не замечал. Распишите плз подробнее в чем косяки. - =AK=(05.12.2013 13:11)
- merci :) - scorpion(01.12.2013 12:19)