ソフトウェア開発は一般的に困難ですが、組み込みシステムの場合、まったく新しいレベルの困難になります。ファームウェア開発者は、ハードウェア開発について十分な知識を持ち、組み込みプロセッサの内部動作を理解している必要があります。今日の記事では、高レベルの効率を達成し、ファームウェア開発を面倒にするいくつかのことを排除するために使用できるツールとヒントを共有します。
組み込みソフトウェア開発は、「通常の」ソフトウェア開発と同様の開発プロセスを経ます。採用された開発/管理モデルに関係なく、組み込みソフトウェア開発には通常、以下の手順が含まれます。
- 製品要件の開発
- システム設計とアルゴリズム開発
- コーディング
- テスト
これらの段階に伴ういくつかの問題と、効率と生産性を向上させる可能性のあるいくつかのツールについて検討します。
1.製品要件の開発
多くの場合、製品の仕様はボード設計者を念頭に置いて作成されます。通常、ファームウェア開発に役立つ情報はほとんど含まれていないため、組み込みソフトウェア開発者は、参照に使用できない欠陥のある250ページ(平均)のドキュメントになり、慎重に検討しないと、設計の見落としにつながりやすくなります。 、プロジェクト全体の失敗ではないにしても、プロジェクトの時間枠が延長されることになります。ドキュメントにレジスタまたはそのビットフィールドに関する情報が含まれることはめったにありませんとりわけ、ファームウェア開発者は、ドキュメントを検索して、どのレジスタがどのグループに属し、どのビットフィールドがどのレジスタに属しているかなどを特定するため、数時間かかります。以下は、より有用なプロジェクト仕様書の開発を確実にするために考慮できるいくつかのヒントです。
レジスタ記述の使用
上記のように、ファームウェア開発者は、システムのすべての部分を効果的に制御できるように、プロジェクト内のすべての制御要素(CPU、MCUなど)のすべてのレジスタ、メモリなどの複雑さを理解する必要があります。これを実施するために、ファームウェア開発者は、仕様書にメモリマップとともにレジスタの適切な説明が含まれていることを確認できます。制御要素内のすべてのレジスタには、ドキュメント全体で簡単に識別できるように固有の名前を割り当てることができ、ドキュメント内の名前、場所、ブロック、およびアドレスを示すリストにつながるように、すべてをホットリンクすることができます。各レジスタ。
タスクの説明
仕様書を組み込みソフトウェア開発者に役立てるもう1つの方法は、各ブロックが何を実行するのか、どのように実行するのかを説明することです。また、この段階で、各ブロックの下でエラー処理の計画を立てる必要があります。基本的に、これはファームウェア開発者が言っているように見えます。 「私がここに着いたとき、私はこれ、これ、そしてこれをし、これ、これ、そしてそれが起こらないようにしなければなりません」。これは、開発者の作業をガイドし、設計が潜在的なエラーやバグの特定を開始する前でもプロジェクトを評価するのに役立ち、貴重な時間とお金を節約します。
ドキュメントの構造、読みやすいフォントの使用(開発者が疲れていても使用できるもの)、可能な場合はチャートや画像など、他の要因もあります。これらはすべて、この段階の後、ファームウェアチームの効率を高める可能性があります。
2.システム設計とアルゴリズム開発
この段階では、擬似コード、フローチャート、ステートマシン、およびファームウェアの設計に関連するすべてのものを開発します。この段階では、かなりの数のツールを使用して、考えを整理し、プロジェクトに関連するレガシー/以前に作成されたソフトウェアを探索し、独自のフローチャート、ステートマシンなどを開発できます。これらのツールの一部を以下で説明します。
PIM
製品開発のこれらの段階では、開発者はWebリンクから数式など、プロジェクトに関するリソースを収集するときに多くの落書きをする傾向があります。この情報を追跡して後で役立つようにするための最良の方法の1つは、PIMを使用することです。(製品情報管理)ツール。そこにはかなりの数のPIMがありますが、いくつかの優れた機能を備えたものについて説明します。
1.Evernote
Evernoteを使用すると、どのプラットフォームでも利用できるメモを取ることができるため、バスの家にいるときにPCで作成したメモを確認できます。メモはよく整理されており、完全に検索できるため、いつでも必要なものを見つけることができます。
2. TrunkNote
トランクノートは、Wikiのようなノート取りアプリケーションです。それは、ウィキのすべての組織力をメモを取ることにもたらします。これは携帯電話ベースのアプリケーションですが、WIFIを介してPCと簡単に同期できます。
Tiddlywikiなどの他の種類のPIM。それぞれに、特定の個人にとってより魅力的な機能があり、最終的に1つに落ち着く前にサンプリングを行う場合があります。
レガシーコードを理解する
設計段階で非常に役立つツールのもう1つのグループは、レガシーコードを理解するためのツールです。設計中の製品が以前の製品の改良版である場合、開発者は、この新しいプロジェクトのアイデアやコードを取得するために、すでに行われた作業を確認すると役立つ場合があります。これは、特に以前のソフトウェアを構築したチームの一員でない場合は、かなり長い道のりかもしれません。ツリーを構築し、すでに作成されたコードからドキュメントやフローチャートを作成するのに役立つソフトウェアはたくさんあります。
1.ドキシゲン
Doxygenは、ソースコードからドキュメントを作成するのに役立つ非常に強力なツールです。これは主にC ++で動作するように設計されていますが、C、Python、およびその他のいくつかの言語でも動作します。コードのコード構造を抽出する機能があり、コードの視覚化に役立つ自動生成された依存関係グラフと継承図を提供します。
2. Graphviz
彼らのウェブサイトによると、graphvizは抽象的なグラフとネットワークの図として構造情報を提示するのに役立ちます。Doxygenと一緒に使用すると、Doxygenによって生成されるグラフィックをよりよく理解できます。
3.スレコード
Srecordは、ファームウェアイメージを操作し、異なるファイル形式間で変換するための強力なツールです。バイトブロックのCRCとチェックサムの計算と実行、バグのあるツールチェーンが原因で作成されたエラーファイルの修正、ファイルのセクションのフィルタリングまたは移動などに使用できます。その使用法の詳細については、SourceForgeのページをご覧ください。
このカテゴリに分類される他のツールには、 CrystalRev や Hexplorer などがあります。
アルゴリズムの開発
プロジェクトの疑似コードとフローチャートにスピンオフするアルゴリズムの開発に対するすべての調査とメモ取りの集合体。フローチャートを開発するためのいくつかのツールが存在し、それらのほとんどはファームウェア開発専用ではありませんが、それらは単に仕事を成し遂げるだけでなく、製品開発サイクル全体を通してチャートを維持するのに役立つ便利で重要な機能を提供します。以下は、フローチャートに最適なツールの一部です。
1. QFSM
QFSMは、有限状態マシンを設計およびシミュレーションするためのグラフィカルツールです。デザインをシミュレートする機能により、このグループの他のほとんどのソフトウェアよりもはるかに優れています。これは、FPGAおよび同様のターゲットハードウェア用のステートマシンを設計する場合に特に役立ちます。
2. Lucid Chart
Lucid Chartは、間違いなく、最も優れた、最も柔軟なフローチャートソフトウェアです。これはWebベースであり、複数のデバイス間で作業したり、チームメートとリアルタイムで共同作業したりできるチーム機能を備えています。
3. Microsoft Visio
Visioは、現在最高のグラフィックツールの1つです。さまざまなフィールドのオブジェクトの配列があり、何でも簡単に説明できます。ただし、チーム間のコラボレーションを強化する機能は付属しておらず、インストールされているWindowsマシンでのみ使用できます。
4.Googleスライド
今日の世界で製品を開発する上で重要なことの1つは、チームがどこにいても効果的にコラボレーションできるツールを使用することです。これは、Googleスライドが搭載していることの1つです。ソフトウェアフローチャートから組織図やマインドマップまで、あらゆる種類の図表を作成するために使用できます。クラウドベースであり、ほとんどすべての一般的なブラウザで動作します。
フローチャートの作成と一般的なアルゴリズム開発のためのツールは他にもいくつかあり、それぞれに長所と短所があります。
3.組み込みファームウェアのコーディング
これまでに言及されてきたすべてがここにつながります。SDKとIDEの世界、この段階でのツールの選択は、ターゲットデバイスとデバイスに組み込まれる機能によって異なります。このため、MPLABなどの人気のあるSDKとIDEを議論から除外し、そのままにします。本質的により補完的なツールに。
1. QT(GUI開発)
ディスプレイ(インタラクティブかどうか)は、最近ユーザーにフィードバックを提供するための最も人気のあるメディアであり、QTのSDKは、そこにある最高のものの1つであり、おそらく埋め込みサークル内の誰にとっても見知らぬ人ではありません。ターゲットプラットフォームやプロジェクト開発全体で使用されているプログラミング言語に関係なく、組み込みデバイス用の複雑なGUIベースのアプリケーションを簡単に開発できる「ドラッグアンドドロップ」機能を提供します。基本的に、コードを使用してユーザーインターフェイスを作成することに伴うストレスを解消します。
2.(ラピッドプロトタイピング)
組み込みソフトウェアの開発における最大のボトルネックの1つは、ソフトウェアの開発中は、ハードウェアを外出先でテストするために通常利用できないという事実です。多くの場合、それが利用可能であるとき、ファームウェア開発者は、ハードウェアがほとんどまたは何もしない準備ができるまで、その間ずっと待たされていたでしょう。これによりリードタイムが長くなり、ハードウェアエンジニアとファームウェア開発者の間で製品の品質を向上させるような同期の余地が生まれません。この問題を解決するために、VaSTのスタッフは、仮想ハードウェアプロトタイプの作成に使用できる電子システムレベルの仮想プロトタイピングプラットフォームを作成しました。 ハードウェアの準備が整う前に、組み込みソフトウェアを実行してシステムパフォーマンスを判断することができます。
3. Doxygen(ドキュメント)
コードを書く上で最も重要な部分の1つはドキュメントであり、そのための最も人気のあるツールの1つはDoxygenです。Doxygenは、レガシーソフトウェアを理解するために使用するだけでなく、コードからコメントを自動的に抽出し、それを含むドキュメントを作成する機能を備えています。Doxygen構造にはファイルがグラフィカルに含まれ、コードで使用されるすべての関数、変数、およびマクロの参照が作成されます。Doxygenとgraphvizを組み合わせることで、フローチャートとデータフロー図をドキュメントに埋め込むこともできます。
4. GIT(バージョン管理システム)
最近、ある種のバージョン管理システムなしで誰もがあらゆるタイプのソフトウェアを開発しているとは信じがたいですが、万が一の場合に備えて、時間とお金がかかる間違いにつながる可能性があるのはかなり悪い考えです。Gitは、いくつかの理由で、そこにあるすべてのバージョン管理ツールの中で際立っています。オープンソースで、高速で効率的で、ほとんどがローカルです。Gitの他に、Subversionのようなツールも言及する価値があります。
組み込みファームウェアのテスト
テストは、あらゆるものの開発プロセスの重要な部分です。ファームウェアエラーが原因でデバイスがリコールされると、企業は数千ドルを失うため、開発の一部として非常に真剣に取り組む必要があります。多くの場合、コーディングと連携して行われ、コードテスト用の最初のツールセットは、おそらくプロジェクトで使用されているIDEまたはSDK内のデバッガーです。テストにはさまざまな形式があり、さまざまな段階で実行されるため、さまざまな種類のツールが関係します。テストツールは、ファームウェア開発から静的分析およびランタイムテストツールまでの設計検証にまたがります。以下は、私が本当に役立つと思ういくつかのツールです。
1.クリスタルREV
Crystal revsは、コードを学習するためのツールです。C / C ++コードからフローチャートを生成するために使用できるため、独自のコードを確認して、予備設計が実装されているかどうかを確認するための優れたツールになります。クリスタル回転を使用すると、設計と実装の違いをすばやく確認できます。コードからフローチャート、データ、コールフローを生成する機能も、レガシーコードの分析に役立つツールになります。
2.PC-リント
PC-lintは、最も古いファームウェアテストツールの1つです。ソフトウェアを分析してバグやセキュリティの脆弱性を特定し、コードが業界標準に準拠して記述されていることを確認できます。同様のツールには、polyspace、LRDA、Eggplant、Tessyなどがあります。
3. Wireshark
これは、ネットワークデバイスを構築するときに便利です。これは本質的にパケットスニファであり、デバイスが送信しているデータを表示するのに役立ちます。これは、デバイスの保護に役立つ可能性があります。
4.仮想シリアルポートドライバー
eltimaソフトウェアによるVSPDは、私が最近友人からも紹介されたツールです。デバイスドライバやその他のCOMポート関連の開発に取り組むときに非常に便利です。仮想シリアルCOMポートを使用すると、ターゲットデバイスなしでCOMポートの動作をテストできます。実際のCOMポートのすべての設定をエミュレートできるポートを無制限に作成できます。このソフトウェアには、シリアルポートの分割、Comポートの統合、バンドルのcomポート接続の使用などの機能も備わっています。
この記事は以上です。時間を割いて読んでいただきありがとうございます。そこにあるすべてのツールをリストすることはおそらく不可能ですが、これらのツールのいくつかが役立つことを願っています。