- 1. Разработване на изисквания за продукти
- 2. Системен дизайн и разработване на алгоритъм
- 3. Кодиране за вграден фърмуер
- Тестване на вграден фърмуер
Разработката на софтуер обикновено е трудна, но за вградената система е на съвсем ново ниво на трудност. Разработчиците на фърмуер трябва да имат добри познания за разработването на хардуер и да разбират вътрешната работа на вградения процесор. За днешната статия ще споделя инструменти и съвети, които биха могли да се използват за постигане на високо ниво на ефективност и премахване на някои от нещата, които правят разработката на фърмуера досадна.
Разработката на вграден софтуер преминава през подобен процес на разработка с "обикновена" разработка на софтуер. Независимо от приетия модел за разработка / управление, Embedded Software Development обикновено включва следните стъпки:
- Разработване на изискване за продукт
- Системен дизайн и разработване на алгоритъм
- Кодиране
- Тестване
Ще разгледаме някои от трудностите, които идват с тези етапи, и някои от инструментите, които биха могли да повишат ефективността и производителността.
1. Разработване на изисквания за продукти
Спецификациите на продуктите често се правят с оглед на дизайнерите на дъските. Обикновено съдържа малко информация, която може да подпомогне развитието на фърмуера, така че вграденият разработчик на софтуер завършва с дефектен документ от 250 страници (среден), който не може да се използва за препратки и ако не бъде внимателно обмислен, лесно може да доведе до пропуски в дизайна, което от своя страна, водят до удължаване на времевата рамка на проекта, ако не и цялостен провал на проекта. Документите рядко съдържат информация за регистрите или техните битови полетаосвен всичко друго и това струва на разработчиците на фърмуера няколко човешки часа, докато търсят в документа, за да идентифицират неща като кой регистър принадлежи към коя група и кое битово поле принадлежи към кой регистър. По-долу има няколко съвета, които биха могли да бъдат взети предвид, за да се гарантира разработването на по-полезни документи за спецификация на проекти.
Използване на описания на регистрите
Както беше обсъдено по-горе, разработчиците на фърмуер трябва да разберат тънкостите на всички регистри, памети и т.н. на всички контролни елементи (CPU, MCU и т.н.) в даден проект, за да могат ефективно да контролират всички части на системата. За да поставят това на място, разработчиците на фърмуер могат да гарантират, че документът със спецификацията съдържа правилно описание на регистрите заедно с карти на паметта. На всички регистри в контролния елемент може да бъде присвоено отличително име, което ги улеснява за идентифициране в документа и всички те могат да бъдат горещо свързани, така че да водят до списък в документа, който посочва името, местоположението, блока и адреса на всеки регистър.
Описания на задачите
Друг начин, чрез който документите за спецификация могат да станат полезни за разработчиците на вграден софтуер, е чрез описване на това, което всеки блок трябва да направи и как трябва да го направи. Също на този етап трябва да има планове за обработка на грешки под всеки блок. По същество това изглежда така, както казва разработчикът на фърмуера; „Когато стигна тук, трябва да направя това, това и това, като гарантирам, че това, това и онова не се случва“. Това помага за насочването на работата на разработчика и помага за оценка на проекта дори преди дизайнът да започне да идентифицира потенциални грешки и грешки, спестявайки ценно време и пари.
Има и други фактори, включително структурата на документите, използването на лесни за четене шрифтове (нещо, с което разработчиците могат да работят, дори когато са уморени), диаграми и снимки, когато е възможно, което може да повиши ефективността на екипа на фърмуера след този етап.
2. Системен дизайн и разработване на алгоритъм
Този етап включва разработването на псевдокодовете, блок-схемите, държавните машини и всичко, свързано с дизайна на това, което е фърмуерът. За този етап могат да се използват немалко инструменти, които помагат да се организират мисли, да се изследва наследения / написан преди това софтуер около проекта и да се разработи ваша собствена блок-схема, държавна машина и др. Някои от тези инструменти са разгледани по-долу.
PIM
На този етап от разработването на продукта разработчиците са склонни да драскат много, докато събират ресурси по проекта от уеб връзки до формули и т.н. Един от най-добрите начини да се следи тази информация, така че да бъде полезна по-късно, е използването на PIM (инструменти за управление на информацията за продукта) инструменти. Има доста PIM, но ще спомена няколко с някои изключителни характеристики.
1. Evernote
Evernote ви помага да правите бележки, които са достъпни на всяка платформа, така че можете да проверите бележката, която сте направили на вашия компютър, докато сте в автобуса до дома. Бележките са добре организирани и са напълно достъпни за търсене, така че винаги ще намерите това, което ви трябва.
2. TrunkNote
Trunk бележка е подобно на Wiki приложение за водене на бележки. Той носи цялата организационна сила на уикитата за водене на бележки. Това е приложение, базирано на мобилен телефон, но може лесно да се синхронизира с компютър чрез WIFI.
Други видове PIM като Tiddlywiki и др. Всеки от тях се предлага с функции, които могат да го направят по-привлекателен за конкретни индивиди и могат да вземат проби, преди най-накрая да се спрете на такъв.
Разбиране на наследения код
Друга група инструменти, които са много полезни по време на етапа на проектиране, са инструменти за разбиране на наследени кодове. В ситуации, когато проектираният продукт е подобрена версия на предишен продукт, разработчикът може да намери за полезно да прегледа вече свършената работа, за да получи някои идеи и може би битове код за този нов проект. Това може да е доста дълъг път, особено ако не сте част от екипа, създал предишния софтуер. Съществуват доста голям брой софтуер, който помага за изграждането на дървета, създаване на документация и диаграми от вече написания код.
1. Доксиген
Doxygen е доста мощен инструмент, който помага да се създаде документация от изходните кодове. Основно е проектиран да работи със C ++, но работи и със C, Python и някои други езици. Той има способността да извлича кодовата структура на всеки код, като предоставя автоматично генерирани графики на зависимости и диаграми за наследяване, за да ви помогне да визуализирате кода.
2. Graphviz
Според техния уебсайт, graphviz помага да се представи структурна информация като диаграми на абстрактни графики и мрежи. Той може да се използва заедно с Doxygen за по-добро разбиране на графиките, произведени от него.
3. Срекорд
Srecord е мощен инструмент за манипулиране на изображения на фърмуера и конвертиране между различни файлови формати. Той може да се използва за изчисляване и извършване на CRC и контролни суми върху байтови блокове, коригиране на файлове с грешки, създадени поради бъги вериги с инструменти, и филтриране или преместване на раздели на файлове между другото. Повече информация за използването му може да се намери на страницата SourceForge.
Някои други инструменти, които попадат в тази категория, са CrystalRev и Hexplorer и други.
Разработване на алгоритми
Всички изследвания и водене на бележки за разработване на алгоритми се отделят в псевдокодове и блок-схеми за проекта. Съществуват няколко инструмента за разработване на блок-схеми и макар че повечето от тях не са изключителни за разработване на фърмуер, те предоставят полезни и важни функции, които просто свършват работата и също помагат за поддържането на диаграмите през целия цикъл на разработване на продукта. По-долу са някои от най-добрите инструменти за диаграми.
1. QFSM
QFSM е графичен инструмент за проектиране и симулиране на машини с крайно състояние. Способността му да симулира дизайна го прави по-добър от повечето други програми в тази група. Това е особено полезно, когато проектирате държавни машини за FPGA и подобен целеви хардуер.
2. Ясна диаграма
Lucid chart е може би най-добрият и най-гъвкав софтуер за диаграми на потоците там. Той е уеб-базиран и има функции на екипа, които ви позволяват да работите между множество устройства и да си сътрудничите в реално време със съотборници.
3. Microsoft Visio
Visio е един от най-добрите графични инструменти в момента. Той има набор от обекти от различни полета, което улеснява описанието на каквото и да било. Той обаче не се предлага с функции, които подобряват сътрудничеството между екипите и може да се използва само на Windows машина, на която е инсталиран.
4. Google Презентации
Едно от ключовите неща при разработването на продукти в съвременния свят е използването на инструменти, които позволяват на екипите да си сътрудничат ефективно, където и да се намират, и това е едно нещо, което Google слайдовете носи на борда. Той може да се използва за разработване на всякакъв вид диаграми от диаграми на софтуерни потоци до организационни диаграми и мисловни карти. Той е базиран на облак и работи в почти всички популярни браузъри.
Съществуват няколко други инструмента за създаване на блок-схеми и разработване на общ алгоритъм, както обикновено, всеки със свои плюсове и минуси.
3. Кодиране за вграден фърмуер
Всичко, споменато до този момент, води дотук. Светът на SDK и IDE, изборът на инструменти на този етап зависи от целевото устройство и характеристиките, които трябва да бъдат вградени в устройството, поради тази причина ще изключа популярните SDK и IDE като MPLAB и т.н. от дискусията и просто ще се придържам към инструменти, които са по-допълващи се по своята същност.
1. QT (разработка на GUI)
Дисплеите (интерактивни или не) са най-популярните медии за предоставяне на обратна връзка на потребителите в наши дни, а SDK на QT е един от най-добрите там и вероятно не е непознат за никого от вградения кръг. Той осигурява функции за „плъзгане и пускане“, които улесняват разработването на сложни, базирани на GUI приложения за вградени устройства, независимо от целевата платформа или езика за програмиране, използван за цялостното развитие на проекта. Това основно премахва стреса, свързан с използването на код за създаване на потребителски интерфейси.
2. (Бързо прототипиране)
Едно от най-големите тесни места при разработването на вграден софтуер е фактът, че хардуерът обикновено не е на разположение, за да тества нещата в движение, докато софтуерът се разработва. Често пъти, когато е налице, разработчиците на фърмуера биха били накарани да изчакат цялото време, необходимо на хардуера да е готов да прави малко или нищо. Това увеличава времето за изпълнение и не създава място за вида синхронизация между хардуерните инженери и разработчиците на фърмуер, който би увеличил качеството на продукта. За да помогнат за решаването на този проблем, момчетата от VaST създадоха платформа за виртуално прототипиране на ниво електронни системи, която може да се използва за създаване на виртуален хардуерен прототип на който може да се изпълни вграден софтуер, за да се определи производителността на системите преди хардуерът да е готов.
3. Кислород (Документация)
Една от най-важните части на писането на всеки код е документацията и един от най-популярните инструменти за това е Doxygen. Освен използването му за разбиране на наследения софтуер, Doxygen има способността автоматично да извлича коментари от код и да създава документация, която го включва. Кислородните структури включват файлове графично и създават референции за всяка функция, променлива и макрос, използвани във вашия код. Блок-схеми и диаграми на потока на данни също могат да бъдат вградени в документацията чрез комбиниране на Doxygen с graphviz.
4. GIT (системи за контрол на версиите)
Трудно е да се повярва, че някой разработва софтуер от всякакъв тип без някаква система за контрол на версиите в наши дни, но в случай, че го направите, това е доста лоша идея, която може да доведе до грешки, които ще ви струват време и пари. Git се откроява сред всички инструменти за контрол на версиите по няколко причини. Той е с отворен код, бърз, ефективен и предимно локален. Asides Git, инструменти като subversion също заслужават да бъдат споменати.
Тестване на вграден фърмуер
Тестването е важна част от процеса на разработване на каквото и да било. Фирмите губят хиляди долари при изземване на устройства поради грешки на фърмуера, така че това е една част от разработката, която трябва да се вземе много сериозно. Често се прави, ръка за ръка, с кодиране и първият набор от инструменти за тестване на код, вероятно са дебъгърите в IDE или SDK, използвани за проекта. Тестването се предлага в различни форми и се извършва на различни етапи, като като такова включва различни видове инструменти. Инструментите за тестване формират фърмуерни разработки, като валидират дизайна до статични анализи и тестови инструменти по време на изпълнение. По-долу има няколко инструмента, които намирам за наистина полезни.
1. Кристал REV
Crystal revs е инструмент за изучаване на код. Той може да се използва за генериране на блок-схема от C / C ++ код, което го прави чудесен инструмент за преглед на вашия собствен код и да видите дали предварителният дизайн е това, което е приложено. С кристалната честота на оборотите ще можете бързо да видите разликата между дизайна и изпълнението. Неговата способност да генерира поточни диаграми, данни и поток на обаждания от кодове също го прави инструмент, полезен за анализ на наследения код.
2. PC- Lint
PC-lint е един от най-старите инструменти за тестване на фърмуер наоколо. Той е в състояние да анализира софтуер за идентифициране на грешки, уязвимости в сигурността и да гарантира, че кодът е написан в съответствие с индустриалните стандарти. Подобни инструменти включват polyspace и LRDA, патладжан и Теси, наред с други.
3. Wireshark
Това е полезно при изграждането на мрежови устройства. Това е по същество пакетно снифър и може да помогне за преглед на данните, които вашето устройство предава. Това може да помогне за обезопасяването на устройството.
4. Драйвер за виртуален сериен порт
Софтуерът VSPD от eltima е инструмент, който наскоро бях представен и от приятел. Това е много удобно, когато работите с драйвери на устройства и други разработки, свързани с порта. Виртуалният сериен com порт ви дава възможност да тествате поведението на com порта без целевото устройство. Можете да създадете неограничен брой портове, които могат да емулират всички настройки на реалните com портове. Софтуерът също така се предлага с функции като разделяне на серийни портове, сливане на Com портове, използване на свързвания com порт наред с други страхотни функции.
Това е всичко за тази статия, благодаря, че отделихте време за четене. Въпреки че е невъзможно да се изброят всички инструменти там, надявам се, че някои от тези инструменти са полезни.