ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
505572 Топик полностью
Связанные сообщения
Синтетический ПортHal
LL vs Registers - стоит ли заморачиваться LL? Посмотрел на LL примеры для stm32, он дает достаточно длинный и сложный на первый ...2024-05-04
Подскажите как сейчас правильно организовать в микроконтроллере программные таймеры?2020-10-23
Начиная с virtual environment смешалось всё. JSON и всё такое прочее -- это детали реализации конкретной системы, а не высокоуро...2020-07-11
Требуется мнение об идее реализации синтетических портов, пока привожу основные тезисы: Синтетической порт(Synth port) представл...2020-07-11
При наличии полноценного компилятора не при чём (не хуже чем 16 бит). Но как правило с этим проблемы. Для всех кроме AVR у многи...2020-02-28
Выводы контроллера всегда управляются в контексте управления каким-либо более крупным аппаратным ресурсом. I2C-шиной, например. ...2019-12-17
Железо нужно симулировать не на уровне битов и фронтов сигналов, а на уровне высокоуровневых операций (например, чтение-запись б...2019-11-07
Спасибо, вообще в документе многие пункты достаточно разумны, я особо подчерку для некоторых здешних читателей:2019-10-30
Когда часть ПО, которая на стыке с железом, замещается на симулятор для ПК и вся программа запускается и отлаживается на ПК. В и...2019-10-02
Для этого не нужен именно ваш прибор, для этого может быть вообще не нужно железо (про "синтетический порт" и Evgeny_CD и я уже ...2019-10-02
Помимо прочего при нормальном программировании всегда делается какой-то "логгер" ведущий протокол работы программы. Потому, что ...2019-08-10
От проекта зависит. Насколько чётко выделена аппаратно-зависимая часть и насколько абстракции используемые в старом проекте реал...2019-05-24
Собственно можно код запускать в эмуляторе процессора (qemu), которому привязать симуляцию нужной аппаратуры, или заменить HAL н...2019-02-06
Когда ПО прибора запускается на обычном ПК. Для этого обычно ПО разделяется на два слоя, как минимум: платформо-независимый (бол...2018-05-23
Одни абстракции заменяются на другие, которые тоже нужно учить, документировать и запоминать, учитывать возможные побочные эффек...2015-07-23
Да, трэш угар и содомия. Иногда абстракции через край, поэтому я имею такое мнение, что иногда и не грех в исходники прямо вписа...2013-12-29
Не совсем. Над HAL может быть ещё один слой, уже нужный для совмещения разных программных интерфейсов. Т.е. есть модуль A, котор...2013-10-25
Кто о чем, а вшивый о бане я о кодевеломпенте софта-железа. Итак, пусть у нас есть Tcl, который позволяет прикручивать "в...2012-02-24
Полезны аж 3 прослойки (ассемблеристам дальше лучше не читать):2011-10-13
Кстати, про синтетические системы и реальное время. Все гораздо интереснее, чем кажется!2007-07-28
fk0, легенда (10.04.2014 02:07 - 02:15, просмотров: 806) ответил MBedder на Мой проект хелловорд на dsPIC33EP256MU806 написан в МПЛАБ 8.92 + ХС16 1.21 + немножко АСМа. Это серьезный измерительно-регистрирующий полевой прибор, включающий в себя:
Жалкая паделка финских студентов написана на 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) и часть неиспользуемых функций.
[ZX]