タグ付けされた質問 「firmware」

ファームウェアとは、ハードウェアを直接制御するために組み込みシステムまたはマイクロコントローラーで実行されるソフトウェアを指します。

9
ファームウェアコードまたはデータですか?
誰かがファームウェアをデバイスに「フラッシュ」したと言うと、これが実際に何を意味するのか興味があります。 ファームウェアはメモリに格納されているネイティブバイナリであり、デバイスのCPU(コンピューター上の他のEXEと同様)によって解釈できるものですか?または、ファームウェアは、デバイスにすでにハードコーディング/配線されている不変プログラムへの入力として機能する単なるデータですか? 後者の例がファームウェアでない場合、何と呼びますか?たとえば、デバイスにバイナリ(someapp.exe)があり、このバイナリを削除または変更できないとします。バイナリは、実行されると、メモリチップから入力を受け取ります。このチップにデータを「フラッシュ」することができます。したがって、その入力/構成にsomeapp.exe影響を与え、次回の実行時に影響を及ぼします。ファームウェアでない場合、これは何と呼ばれますか?
29 flash  firmware 

2
AVRおよびPICコントローラーのファームウェア保護
私が提供するマイクロコントローラーで焼いたHEXファイルを誰かが抽出できますか? それが可能な場合、誰かが自分のコードが組み込みシステムで保護されていることをどのようにして確認できますか?PICおよびAVRマイクロコントローラーの場合、どのようにしてファームウェアが複製されないように保護できますか?
23 pic  avr  embedded  firmware 

4
工場出荷時設定へのリセットはどのように機能しますか?
すべての組み込みデバイスには、何かがおかしい場合にユーザーが自分のデバイスをリセットできるようにする「工場出荷時リセット」オプションが含まれています。 STM32ボードでファームウェアを開発しています。ファームウェアには、(新しいイメージを含むバイナリファイルを送信することにより)UARTを介してアプリケーションをアップグレードできるブートローダーが含まれており、別の機能を追加したい:ファクトリーリセット。ユーザーがこのオプションを選択すると、ボードは元の画像をロードします。 工場出荷時リセットとは何ですか?バイナリファイル全体をメモリに再度読み込むことですか、それともエンドユーザーによって変更された変数を再初期化する関数を呼び出すだけですか? そうするためのベストプラクティスは何ですか? 元のFWを保存する場所は?内部または外部フラッシュにありますか?

2
すべてのトラップを常に定義する必要がありますか?
dsPIC 30F4013で、未定義のトラップが原因でコントローラーがリセットされた2つのケースを見てきました。そもそもなぜこれらのtrapが発生したのかは謎のままですが、それは私の直接の質問ではありません。トラップが決して発生しない場合でも、すべてのトラップを常に定義することは良いプログラミング手法だと考え始めているので、ランダムリセットの代わりに少なくとも明確なエラーメッセージが表示されます。これは私が知らない標準的な慣習ですか?このプラクティスに不利な点はありますか?

6
組み込みシステムでのグローバル変数の使用
私は自分の製品のファームウェアを書き始め、私はここで新人です。グローバル変数またはグローバル関数を使用しないことに関する多くの記事を読みました。8ビットシステムでグローバル変数を使用するための制限はありますか、それとも完全な「No-No」ですか。システムでグローバル変数を使用する方法、またはそれらを完全に回避する必要がありますか? 私のファームウェアをよりコンパクトにするために、このトピックに関して皆さんから貴重なアドバイスを受けたいと思います。
17 c  embedded  firmware 

5
Cでのモジュラーファームウェア設計用のメモリ割り当ての可能性
モジュラーアプローチは一般的に非常に便利(ポータブルでクリーン)であるため、可能な限り他のモジュールから独立したモジュールをプログラムするようにします。私のアプローチのほとんどは、モジュール自体を記述する構造体に基づいています。初期化関数は主なパラメーターを設定し、その後、ハンドラー(desriptive構造体へのポインター)がモジュール内の任意の関数に渡されます。 今、私はモジュールを記述する構造体のためのメモリの割り当ての最良のアプローチが何であるか疑問に思っています。可能であれば、私は次のものが欲しいです: 不透明な構造体。したがって、構造体は、提供されたインターフェイス関数を使用することによってのみ変更できます。 複数のインスタンス リンカによって割り当てられたメモリ 次の可能性があり、それはすべて私の目標の1つと矛盾しています。 グローバル宣言 複数のインスタンス、リンカーによって割り当てられますが、構造体は不透明ではありません (#includes) module_struct module; void main(){ module_init(&module); } malloc 不透明な構造体、複数のインスタンス、ただしヒープ上の割り当て module.h内: typedef module_struct Module; module.c init関数、mallocおよび割り当てられたメモリへの戻りポインタ module_mem = malloc(sizeof(module_struct )); /* initialize values here */ return module_mem; main.c内 (#includes) Module *module; void main(){ module = module_init(); } モジュール内の宣言 リンカによって割り当てられた不透明な構造体、事前定義された数のインスタンスのみ 構造体とメモリ全体をモジュールの内部に保持し、ハンドラーまたは構造体を公開しないでください。 (#includes) void main(){ …
16 c  design  firmware 

4
mcuが実行しているハードウェアバージョンを判断するための良い方法は何ですか?
私は新しい製品の設計に取り組んでおり、おそらく製品の耐用期間中に小規模または大規模なハードウェアの変更/修正が行われるでしょう。フィールドでの将来のファームウェア更新のために、ハードウェアリビジョンを決定する方法が必要です。良い戦略とは何ですか? 現在、外部抵抗を使用して2つの予備ピンを上下に引き、パターンをチェックしています。これは4つのハードウェアリビジョンのみを許可しますが、実用的な目的にはこれで十分かもしれません。将来のハードウェアリビジョンでこれらのピンの一方または両方が必要な場合、問題になる可能性があります。 より経済的な方法は、抵抗分割器をADCピンに接続することです。ハードウェアリビジョンごとに異なる値の抵抗器を使用できます。残念ながら、現在の設計には予備のADCはありません。 別の方法は、生産中にハードウェアのバージョン番号をEEPROMまたはmcuフラッシュにエンコードすることでしょうか?(現時点では、この機能はありません。) 柔軟で堅牢な方法の提案を探していると思います。 [編集] Re。@ trav1sからの提案:アドレスバス自体はありませんが、I2Cバスに24LCxx EEPROMがあります。スレーブアドレスの下位3ビットはハードワイヤードです。起動時にアドレスビットを変更してEEPROMを検索できると思います。

10
ファームウェアが実稼働環境で一意に識別されることは実用的ですか
大規模製造で利用可能なシステムがあり、一意のシリアル番号をファームウェアにプログラムしたり、PCBごとに空きメモリスペースをプログラムしたりできますか? 私のことを見つけたFDAは、医療グレードのデバイスのためにそれを強制開始することを決定しましたが、これは達成することは容易であるか、それはあなた自身の製造プロセスの開発が必要となるものですか?

6
VerilogまたはVHDL over Cを使用する動機は何ですか?
私はプログラミングのバックグラウンドを持っており、ハードウェアやファームウェア(せいぜい少し電子機器とArduino)をいじりすぎてはいません。 Cやアセンブリなどのプログラミング言語で、VerilogやVHDLなどのハードウェア記述言語(HDL)を使用する動機は何ですか? この問題は選択の問題ですか? ファームウェアがHDLで記述されているハードウェアを読むと、命令を並行して実行できるという明らかな利点があります。ただし、ファームウェアをCで書くかアセンブリで書くか(CPUが必ずしも必要ない場合、アセンブリはどのように適切ですか?) したがって、いくつか質問があります(何かを説明することをheしないでください): ファームウェアは、実際にはHDLまたはソフトウェアプログラミング言語で記述できますか、それとも同じミッションを実行するための別の方法ですか?実世界の例が欲しいです。各オプションから生じる制約は何ですか? ソフトウェアを介したファームウェアの一般的な使用は、ハードウェアアクセラレータ(GPU、ネットワークアダプタ、SSLアクセラレータなど)で使用されることを知っています。私が理解しているように、この加速は必ずしも必要ではありませんが、推奨されるだけです(たとえば、SSLや複雑なアルゴリズムの加速の場合)。すべての場合にファームウェアとソフトウェアのいずれかを選択できますか?そうでない場合は、ファームウェアが明確かつ明確に適切であるケースに満足しています。 ファームウェアのほとんどがROMまたはフラッシュに焼き付けられていることを読みました。そこにどのように表されていますか?ソフトウェアのようなビットで?もしそうなら、深遠な違いは何ですか?ファームウェアの場合、適応回路が利用可能ですか? いくつかの仮定であちこちで間違いを犯したと思いますが、ご容赦ください。ありがとうございました!

3
PROGMEMを使用する意味は何ですか?
大量のテキスト変数では、PROGMEMを使用してフラッシュメモリに保存する必要があることがわかりました。Arduinoでフラッシュ(PROGMEMを使用)とSRAM、EEPROMに大きな変数を格納することのプラスとマイナスの結果は何ですか?

4
PCBのバージョンまたは構成のエンコード
ファームウェアがボードレイアウトの使用を検出できるように、ボード上のバージョンまたは構成に関する情報を電気的にエンコードする必要があります。 可能なオプションとその賛否両論は何ですか?

6
ファームウェアでプログラムの実行はどのように行われますか?
ファームウェアドメインで作業している人から、オペレーティングシステム制御ファームウェア(USBドライブのファームウェアなど)がないと聞きました。whileループで実行されている単一のスレッドだけが外部コマンドを待機しており、これが割り込みが発生する開始点であり、その後にISRとハードウェアまで流れる制御が続きます。しかし、基本的に、ファームウェアコードを実行しているハードウェアのその部分は何ですか?CPUはありますか、それともデバイスに電源が供給されている限りトリガーされるASICベースのコードですか?通常のCPU-OSベースのシステムからファームウェアへのパラダイムシフトを理解できません。
9 cpu  asic  firmware 

2
無線でARMをアップグレードする
GSMモデムを搭載したARMボードを作成します。 ARMファームウェアを無線でアップグレードできるようにしたいと考えています。 そのための良い、信頼できる、オープンソースのソリューションはありますか? そうでない場合、この機能を備えた有料OSはありますか?

4
Arduino IDEを使用せずに、hexファイルファームウェアをターゲットボードにアップロードするにはどうすればよいですか?
IDEの使用を必要としないarduinoにファームウェア更新をアップロードするためのシェルスクリプトを実行するインストーラーを作成する方法はありますか?ファームウェアの更新が必要な場合があり、ファームウェアの更新を適用する人がIDEから更新を適用できない場合があります。それはavrdudeに関係しているのではないかと思いますが、その方法を学ぶために、自分自身で運がなかっただけです。 「シェルスクリプトを実行するインストーラーを作成する」の部分を扱えます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.