소프트웨어 개발은 일반적으로 어렵지만 임베디드 시스템의 경우 완전히 새로운 수준입니다. 펌웨어 개발자는 하드웨어 개발에 대한 좋은 지식과 임베디드 프로세서의 내부 작동을 이해해야합니다. 오늘 기사에서는 높은 수준의 효율성을 달성하고 펌웨어 개발을 지루 하게 만드는 몇 가지 사항을 제거하는 데 사용할 수있는 도구와 팁 을 공유 할 것입니다.
임베디드 소프트웨어 개발은 "일반"소프트웨어 개발과 유사한 개발 프로세스를 거칩니다. 채택 된 개발 / 관리 모델에 관계없이 임베디드 소프트웨어 개발 에는 일반적으로 다음 단계가 포함됩니다.
- 제품 요구 사항 개발
- 시스템 설계 및 알고리즘 개발
- 코딩
- 테스팅
이러한 단계 에서 발생하는 몇 가지 어려움 과 효율성과 생산성을 높일 수있는 도구 중 일부를 살펴 보겠습니다.
1. 제품 요구 사항 개발
제품 사양은 종종 보드 설계자를 염두에두고 수행됩니다. 일반적으로 펌웨어 개발에 도움이 될 수있는 정보가 거의 포함되어 있지 않으므로 임베디드 소프트웨어 개발자는 결국 참조 용으로 사용할 수없는 250 페이지 (평균) 문서의 결함을 갖게되며 신중하게 고려하지 않으면 쉽게 설계를 감독하게 될 수 있습니다., 전체 프로젝트 실패가 아닌 경우 프로젝트 시간 프레임이 연장됩니다. 문서에는 레지스터 또는 해당 비트 필드에 대한 정보가 거의 포함되지 않습니다.무엇보다도 펌웨어 개발자가 문서를 검색하여 어떤 레지스터가 어떤 그룹에 속해 있고 어떤 비트 필드가 어떤 레지스터에 속하는지 등을 식별하는 데 몇 시간이 걸립니다. 다음은보다 유용한 프로젝트 사양 문서의 개발을 보장하기 위해 고려할 수있는 몇 가지 팁입니다.
레지스터 설명 사용
위에서 설명한 것처럼 펌웨어 개발자는 시스템의 모든 부분을 효과적으로 제어 할 수 있으려면 프로젝트의 모든 제어 요소 (CPU, MCU 등)의 모든 레지스터, 메모리 등의 복잡성을 이해해야합니다. 이를 적용 하기 위해 펌웨어 개발자는 사양 문서에 메모리 맵과 함께 레지스터에 대한 적절한 설명이 포함되도록 할 수 있습니다. 제어 요소의 모든 레지스터에는 문서 전체에서 쉽게 식별 할 수있는 고유 한 이름이 할당 될 수 있으며 모두 핫 링크되어 문서 내의 이름, 위치, 블록 및 주소를 나타내는 목록으로 이어질 수 있습니다. 각 레지스터.
작업 설명
사양 문서를 임베디드 소프트웨어 개발자에게 유용하게 만드는 또 다른 방법은 각 블록이 수행해야하는 작업과 수행 방법을 설명하는 것 입니다. 또한이 단계에서 각 블록 아래에 오류 처리 계획이 있어야합니다. 본질적으로 이것은 펌웨어 개발자가 말하는 것처럼 보입니다. "내가 여기에 도착했을 때, 나는 이것을해야만한다, 이것, 이것, 이것, 이것 저것이 일어나지 않도록 보장한다." 이를 통해 개발자의 작업을 안내하고 설계가 시작되기 전에 프로젝트를 평가하여 잠재적 인 오류와 버그를 식별하여 귀중한 시간과 비용을 절약 할 수 있습니다.
문서 구조, 읽기 쉬운 글꼴 사용 (개발자가 피곤할 때도 작업 할 수있는 것), 가능한 경우 차트 및 그림을 포함하여이 단계 이후 펌웨어 팀의 효율성을 높일 수있는 다른 요소가 있습니다.
2. 시스템 설계 및 알고리즘 개발
이 단계에는 의사 코드, 순서도, 상태 머신 및 펌웨어 설계와 관련된 모든 것이 포함됩니다. 이 단계에서는 생각을 정리하고, 프로젝트와 관련된 레거시 / 이전에 작성된 소프트웨어를 탐색하고, 자신 만의 플로차트, 상태 머신 등을 개발하는 데 많은 도구를 사용할 수 있습니다. 이러한 도구 중 일부는 아래에서 설명합니다.
PIM
제품 개발의이 단계에서 개발자는 웹 링크에서 공식에 이르기까지 프로젝트에 대한 리소스를 수집 할 때 많은 낙서를하는 경향이 있습니다.이 정보를 추적하는 가장 좋은 방법 중 하나는 나중에 유용하게 사용할 수 있도록 PIM을 사용하는 것입니다. (제품 정보 관리) 도구. 꽤 많은 PIM이 있지만 몇 가지 뛰어난 기능에 대해 언급하겠습니다.
1. Evernote
Evernote는 모든 플랫폼에서 사용할 수있는 메모를 작성하는 데 도움이되므로 버스 집에있는 동안 PC에서 작성한 메모를 확인할 수 있습니다. 메모는 잘 정리되어 있고 완전히 검색 할 수 있으므로 항상 필요한 것을 찾을 수 있습니다.
2. 트렁크 노트
트렁크 노트는 위키와 유사한 노트 작성 응용 프로그램입니다. 그것은 메모 작성에 위키의 모든 조직적인 힘을 가져다줍니다. 휴대폰 기반 애플리케이션이지만 WIFI를 통해 PC와 쉽게 동기화 할 수 있습니다.
Tiddlywiki 등과 같은 다른 종류의 PIM. 각각은 특정 개인에게 더 매력적일 수있는 기능을 제공하며 최종적으로 결정하기 전에 일부 샘플링을 수행 할 수 있습니다.
레거시 코드 이해
설계 단계에서 매우 유용한 또 다른 도구 그룹은 레거시 코드를 이해하는 도구입니다. 설계중인 제품이 이전 제품의 개선 된 버전 인 상황에서 개발자는이 새 프로젝트에 대한 아이디어와 코드를 얻기 위해 이미 수행 된 작업을 검토하는 것이 유용 할 수 있습니다. 특히 이전 소프트웨어를 구축 한 팀의 일원이 아닌 경우 이는 상당히 긴 길이 일 수 있습니다. 트리를 구축하고 이미 작성된 코드에서 문서 및 플로차트를 생성하는 데 도움이되는 많은 소프트웨어가 있습니다.
1. 독소
Doxygen은 소스 코드에서 문서를 만드는 데 도움이되는 매우 강력한 도구입니다. 주로 C ++에서 작동하도록 설계되었지만 C, Python 및 일부 다른 언어에서도 작동합니다. 모든 코드의 코드 구조를 추출 할 수있는 기능이있어 코드를 시각화하는 데 도움이되는 자동 생성 된 종속성 그래프와 상속 다이어그램을 제공합니다.
2. Graphviz
웹 사이트에 따르면 graphviz는 추상적 인 그래프와 네트워크의 다이어그램으로 구조 정보를 제공하는 데 도움이됩니다. Doxygen과 함께 사용하여 생성 된 그래픽을 더 잘 이해할 수 있습니다.
3. Srecord
Srecord는 펌웨어 이미지를 조작하고 다른 파일 형식간에 변환하는 강력한 도구입니다. 바이트 블록에서 CRC 및 체크섬을 계산하고 수행하고 버그가있는 도구 모음으로 인해 생성 된 오류 파일을 수정하며 파일 섹션을 필터링하거나 이동하는 데 사용할 수 있습니다. 사용에 대한 자세한 정보는 SourceForge 페이지에서 찾을 수 있습니다.
이 범주에 속하는 다른 도구로는 CrystalRev 및 Hexplorer가 있습니다.
알고리즘 개발
모든 연구 및 메모 작성은 프로젝트의 의사 코드 및 흐름도로 회전하는 알고리즘 개발에 통합됩니다. 플로우 차트 개발을위한 여러 도구가 존재하며 대부분이 펌웨어 개발에만 국한되지는 않지만, 단순히 작업을 완료하고 제품 개발주기 동안 차트를 유지하는 데 도움이되는 유용하고 중요한 기능을 제공합니다. 다음은 순서도 작성을위한 최고의 도구입니다.
1. QFSM
QFSM은 유한 상태 기계를 설계하고 시뮬레이션하기위한 그래픽 도구입니다. 설계를 시뮬레이션 할 수있는 능력은이 그룹의 다른 소프트웨어보다 훨씬 좋습니다. FPGA 및 유사한 타겟 하드웨어를위한 상태 머신을 설계 할 때 특히 유용합니다.
2. 루시드 차트
Lucid 차트는 틀림없이 가장 좋고 가장 유연한 순서도 소프트웨어입니다. 웹 기반이며 여러 장치간에 작업하고 팀원과 실시간으로 공동 작업 할 수있는 팀 기능이 있습니다.
3. Microsoft Visio
Visio는 현재 최고의 그래픽 도구 중 하나입니다. 무엇이든 쉽게 설명 할 수 있도록 다양한 필드의 개체 배열이 있습니다. 그러나 팀 간의 공동 작업을 향상시키는 기능은 제공되지 않으며 설치된 Windows 시스템에서만 사용할 수 있습니다.
4. Google 프레젠테이션
오늘날 세계에서 제품 개발의 핵심 요소 중 하나는 팀이 어디에 있든 효과적으로 협업 할 수있는 도구를 사용하는 것입니다. 이것이 바로 Google 슬라이드가 제공하는 것입니다. 소프트웨어 흐름도에서 조직도 및 마인드 맵에 이르기까지 모든 종류의 차트를 개발하는 데 사용할 수 있습니다. 클라우드 기반이며 거의 모든 인기있는 브라우저에서 작동합니다.
플로우 차트 생성 및 일반적인 알고리즘 개발을위한 몇 가지 다른 도구가 있으며, 각각 고유 한 장단점이 있습니다.
3. 임베디드 펌웨어 코딩
이 시점까지 언급 된 모든 것이 여기로 이어집니다. SDK 및 IDE의 세계,이 단계에서 도구의 선택은 대상 장치 및 장치에 내장되는 기능에 따라 달라집니다. 따라서 MPLAB 등과 같은 인기있는 SDK 및 IDE는 토론에서 제외하고 계속 유지하겠습니다. 본질적으로 더 보완적인 도구에.
1. QT (GUI 개발)
디스플레이 (대화 형이든 아니든)는 요즘 사용자에게 피드백을 제공하는 가장 인기있는 매체이며 QT의 SDK는 최고 중 하나이며 임베디드 서클 내의 누구에게도 낯선 사람이 아닐 것입니다. 대상 플랫폼 또는 전체 프로젝트 개발에 사용되는 프로그래밍 언어에 관계없이 임베디드 장치 용 복잡한 GUI 기반 응용 프로그램을 쉽게 개발할 수있는 "끌어서 놓기"기능을 제공합니다. 기본적으로 코드를 사용하여 사용자 인터페이스를 만드는 것과 관련된 스트레스를 제거합니다.
2. (빠른 프로토 타이핑)
임베디드 소프트웨어 개발에서 가장 큰 병목 현상 중 하나는 소프트웨어가 개발되는 동안 이동 중에도 하드웨어를 테스트 할 수 없다는 사실입니다. 종종 사용 가능할 때 펌웨어 개발자는 하드웨어가 거의 또는 아무것도하지 않을 준비가 될 때까지 전체 시간을 기다리도록 만들었습니다. 이것은 리드 타임을 증가시키고 제품의 품질을 향상시킬 수있는 하드웨어 엔지니어와 펌웨어 개발자 사이에 일종의 동기화를위한 공간을 만들지 않습니다. 이 문제를 해결하기 위해 VaST 직원 들은 가상 하드웨어 프로토 타입 을 만드는 데 사용할 수있는 전자 시스템 수준의 가상 프로토 타이핑 플랫폼을 만들었습니다. 하드웨어가 준비되기 전에 시스템 성능을 결정하기 위해 임베디드 소프트웨어를 실행할 수 있습니다.
3. Doxygen (문서)
코드 작성에서 가장 중요한 부분 중 하나는 문서이며 가장 널리 사용되는 도구 중 하나는 Doxygen입니다. 레거시 소프트웨어를 이해하는 데 사용하는 것 외에도 Doxygen은 코드에서 주석을 자동으로 추출하고이를 포함하는 문서를 생성하는 기능이 있습니다. Doxygen 구조는 파일을 그래픽으로 포함하고 코드에 사용되는 모든 함수, 변수 및 매크로에 대한 참조를 만듭니다. Doxygen과 graphviz를 결합하여 순서도 및 데이터 순서도를 문서에 포함 할 수도 있습니다.
4. GIT (버전 제어 시스템)
요즘에는 버전 관리 시스템없이 어떤 유형의 소프트웨어를 개발하는 사람이 있다고 믿기 어렵지만 만약 그렇게한다면 실수로 이어질 수있는 시간과 비용이들 수 있습니다. Git은 여러 가지 이유로 모든 버전 관리 도구 중에서 두드러집니다. 오픈 소스이며 빠르고 효율적이며 대부분 로컬입니다. Asides Git, Subversion과 같은 도구도 언급 할 가치가 있습니다.
임베디드 펌웨어 테스트
테스트는 모든 개발 프로세스에서 중요한 부분입니다. 펌웨어 오류로 인해 장치가 리콜되면 기업은 수천 달러의 손실을 입으므로 개발 과정에서 매우 심각하게 고려해야 할 부분 중 하나입니다. 코드 테스트를위한 첫 번째 도구 세트와 코딩을 함께 사용하는 경우가 많으며 프로젝트에 사용되는 IDE 또는 SDK 내의 디버거 일 것입니다. 테스트는 다양한 형태로 제공되며 다양한 단계에서 수행되므로 다양한 도구가 포함됩니다. 테스트 도구는 펌웨어 개발을 통해 설계 검증에서 정적 분석 및 런타임 테스트 도구에 이르기까지 다양합니다. 다음은 제가 정말 유용하다고 생각하는 몇 가지 도구입니다.
1. 크리스탈 REV
Crystal revs는 코드 연구를위한 도구입니다. C / C ++ 코드에서 플로차트를 생성하는 데 사용할 수 있으므로 자신의 코드를 검토하고 예비 설계가 구현되었는지 확인하는 데 유용한 도구입니다. Crystal rev를 사용하면 설계와 구현의 차이를 빠르게 확인할 수 있습니다. 코드에서 순서도, 데이터 및 통화 흐름을 생성하는 기능은 레거시 코드를 분석하는 데 유용한 도구가됩니다.
2. PC- 린트
PC-lint는 가장 오래된 펌웨어 테스트 도구 중 하나입니다. 소프트웨어를 분석하여 버그, 보안 취약성을 식별하고 코드가 업계 표준에 따라 작성되었는지 확인할 수 있습니다. 유사한 도구로는 polyspace, LRDA, Eggplant 및 Tessy가 있습니다.
3. Wireshark
이것은 네트워크 장치를 구축 할 때 유용합니다. 본질적으로 패킷 스니퍼이며 장치가 전송하는 데이터를 보는 데 도움이 될 수 있습니다. 이것은 장치를 보호하는 데 도움이 될 수 있습니다.
4. 가상 직렬 포트 드라이버
eltima 소프트웨어의 VSPD는 최근에 친구가 소개 한 도구입니다. 장치 드라이버 및 기타 통신 포트 관련 개발 작업을 할 때 정말 편리합니다. 가상 직렬 com 포트는 대상 장치없이 com 포트 동작을 테스트 할 수있는 기능을 제공합니다. 실제 COM 포트의 모든 설정을 에뮬레이트 할 수있는 무제한의 포트를 만들 수 있습니다. 이 소프트웨어는 또한 직렬 포트 분할, Com 포트 병합, 다른 멋진 기능 중에서 번들 com 포트 연결 사용과 같은 기능을 제공합니다.
시간을내어 읽어 주셔서 감사합니다. 모든 도구를 나열하는 것은 불가능하지만 이러한 도구 중 일부가 유용하기를 바랍니다.