Жалкая паделка финских студентов написана на 100% на C, из ассемблера только вектора прерываний, crt и ещё мелочи, в C30 v3.31. Это фуфлыжный и никому не нужный жалкий приборишко, работаю в подвале. GPS приёмник только один, измерять нечего, вместо дисплея несколько светодидиков, зато аж 6 кнопок в клавиатуре и динамик вместо пищалки -- механическая тётя имеет ~540 фраз в синтезаторе (выводит в PWM, звук во внешнем флеше). USB нет. Сторонних библиотек нет. Микрочиповскую (им Dinkumware на самом деле) libc пришлось переписать наполовину. Есть GSM. На данный момент проект компилируется из 182 объектных файлов (*.o) (порядка 293 *.c файлов и 176 *.h файлов, но часть возможно не используется, часть *.c включается в другие *.c через include). PIC24FJ256GA108, занято 97% флеша.Разумеется, чтоб оно вообще собралось и заработало расставлены разные опции компиляции для разных *.o, чаще и -Os (-O1 по дефолту в MPLAB -- конечно не глючит). Для прошивки и отладки используется RealICE. К нему есть настоящий шаманский бубен (кожа какого-то животного натянутая на глиняное основание -- х.з. как работает, но вроде помогает). UART конечно есть, сообщения выводимые в UART в программной памяти не хранятся (~17кБайт). ELF вообще не нужен ввиду не работающего objcopy ибо, разумеется, прошивка получается отнюдь не тупо запуском компилятора, а получением coff, из которого путём objcopy (не работающего с elf!) выпиливаются файлы для непосредственно прошивки и каталог сообщений для просмотра на ПК, плюс ещё бутлоадер добавляется с контрольной суммой и шифрованием (ни каталог сообщений, ни бутлоадер без objcopy _в_ _принципе_ не сделать, по крайней мере в таком виде -- бутлоадер, например, экспортирует часть своих функций и переменных в рабочую программу, т.е. нужна линковка двух coff...) Большая часть отлажена в версии ПО для ПК ("синтетический порт" в терминологии Evgeny_CD), ибо в мплабе отлаживать вообще нереально (см. ниже): gdb нет, valgrind нет, gprof нет... Отладка на пике начинает иметь значение для аппаратно-зависимых вещей или чего-то работающего не так как на PC: да здравствуют хексадампы из MPLAB (переменные он в половине случаев не показывает, пошаговая отладка работает далеко не всегда, только если из дизассемблера в machine code view без меток), objdump -dS для сопоставления регистра PC с текстом программы на C и pic30-coff-nm для вычисления адресов переменных и их просмотра в File registers view. Разумеется регулярно слетает и заглючивает. Без этого -- никогда не бывает. Предусмотрено сохранение мини-дампа регистров и стека в ОЗУ (при перезапуске) и запрос его SMS-кой после слёта -- иногда помогает, а также функции чтения-записи ОЗУ на ходу (для отладки без отладчика). Запись протокола работы во внешний флеш, самодельные функции для отладки работы с динамической памятью, обёртка вокруг malloc (своего! микрочиповский не работает опять!) для контроля границ блоков. Отдельный _программный_ ватчдог (аппаратный в пиках сделан через ()() -- не даёт отладочной информации, используется как запасной вариант), периодическая проверка целостности кучи, целостности FLASH (всё время пока работает прибор, медленно, но верно), возможной утечки памяти и ряд других условий перезапуска, ассертов наконец наставлено где можно. Все исключительные ситуации CPU обрабатываются естесственно.
Метрика проекта программой cloc:
$ cloc .
799 text files.
723 unique files.
1228 files ignored.
http://cloc.sourceforge.net v 1.09 T=1.0 s (602.0 files/s, 93464.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code scale 3rd gen. equiv
-------------------------------------------------------------------------------
C 383 9961 9285 60872 x 0.77 = 46871.44
C/C++ Header 184 1793 1822 5879 x 1.00 = 5879.00
Tcl/Tk 13 232 171 1211 x 4.00 = 4844.00
make 10 321 197 727 x 2.50 = 1817.50
Assembly 7 84 162 607 x 0.25 = 151.75
Bourne Shell 3 17 8 80 x 3.81 = 304.80
Perl 1 3 0 16 x 4.00 = 64.00
m4 1 4 0 12 x 1.00 = 12.00
-------------------------------------------------------------------------------
SUM: 602 12415 11645 69404 x 0.86 = 59944.49
-------------------------------------------------------------------------------
Файлов больше, т.к. сюда входит синтетический порт (HAL под PC) и часть неиспользуемых функций.