2017-06-01 5 views
0

SAM4Cマイクロコントローラプラットフォームでは、time()関数がライブラリ内で呼び出されます。私は、デバッガから起動するときに、これが適切な時間(1496321612)を与えることを知りました。しかし、ボード上でハードウェアをリセットし、フラッシュされたファームウェアがデバッガなしで実行されると、time()が返されず、この時点でファームウェアがスタックします。Segger JTAG ICEでマイクロコントローラプラットフォームに時間が設定されている理由は?

どのように時間が設定されているのだろうか。私はATMEL JTAG ICE (Segger)経由でのみデバッグし、時間を明示的に設定しないでください。私のPCで日付を変更すると、デバッグ中に別の時間に戻ります... Segger ICEによってデバッグセッションが開始され、時間が設定されていないとファームウェアがクラッシュするのはなぜですか? ?

+0

どのIDEを使用していますか? – WedaPashi

答えて

2

これは、というセミホストと呼ばれるメカニズムを使用して実現できます。全体的には、ターゲットがホストコンピュータ(デバッガHW/SWを実行するもの)上で利用可能ないくつかの機能を使用できるようになっています。単純化されたメカニズムは次のようなものです。

  1. ターゲットファームウェアは、セミホスティングをサポートするライブラリにリンクされています。
  2. ファームウェアがセミホスト機能を呼び出すたびに、デバッガイベントが発生しています(特定のプラットフォームによっては、SVC/SWIコール、特殊ブレークポイントなど)。
  3. デバッガは、このイベントを「キャッチ」しています。何が要求されたのか(これはIO機能、またはあなたの場合のような時間の要求です)、この要求をホストソフトウェアに渡します。
  4. ホストソフトウェアは要求されたことを行い、その結果をデバッガに渡します。
  5. デバッガは結果をターゲットFWに渡します。
  6. ターゲットが再開しています。
関連する問題