- 1. Разработка требований к продукту
- 2. Дизайн системы и разработка алгоритмов.
- 3. Кодирование встроенной прошивки
- Тестирование встроенной прошивки
Разработка программного обеспечения, как правило, сложна, но для встраиваемых систем это совершенно новый уровень сложности. Разработчики микропрограмм должны хорошо разбираться в разработке оборудования и понимать внутреннюю работу встроенного процессора. В сегодняшней статье я поделюсь инструментами и советами, которые можно использовать для достижения высокого уровня эффективности и устранения некоторых вещей, которые делают разработку прошивки утомительной.
Разработка встроенного программного обеспечения проходит аналогично процессу разработки «обычного» программного обеспечения. Независимо от принятой модели разработки / управления, разработка встроенного программного обеспечения обычно включает следующие шаги:
- Разработка требований к продукту
- Системный дизайн и разработка алгоритмов
- Кодирование
- Тестирование
Мы рассмотрим некоторые трудности, связанные с этими этапами, и некоторые инструменты, которые могут повысить эффективность и производительность.
1. Разработка требований к продукту
Спецификации продуктов часто разрабатываются с расчетом на дизайнеров плат. Обычно он содержит мало информации, которая могла бы помочь при разработке встроенного ПО, поэтому разработчик встроенного программного обеспечения получает некорректный документ объемом 250 страниц (в среднем), который нельзя использовать для справок, и если его не тщательно рассмотреть, он может легко привести к упущениям в дизайне, что, в свою очередь, приведет к увеличению сроков проекта, если не к общему провалу проекта. Документы редко содержат информацию о регистрах или их битовых полях.Помимо прочего, это стоит разработчикам встроенного ПО несколько человеко-часов, поскольку они ищут в документе такие вещи, как какой регистр принадлежит к какой группе и какое битовое поле принадлежит к какому регистру. Ниже приведены несколько советов, которые можно использовать для разработки более полезных документов спецификации проекта.
Использование описаний регистров
Как обсуждалось выше, разработчикам микропрограмм необходимо понимать тонкости всех регистров, памяти и т. Д. Всех элементов управления (ЦП, MCU и т. Д.) В проекте, чтобы иметь возможность эффективно управлять всеми частями системы. Чтобы реализовать это, разработчики микропрограмм могут обеспечить, чтобы в документе спецификации содержалось надлежащее описание регистров вместе с картами памяти. Всем регистрам в элементе управления может быть присвоено отличительное имя, которое упрощает их идентификацию в документе, и все они могут иметь горячую ссылку, так что они ведут к списку в документе, в котором указывается имя, местоположение, блок и адрес каждый регистр.
Описание задач
Еще один способ сделать документы спецификаций полезными для разработчиков встроенного программного обеспечения - это описать, что должен делать каждый блок и как он должен это делать. Также на этом этапе должны быть планы обработки ошибок для каждого блока. По сути, это похоже на высказывание разработчика прошивки; «Когда я приеду сюда, я должен сделать то, то и то, гарантируя, что то, то и это не произойдет». Это помогает направлять работу разработчика и помогает оценить проект еще до начала проектирования, чтобы выявлять потенциальные ошибки и ошибки, экономя драгоценное время и деньги.
Существуют и другие факторы, включая структуру документа, использование легко читаемых шрифтов (с чем разработчики могут работать даже в утомленном состоянии), диаграммы и изображения, где это возможно, которые могут повысить эффективность команды разработчиков прошивки после этого этапа.
2. Дизайн системы и разработка алгоритмов.
Этот этап включает в себя разработку псевдокодов, блок-схем, конечных автоматов и всего, что связано с дизайном прошивки. На этом этапе можно использовать целый ряд инструментов, чтобы помочь организовать мысли, изучить устаревшее / ранее написанное программное обеспечение вокруг проекта и разработать собственную блок-схему, конечный автомат и т. Д. Некоторые из этих инструментов обсуждаются ниже.
PIM
На этом этапе разработки продукта разработчики, как правило, много набрасываются, собирая ресурсы по проекту от веб-ссылок до формул и т. Д. Один из лучших способов отслеживать эту информацию, чтобы она могла быть полезной позже, - это использование PIM. (управление информацией о продукте) инструменты. Существует довольно много PIM, но я упомяну несколько с некоторыми выдающимися функциями.
1. Evernote
Evernote помогает вам делать заметки, доступные на любой платформе, так что вы можете проверить заметку, которую вы сделали на своем компьютере, находясь в автобусе домой. Заметки хорошо организованы и полностью доступны для поиска, поэтому вы всегда найдете то, что вам нужно.
2. TrunkNote
Trunk Note - это приложение для создания заметок в стиле Wiki. Он позволяет делать заметки всей организационной мощью вики. Это приложение для мобильного телефона, но его можно легко синхронизировать с ПК через WIFI.
Другие виды PIM, такие как Tiddlywiki и т. Д. Каждый из них имеет функции, которые могут сделать его более привлекательным для конкретных людей и могут потребовать некоторой выборки, прежде чем вы окончательно остановитесь на одном.
Понимание устаревшего кода
Еще одна группа инструментов, которые очень полезны на этапе проектирования, - это инструменты для понимания устаревших кодов. В ситуациях, когда разрабатываемый продукт является улучшенной версией предыдущего продукта, разработчик может счесть полезным просмотреть уже проделанную работу, чтобы получить некоторые идеи и, возможно, фрагменты кода для этого нового проекта. Это может быть довольно долгий путь, особенно если вы не входите в команду, создававшую предыдущее программное обеспечение. Существует множество программ, которые помогают строить деревья, создавать документацию и блок-схемы из уже написанного кода.
1. Doxygen
Doxygen - довольно мощный инструмент, помогающий создавать документацию из исходных кодов. Он был в основном разработан для работы с C ++, но также работает с C, Python и некоторыми другими языками. Он имеет возможность извлекать структуру кода из любого кода, предоставляя автоматически сгенерированные графы зависимостей и диаграммы наследования, помогающие визуализировать код.
2. Графвиз
Согласно их веб-сайту, graphviz помогает представить структурную информацию в виде диаграмм абстрактных графов и сетей. Его можно использовать вместе с Doxygen, чтобы лучше понимать создаваемую им графику.
3. Srecord
Srecord - это мощный инструмент для работы с образами прошивки и конвертации файлов между различными форматами. Его можно использовать для вычисления и выполнения CRC и контрольных сумм байтовых блоков, исправления файлов ошибок, созданных из-за ошибочных инструментальных цепочек, а также фильтрации или перемещения разделов файлов среди прочего. Более подробную информацию о его использовании можно найти на его странице SourceForge.
Некоторые другие инструменты, которые подпадают под эту категорию, среди прочего, CrystalRev и Hexplorer .
Разработка алгоритмов
Все исследования и записи сводятся к разработке алгоритмов, превращающихся в псевдокоды и блок-схемы для проекта. Существует несколько инструментов для разработки блок-схем, и хотя большинство из них не являются эксклюзивными для разработки микропрограмм, они предоставляют полезные и важные функции, которые просто выполняют свою работу, а также помогают поддерживать диаграммы на протяжении всего цикла разработки продукта. Ниже приведены некоторые из лучших инструментов для построения блок-схем.
1. QFSM
QFSM - это графический инструмент для проектирования и моделирования конечных автоматов. Его способность имитировать конструкции делает его лучше, чем у большинства других программ в этой группе. Это особенно полезно при разработке конечных автоматов для FPGA и аналогичного целевого оборудования.
2. Четкая диаграмма
Lucid chart, пожалуй, лучшее и самое гибкое программное обеспечение для создания блок-схем. Он основан на веб-интерфейсе и имеет командные функции, которые позволяют вам работать между несколькими устройствами и сотрудничать в режиме реального времени с товарищами по команде.
3. Microsoft Visio
Visio - один из лучших графических инструментов на данный момент. В нем есть массив объектов из разных полей, что позволяет легко описать что угодно. Однако в нем нет функций, которые улучшают взаимодействие между командами, и его можно использовать только на компьютере с Windows, на котором он установлен.
4. Google Презентации
Одним из ключевых моментов в разработке продуктов в современном мире является использование инструментов, которые позволяют командам эффективно сотрудничать, где бы они ни находились, и это то, что Google Slides предлагает на борту. Его можно использовать для разработки всех видов диаграмм, от блок-схем программного обеспечения до организационных диаграмм и интеллектуальных карт. Он облачный и работает практически во всех популярных браузерах.
Существует несколько других инструментов для создания блок-схем и разработки общих алгоритмов, как обычно, каждый из которых имеет свои плюсы и минусы.
3. Кодирование встроенной прошивки
Все, что было упомянуто до этого момента, ведет сюда. Мир SDK и IDE, выбор инструментов на этом этапе зависит от целевого устройства и функций, которые будут встроены в устройство, по этой причине я исключу из обсуждения популярные SDK и IDE, такие как MPLAB и т. Д., И просто придерживаюсь к инструментам, которые по своей природе более дополняют друг друга.
1. QT (разработка графического интерфейса)
Дисплеи (интерактивные или нет) - самые популярные средства обратной связи с пользователями в наши дни, а SDK QT - один из лучших и, вероятно, никому не чужой в кругу встроенных систем. Он предоставляет функции «перетаскивания», которые упрощают разработку сложных приложений на основе графического интерфейса пользователя для встроенных устройств, независимо от целевой платформы или языка программирования, используемого для общей разработки проекта. Это в основном устраняет стресс, связанный с использованием кода для создания пользовательских интерфейсов.
2. (Быстрое прототипирование)
Одним из самых серьезных препятствий при разработке встроенного программного обеспечения является тот факт, что оборудование обычно недоступно для тестирования на ходу, пока программное обеспечение разрабатывается. Часто, когда он доступен, разработчиков прошивки заставляли ждать все время, которое требовалось, чтобы оборудование было готово, делая мало или ничего не делая. Это увеличивает время выполнения заказа и не создает возможности для синхронизации между инженерами оборудования и разработчиками микропрограмм, которая повысила бы качество продукта. Чтобы решить эту проблему, ребята из VaST создали платформу виртуального прототипирования на уровне электронных систем, которую можно использовать для создания виртуального прототипа оборудования. на котором может выполняться встроенное программное обеспечение для определения производительности системы до того, как оборудование будет готово.
3. Doxygen (документация)
Одной из самых важных частей написания любого кода является документация, и одним из самых популярных инструментов для этого является Doxygen. Помимо использования для понимания устаревшего программного обеспечения, Doxygen имеет возможность автоматически извлекать комментарии из кода и создавать документацию, включающую их. Структуры Doxygen включают файлы графически и создают ссылки для каждой функции, переменной и макроса, используемых в вашем коде. Блок-схемы и диаграммы потоков данных также можно встроить в документацию, объединив Doxygen с graphviz.
4. GIT (системы контроля версий)
В наши дни трудно поверить, что кто-то разрабатывает программное обеспечение любого типа без какой-либо системы контроля версий, но на всякий случай это довольно плохая идея, которая может привести к ошибкам, которые будут стоить вам времени и денег. Git выделяется среди всех инструментов контроля версий по нескольким причинам. Это открытый исходный код, быстрый, эффективный и в основном локальный. Помимо Git, стоит упомянуть такие инструменты, как subversion.
Тестирование встроенной прошивки
Тестирование - важная часть процесса разработки чего угодно. Фирмы теряют тысячи долларов, когда устройства отзываются из-за ошибок прошивки, поэтому это одна из частей разработки, к которой следует отнестись очень серьезно. Часто это делается рука об руку с кодированием, и первый набор инструментов для тестирования кода, вероятно, является отладчиками в среде IDE или SDK, используемых для проекта. Тестирование бывает разных форм и выполняется на разных этапах, поэтому оно включает в себя различные инструменты. Инструменты тестирования от разработки прошивки проходят через проверку конструкции и инструменты статического анализа и тестирования во время выполнения. Ниже приведены несколько инструментов, которые я считаю действительно полезными.
1. Crystal REV
Crystal revs - это инструмент для изучения кода. Его можно использовать для создания блок-схемы из кода C / C ++, что делает его отличным инструментом для проверки вашего собственного кода и проверки того, является ли предварительный дизайн тем, что было реализовано. С Crystal rev вы сможете быстро увидеть разницу между дизайном и реализацией. Его способность генерировать блок-схемы, данные и поток вызовов из кодов также делает его полезным инструментом для анализа устаревшего кода.
2. ПК-линт
PC-lint - один из старейших инструментов для тестирования прошивки. Он способен анализировать программное обеспечение для выявления ошибок, уязвимостей безопасности и обеспечения того, чтобы код был написан в соответствии с отраслевыми стандартами. Подобные инструменты включают в себя, среди прочего, polyspace, LRDA, Eggplant и Tessy.
3. Wireshark
Это удобно при создании сетевых устройств. По сути, это анализатор пакетов, который может помочь просмотреть данные, которые передает ваше устройство. Это может помочь закрепить устройство.
4. Драйвер виртуального последовательного порта.
VSPD от eltima software - это инструмент, который мне недавно представил друг. Это очень удобно при работе с драйверами устройств и другими разработками, связанными с COM-портами. Виртуальный последовательный COM-порт дает вам возможность тестировать поведение COM-портов без целевого устройства. Вы можете создать неограниченное количество портов, способных эмулировать все настройки реальных COM-портов. Программное обеспечение также поставляется с такими функциями, как разделение последовательного порта, слияние COM-портов, использование связных соединений COM-порта среди других интересных функций.
Вот и все для этой статьи, спасибо, что нашли время, чтобы прочитать. Хотя, вероятно, невозможно перечислить все существующие инструменты, я надеюсь, что вы найдете некоторые из этих инструментов полезными.