Советы и инструменты для разработки встроенного ПО


Разработка программного обеспечения, как правило, сложна, но для встраиваемых систем (embedded system) это совершенно новый уровень сложности. Разработчики встроенного ПО (Firmware) должны иметь хорошие знания в области разработки аппаратного обеспечения и понимать внутреннюю работу встроенного процессора. В сегодняшней статье я поделюсь инструментами и советами, которые можно использовать для достижения высокого уровня эффективности и устранения некоторых вещей, которые делают разработку встроенного ПО, также называемого прошивкой, утомительным процессом.

Советы и инструменты для разработки встроенного ПО

Разработка встроенного программного обеспечения (ПО) проходит тот же процесс, что и разработка «обычного» программного обеспечения. Независимо от принятой модели разработки/управления, разработка встраиваемого программного обеспечения обычно включает следующие этапы:

  1. Разработка требований к продукту.
  2. Проектирование системы и разработка алгоритмов.
  3. Кодирование (написание программы).
  4. Тестирование.

Мы рассмотрим некоторые трудности, возникающие на этих этапах, и некоторые инструменты, которые могут повысить их эффективность и производительность.

Также, если вы заинтересована в создании своего нового электронного продукта и вывода его на рынок, советуем прочитать вот это исчерпывающее руководство по данному вопросу.

1. Разработка требований к продукту

Спецификации продукта часто составляются с учетом проектировщиков печатных плат. Обычно они содержат мало информации, которая могла бы помочь в разработке встроенного ПО, поэтому разработчик встроенного программного обеспечения в конечном итоге получает дефектный документ объемом 250 страниц (в среднем), который нельзя использовать в качестве справочной информации и, если его не тщательно изучить, это может легко привести к упущениям в проектировании, что, в свою очередь, приведет к ошибкам, к продлению сроков проекта, если не к полному провалу проекта. Документы редко содержат информацию о регистрах или их битовых полях, среди прочего, и это стоит разработчикам встроенного ПО несколько человеко-часов, поскольку они просматривают документ, чтобы определить такие вещи, как, например, какой регистр принадлежит какой группе и какое битовое поле принадлежит какому регистру. Ниже приведены некоторые советы, которые можно использовать для обеспечения разработки более полезных документов со спецификациями проекта.

Использование описаний регистров

Как обсуждалось выше, разработчикам встроенного ПО необходимо понимать тонкости работы всех регистров, памяти и т. д. всех элементов управления (ЦП, MCU и т. д.) в проекте, чтобы иметь возможность эффективно управлять всеми частями системы. Чтобы реализовать это, разработчики встроенного ПО могут обеспечить, чтобы в документе со спецификацией содержалось правильное описание регистров вместе с картами памяти. Всем регистрам в элементе управления можно присвоить отличительное имя, которое позволит их легко идентифицировать в документе, и все они могут быть связаны между собой «горячими ссылками», так что они ведут к списку внутри документа, в котором указаны имя, местоположение, блок и адрес каждого регистра.

Описание задач

Другой способ сделать документы спецификаций полезными для разработчиков встраиваемого программного обеспечения — описать, что должен делать каждый блок и как он должен это делать. Также на этом этапе должны быть планы обработки ошибок по каждому блоку. По сути, это похоже на слова разработчика прошивки: «Когда я приеду сюда, я должен сделать то, то и это, гарантируя, что то, то и это не произойдет». Это помогает направлять работу разработчика и помогает оценить проект еще до начала проектирования и выявить потенциальные ошибки, экономя драгоценное время и деньги.

Существуют и другие факторы, включая структуру документа, использование легко читаемых шрифтов (с которыми разработчики могут работать, даже когда утомлены), диаграммы и изображения, где это возможно, которые могут повысить эффективность команды разработчиков встроенного ПО после этого этапа.

2. Проектирование системы и разработка алгоритма

Проектирование системы и разработка алгоритма

Этот этап включает в себя разработку псевдокодов, блок-схем, конечных автоматов и всего, что связано с разработкой встроенного ПО. На этом этапе можно использовать целый ряд инструментов, которые помогут организовать мысли, изучить устаревшее/ранее написанное программное обеспечение для проекта и разработать собственную блок-схему, конечный автомат и т. д. Некоторые из этих инструментов обсуждаются ниже.

PIMs (product information management)

На этом этапе разработки продукта разработчики, как правило, много пишут, собирая ресурсы для проекта: от веб-ссылок до формул и т. д. Один из лучших способов отслеживать эту информацию, чтобы она была полезна в дальнейшем, — использовать PIM (product information management - управление информацией о продукте). Существует довольно много PIM, но я упомяну некоторые из них, обладающие некоторыми выдающимися характеристиками.

1. Evernote

Программное обеспечение Evernote

Evernote помогает вам делать заметки, доступные на любой платформе, поэтому вы можете проверить сделанную вами заметку на своем компьютере, пока едете домой в автобусе. Заметки хорошо организованы и полностью доступны для поиска, поэтому вы всегда найдете то, что вам нужно.

2. TrunkNote

Trunk Note — это приложение для создания заметок, похожее на Wiki. Оно использует все организационные возможности вики для ведения заметок. Это приложение для мобильного телефона, но его можно легко синхронизировать с ПК через WIFI.

Другие виды PIM, такие как Tiddlywiki и т. д. Каждый из них имеет функции, которые могут сделать его более привлекательным для конкретных людей, и может потребоваться некоторая выборка, прежде чем вы окончательно остановитесь на одном из них.

Понимание устаревшего (Legacy) кода

Другая группа инструментов, которые очень полезны на этапе проектирования, — это инструменты для понимания устаревших кодов. В ситуациях, когда разрабатываемый продукт представляет собой улучшенную версию предыдущего продукта, разработчик может счесть полезным просмотреть уже проделанную работу, чтобы получить некоторые идеи и, возможно, фрагменты кода для этого нового проекта. Это может быть довольно долгий путь, особенно если вы не были частью команды, создавшей предыдущее программное обеспечение. Существует довольно много программного обеспечения, которое помогает строить деревья, создавать документацию и блок-схемы из уже написанного кода.

1. Doxygen

Программное обеспечение Doxygen

Doxygen — достаточно мощный инструмент, помогающий создавать документацию из исходных кодов. В основном он был разработан для работы с C++, но также работает с C, Python и некоторыми другими языками. Он имеет возможность извлекать структуру кода любой программы, предоставляя автоматически генерируемые графики зависимостей и диаграммы наследования для визуализации кода.

2. Graphviz

Программное обеспечение Graphviz

Согласно их веб-сайту, Graphviz помогает представлять структурную информацию в виде диаграмм абстрактных графов и сетей. Его можно использовать вместе с Doxygen, чтобы лучше понять создаваемую им графику.

3. Srecord

Srecord — мощный инструмент для управления образами прошивки и преобразования файлов между различными форматами. Его можно использовать для расчета и выполнения CRC и контрольных сумм для байтовых блоков, исправления файлов ошибок, созданных из-за ошибок в цепочках инструментов, а также для фильтрации или перемещения разделов файлов, среди прочего. Более подробную информацию о его использовании можно найти на странице SourceForge.

Среди других инструментов, подпадающих под эту категорию, — CrystalRev и Heexplorer .

Разработка алгоритмов

Все исследования и записи сводятся к разработке алгоритмов, которые затем превращаются в псевдокоды и блок-схемы проекта. Существует несколько инструментов для разработки блок-схем, и хотя большинство из них не предназначены исключительно для разработки встроенного ПО, они предоставляют полезные и важные функции, которые просто выполняют свою работу, а также помогают поддерживать диаграммы на протяжении всего цикла разработки продукта. Ниже приведены некоторые из лучших инструментов для создания блок-схем.

1. QFSM

Программное обеспечение QFSM

QFSM — это графический инструмент для проектирования и моделирования конечных автоматов. Его способность моделировать проекты делает его намного лучше, чем большинство других программ в этой группе. Это особенно полезно при разработке конечных автоматов для FPGA и аналогичного целевого оборудования.

2. Lucid Chart

Программное обеспечение Lucid Chart

Lucidchart, пожалуй, лучшее и самое гибкое программное обеспечение для создания блок-схем. Оно основано на веб-интерфейсе и имеет командные функции, которые позволяют вам работать между несколькими устройствами и сотрудничать с товарищами по команде в режиме реального времени.

3. Microsoft Visio

Программное обеспечение Microsoft Visio

Visio — один из лучших графических инструментов на данный момент. Он имеет массив объектов из разных областей, что позволяет легко описать что угодно. Однако он не обладает функциями, улучшающими сотрудничество между командами, и его можно использовать только на компьютере с Windows, на котором он установлен.

4. Google Slides

Программное обеспечение Google Slides

Одним из ключевых моментов в разработке продуктов в современном мире является использование инструментов, которые позволяют командам эффективно сотрудничать, где бы они ни находились, и это то, что Google слайды привносят в работу. Его можно использовать для разработки всех видов диаграмм, от блок-схем программного обеспечения до организационных диаграмм и интеллектуальных карт. Он основан на облаке и работает практически во всех популярных браузерах.

Как обычно, существует несколько других инструментов для создания блок-схем и разработки общих алгоритмов, каждый из которых имеет свои плюсы и минусы.

3. Написание кода для встроенного ПО

Написание кода для встроенного ПО

Все, что было упомянуто до этого момента, ведет сюда. Мир SDK и IDE, выбор инструментов на этом этапе зависит от целевого устройства и функций, которые будут встроены в устройство, по этой причине исключим из обсуждения популярные SDK и IDE, такие как MPLAB и т. д., и просто будем придерживаться инструментов, которые являются более взаимодополняющими по своей природе.

1. QT (разработка графического интерфейса)

Программное обеспечение QT

Дисплеи (интерактивные или нет) в наши дни являются наиболее популярными средствами предоставления обратной связи пользователям, а SDK QT — один из лучших и, вероятно, не новичок в кругу встроенных приложений. Он предоставляет функции «перетаскивания», которые упрощают разработку сложных приложений с графическим интерфейсом для встраиваемых устройств, независимо от целевой платформы или языка программирования, используемого для общей разработки проекта. Это в основном устраняет стресс, связанный с использованием кода для создания пользовательских интерфейсов.

2. Быстрое прототипирование

Одним из самых больших препятствий в разработке встроенного программного обеспечения является тот факт, что аппаратное обеспечение обычно недоступно для тестирования на ходу во время разработки программного обеспечения . Зачастую, когда оно доступно, разработчикам встроенного ПО приходится ждать все время, необходимое для готовности оборудования, практически ничего не делая. Это увеличивает время выполнения заказа и не создает возможности для синхронизации между инженерами аппаратного обеспечения и разработчиками встроенного ПО, которая могла бы повысить качество продукта. Чтобы помочь решить эту проблему, ребята из VaST создали платформу виртуального прототипирования на уровне электронных систем, которую можно использовать для создания прототипа виртуального оборудования, на котором можно запускать встроенное программное обеспечение для определения производительности системы до того, как оборудование будет готово.

3. Doxygen (документация)

Одной из наиболее важных частей написания любого кода является документация, и одним из самых популярных инструментов для этого является Doxygen. Помимо использования для понимания устаревшего программного обеспечения, Doxygen имеет возможность автоматически извлекать комментарии из кода и создавать документацию, включающую их. Структуры Doxygen включают графические файлы и создают ссылки для каждой функции, переменной и макроса, используемых в вашем коде. Блок-схемы и диаграммы потоков данных также можно встроить в документацию, объединив Doxygen с Graphviz.

4. GIT (системы контроля версий)

Программное обеспечение GIT

В наши дни трудно поверить, что кто-то разрабатывает программное обеспечение любого типа без какой-либо системы контроля версий, но на всякий случай это довольно плохая идея, которая может привести к ошибкам, которые будут стоить вам времени и денег. Git выделяется среди всех существующих инструментов контроля версий по нескольким причинам. Это открытый исходный код, быстрый, эффективный и в основном локальный. Помимо Git, стоит упомянуть и такие инструменты, как Subversion.

4. Тестирование встроенного ПО

Тестирование — важная часть процесса разработки чего угодно. Фирмы теряют тысячи долларов, когда устройства отзываются из-за ошибок встроенного ПО, поэтому к этой части разработки следует относиться очень серьезно. Часто это делается рука об руку с кодированием, и первым набором инструментов для тестирования кода, вероятно, являются отладчики в IDE или SDK, используемые для проекта. Тестирование имеет разные формы и осуществляется на разных этапах, поэтому оно включает в себя различные инструменты. Инструменты тестирования включают разработку встроенного ПО, от проверки конструкции до инструментов статического анализа и тестирования во время выполнения. Ниже приведены несколько инструментов, которые я считаю действительно полезными.

1. Crystal REV

Crystal revs — инструмент для изучения кода. Его можно использовать для создания блок-схемы из кода C/C++, что делает его отличным инструментом для проверки вашего собственного кода и проверки того, соответствует ли предварительный проект тому, что было реализовано. С Crystal Rev вы сможете быстро увидеть разницу между дизайном и реализацией. Его способность генерировать блок-схемы, данные и поток вызовов из кодов также делает его полезным инструментом для анализа устаревшего кода.

2. PC- Lint

PC-lint — один из старейших инструментов тестирования встроенного ПО. Он способен анализировать программное обеспечение для выявления ошибок и уязвимостей безопасности и гарантировать, что код написан в соответствии с отраслевыми стандартами. Подобные инструменты включают в себя Polyspace, LRDA, Eggplant и Tessy и другие.

3. Wireshark

Программное обеспечение Wireshark

Эта программа пригодится при создании сетевых устройств. По сути, это анализатор пакетов, который может помочь просмотреть данные, которые передает ваше устройство. Это может помочь защитить устройство.

4. Virtual Serial Port Driver (драйвер виртуального последовательного порта)

VSPD от eltima Software — это инструмент, который мне недавно представил друг. Это очень удобно при работе над драйверами устройств и другими разработками, связанными с COM-портом. Виртуальный последовательный COM-порт дает вам возможность тестировать поведение COM-портов без целевого устройства. Вы можете создать неограниченное количество портов, способных имитировать все настройки реальных com-портов. Программное обеспечение также включает в себя такие функции, как разделение последовательных портов, объединение COM-портов, использование пакетных соединений COM-портов и другие интересные функции.

На этом статья закончена, спасибо, что нашли время прочитать. Хотя невозможно перечислить все существующие инструменты, я надеюсь, что некоторые из этих инструментов будут вам полезны.

(Проголосуй первым!)
Загрузка...
51 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *