問題タブ [openocd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
eclipse - openOCD を使用した FreeRTOS のデバッグ
openOCD を使用したカーネル認識デバッグと FreeRTOS のデバッグに必要なものを理解しようとしています。私のセットアップは次のとおりです:stm32f401cディスカバリーボード、Eclipse、openOCD 0.10、gdb。基本的に、SW4STM32 1.8.0 パッケージです。
私はすでに次のことをしました:
$_TARGETNAME configure -rtos auto
openOCD が読み取る .cfg ファイルに追加- FreeRTOS-openocd.c ファイルをプロジェクトに追加
他に何かすることはありますか?現在、gdb から次のエラーが表示されます。
ありがとう。
--更新:
問題を発見しました。RTOS スケジューラが開始される前 (つまり、メイン) に、セットアップが適切に動作しません。メインではなく最初のタスクで停止するようにgdbを変更しましたが、現在は機能しています。スケジューラーが開始される前にopenOCDは機能しますか?
openocd - st link v2 miniとopenocdを使用したプログラムnrf51822
st link v2 mini と openocd を使用して、nrf51822 ブレークアウト ボードにコードをプログラムまたはアップロードしようとしています。http://icarus-sensors.github.io/general/starting-with-nRF51822.htmlのブログ投稿チュートリアルに従っています。ただし、openocd を使用してデバイスに接続できませんでした。以下にエラーメッセージを添付します。何が間違っているのですか?または、nrf51 をプログラムできる他の簡単な方法はありますか?
GNU ARM Eclipse 64 ビット オープン オンチップ デバッガー 0.9.0-00073-gdd34716-dirty (2015-05-19-09:55) GNU GPL v2 の下でライセンス バグ レポートについては、 http: //openocd.org/docを参照してください/doxygen/bugs.html 情報 : 最初に使用可能なセッション トランスポート「hla_swd」を自動選択しています。オーバーライドするには、'transport select' を使用します。情報 : 選択されたトランスポートが低レベルのターゲット コントロールを引き継ぎました。通常の JTAG/SWD アダプター速度と比較すると、結果が異なる場合があります: 1000 kHz 情報: 要求された速度 1000 kHz に一致することができません。950 kHz を使用します。 情報: 要求された速度 1000 kHz に一致しません。 v2 JTAG v25 API v2 SWIM v4 VID 0x0483 PID 0x3748 情報: stlink api を使用 v2 情報: ターゲット電圧: 3.268965 エラー: プロシージャ 'init' で init モードに失敗しました (ターゲットに接続できません)
nrf51822 ブレイクアウト : http://www.newegg.com/Product/Product.aspx?Item=9SIA7BF37Z1712&nm_mc=OTC-Froogle&cm_mmc=OTC-Froogle- -ガジェット- -Srad+Tech-_-9SIA7BF37Z1712
st リンク v2 ミニ : http://www.electrodragon.com/product/st-link-v2-programmer-for-stm8-stm32/
gdb - マイクロコントローラのデバッグに GDB (Gnu Debugger) と OpenOCD を使用する方法 - ターミナルから?
ARM マイクロコントローラをプログラムする標準的な (低コストの) 方法は、複雑なツールチェーンがプラグインされた Eclipse を使用することです。Eclipse には確かにメリットがありますが、私はこの IDE から独立したいと考えています。ソフトウェアをビルド (コンパイル - リンク - フラッシュ) するとき、およびデバッグ セッションを実行するときに、舞台裏で何が起こるかを知りたいです。このように深く理解するには、コマンド ラインからすべての手順を実行するとよいでしょう。
注: 私は 64 ビットの Windows 10 を使用しています。ただし、ここで説明するほとんどの内容は、Linux システムにも適用されます。すべてのコマンド ターミナルを管理者権限で開いてください。これにより、多くの問題を回避できます。
1. ソフトウェアの構築
最初の「使命」は達成されます。コマンド ラインを使用して、ソフトウェアをコンパイルし、バイナリ.bin
とイメージにリンクできるようになりました。.elf
成功への鍵は、Eclipse が特定のプロジェクトのメイク ファイルを配置する場所を見つけることでした。それらがどこにあるかがわかったら、あとはコマンド ターミナルを開いてコマンドを入力するだけGNU make
です。
そのためにEclipseはもう必要ありません!特に、makefile を読んで (そして理解して)、プロジェクトが進んだときにニーズに合わせて微調整できる場合はなおさらです。
SW4STM32 (System Workbench for STM32) をインストールした後、GNU ツール (コンパイラ、リンカー、make ユーティリティ、GDB など) が次のフォルダーにあることに注意してください。
次に、ハードドライブに新しいフォルダーを作成し、これらすべての GNU ツールをそこにコピーしました。
そして、これらのエントリを「環境パス変数」に追加します。
Huray、これですべての GNU ツールをシステム上で稼働させることができました! build.bat
と同じフォルダに次のファイルを置きますmakefile
。
このバットファイルを実行すると、うまくいくはずです! すべてがうまくいけば、コンパイルの結果として.bin
1 つのバイナリ ファイルが得られます。.elf
2.ファームウェアのフラッシュとデバッグ
次の自然な手順は、ファームウェアをチップにフラッシュし、デバッグ セッションを開始することです。Eclipse では、「ボタンを 1 回クリックする」だけです。少なくとも、Eclipse がマイクロコントローラー用に正しく構成されていれば。しかし、舞台裏で何が起こっているのでしょうか? OpenOCD の開発者である Dominic Rath の修士論文 (の一部) を読みました。ここで見つけることができます: http://openocd.net/。これは私が学んだことです:
「デバッグ」アイコンをクリックすると、Eclipse は OpenOCD ソフトウェアを開始します。Eclipse は、OpenOCD にいくつかの構成ファイルも提供します。これにより、OpenOCD はマイクロコントローラーへの接続方法を認識します。「どのように接続するか」は簡単なことではありません。OpenOCD は、JTAG アダプター (STLink など) に接続するための適切な USB ドライバーを見つける必要があります。JTAG アダプターとその USB ドライバーは、通常、チップの製造元 (STMicroelectronics など) から提供されます。また、Eclipse は、マイクロコントローラーの仕様を記述した構成ファイルを OpenOCD に渡します。OpenOCD がこれらすべてを認識すると、ターゲット デバイスへの信頼性の高い JTAG 接続を確立できます。
OpenOCD は 2 つのサーバーを起動します。1 つ目は、TCP ポート 4444 の Telnet サーバーです。これにより、OpenOCD CLI (コマンド ライン インターフェイス) にアクセスできます。Telnet クライアントは、OpenOCD に接続してコマンドを送信できます。これらのコマンドは、単純な「停止」、「実行」、「ブレークポイントの設定」などです。
マイクロコントローラーのデバッグにはこのようなコマンドで十分かもしれませんが、多くの人はすでに Gnu Debugger (GDB) に慣れています。これが、OpenOCD が TCP ポート 3333 で GDB サーバーも起動する理由です。GDB クライアントはそのポートに接続して、マイクロコントローラーのデバッグを開始できます。
Gnu Debugger はコマンド ライン ソフトウェアです。多くの人が視覚的なインターフェースを好みます。それはまさにEclipseが行うことです。Eclipse は OpenOCD に接続する GDB クライアントを開始しますが、それはすべてユーザーには隠されています。Eclipse は、舞台裏で GDB クライアントと対話するグラフィカル インターフェイスを提供します。
これらすべてを説明する図を作成しました。
>> OpenOCDの起動
コマンドラインからOpenOCDを起動することができました。方法を説明します。
- まず、STLink-V2 JTAG プログラマが正しくインストールされていることを確認してください。STMicroelectronics の「STLink Utility ツール」を使用してインストールをテストできます。素敵な GUI を備えており、接続ボタンをクリックするだけです。
- 次に、Web サイトhttp://gnutoolchains.com/arm-eabi/openocd/から OpenOCD ソフトウェア実行可能ファイルをダウンロードします。それをインストールし、「C:\Apps\」のようなハード ドライブのフォルダーに配置します。
コマンド ターミナルを開き、OpenOCD を起動します。マイクロコントローラを探す場所を OpenOCD が認識できるように、いくつかの構成ファイルを OpenOCD に与える必要があります。通常、JTAG プログラマーを記述する構成ファイルと、マイクロコントローラーを定義する構成ファイルを提供する必要があります。
/li>-f
コマンドラインで引数を使用して、これらのファイルを OpenOCD に渡します。また、OpenOCD にフォルダーへのアクセス権を与える必要があります。これには、引数scripts
を渡します。-s
これは、コマンドラインを使用してコンピューターで OpenOCD を開始する方法です。OpenOCD を適切に (正しい引数で) 起動すると、次のメッセージが表示されて起動します。
/li>ターミナル ウィンドウがブロックされていることに注意してください。コマンドを入力することはできなくなります。しかし、それは正常です。OpenOCD はバックグラウンドで実行されており、ターミナルをブロックします。OpenOCD とやり取りするには 2 つのオプションがあります。別の端末で Telnet セッションを開始し、TCP ポート
localhost:4444
にログオンして、OpenOCD にコマンドを送信し、フィードバックを受け取ることができます。または、GDB クライアント セッションを開始し、TCP ポートに接続しますlocalhost:3333
。
>> OpenOCD と対話するための Telnet セッションの開始
これは、Telnet セッションを開始して、実行中の OpenOCD プログラムと対話する方法です。
正常に動作すると、端末に次のメッセージが表示されます。
これで、コマンドを OpenOCD に送信する準備が整いました! しかし、ここで GDB セッションに切り替えます。それが OpenOCD と対話する最も便利な方法だからです。
>> OpenOCD とやり取りするための GDB クライアント セッションの開始
さらに別のターミナル ウィンドウを開き、次のコマンドを入力します。
このコマンドは、arm-none-eabi-gdb.exe
GDB クライアントを起動するだけです。すべてがうまくいけば、GDB は次のメッセージで起動します。
次に、この GDB クライアントを OpenOCD 内の GDB サーバーに接続します。
これで、OpenOCD に接続されました。知っておくと便利: ネイティブの OpenOCD コマンドを使用する場合 (Telnet セッションで行う場合と同様)、コマンドの前にキーワードmonitor
. このようにして、OpenOCD 内の GDB サーバーはコマンド自体を処理せず、ネイティブの OpenOCD デーモンに渡します。
それでは、チップをリセットし、消去して停止します。
これで、チップは私たちからの指示を受け取る準備が整いました。最初に、フラッシュ セクション 0 から 7 (私の 1Mb チップのすべてのフラッシュ セクション) を保護しないようにチップに指示します。
次に、チップを再び停止します。念のために..
.elf
最後に、バイナリファイルを GDBに渡します。
今が真実の瞬間です。このバイナリをチップにロードするように GDB に依頼します。成功を祈っている:
残念ながら、それは成功しませんでした。OpenOCD で次のメッセージが表示されます。
編集: ハードウェアの問題が修正されました。
どうやらハードウェアの問題だったようです。STLink Utility ツールを使用してバイナリをチップにロードすると問題なく動作したので、自分のチップに欠陥があるとは思っていませんでした。OpenOCD だけが不平を言ってエラーを出していました。当然、私は OpenOCD を非難しました - チップ自体ではありません。詳細については、以下の私の回答を参照してください。
編集: チップをフラッシュする別のエレガントな方法 - makefile を使用!
問題が修正されたので、フラッシュを実行してチップをデバッグする別の方法に焦点を当てます。これはコミュニティにとって本当に興味深いことだと思います。
お気づきかもしれませんが、必要なすべての手順を実行するために Windows cmd コマンドを使用しました。これは、バッチ ファイルで自動化できます。しかし、もっと洗練された方法があります: makefile のすべてを自動化することです! さん/さん Othane は、彼/彼女の Cortex-M 用に次のメイクファイルを提案しましたか? チップ。Cortex-M7 チップの手順は非常に似ていると思います。
親愛なる Mr./Mss. Othane さん、次の手順でこの makefile を使用する方法を説明していただけますか。
- ソースコードからバイナリをビルドする
- チップをフラッシュする
私はメイクファイルの基本をいくつか知っていますが、あなたのメイクファイルは本当に奥が深いです。GNU make ユーティリティのかなりの機能を使用しているようです。もう少し説明をお願いします。ボーナスを差し上げます ;-)
------------------------------
stm32 - openocd を使用した STM32F3Discovery プログラミング
まず第一に、本当に下手な英語で申し訳ありません。
STM32F3Discovery ボードの使い方を学んでいます。構成コードの生成に STMCubeMX を使用して、すべてのオンボード LED をオンにする簡単なプログラムを作成しました。
私が書いたコードは、次の 8 行だけです。
ここに Eclipse プロジェクトのコピーがあります。
openocdを使用してボードをプログラムしようとしているので、実行します
それから
openocd の出力は
しかし、どのLEDも点灯していません!
私は何をすべきか?
python - Python ソケットが複数のメッセージを送信しない
openocd を使用して複数のコマンドをデバイスに送信しようとしています。問題は、最初のコマンドを受け取ってから停止することです。次のものを受け取ることはありません。
gdb - 理由 7 - ターゲットをリセットする必要があります -- 信頼性の低いデバッグ セットアップ
信頼できるデバッグ設定を取得するのに問題があります。ネット上のいくつかのフォーラムで、同様のタイトルの他のスレッドを見たことがありますが、状況は異なるようです。
設定:
- Linux (Xubuntu) 64 ビット
- Eclipse CDT、ネオン 4.6.0
- Eclipse の「GDB ハードウェア デバッグ」プラグイン「新しいソフトウェアのインストール」、リセットおよび 3 秒の遅延、停止するように構成されています。シンボルを読み込む (すべてのチェックボックス、カスタム コマンドなし)
- arm-none-eabi-gcc 4.8.3 ツールチェーン
- OpenOCD、最近ダウンロードされ、独自のコンソールで実行され、正確な MCU 用に構成され、それらによって提供されたスクリプトと st-link
- STM32L476RG 使用されるハードフロート付き MCU。
- ST-Link V2 デバッガ (スタンドアロン)
さて、毎回多少の苦労の末、デバッガーに接続できるシーケンスがありますが、変数のステップ実行と読み取りは明らかに信頼できるものではないため、私が見るものを一瞬信頼します. しかし、コール スタックが明らかなナンセンス エントリでいっぱいではなく、それらのエントリがごくわずかしかないポイントに到達することさえ面倒です。
例:
- ファームウェアでデバイスをフラッシュします。これは通常問題なく動作します。
- openocd を起動します。
- Eclipse でデバッグを開始します。
- OpenOcd に接続が表示され、「未定義のデバッグ理由 7 - ターゲットはリセットが必要です」と表示されます
- 私はEclipseの「再開」ボタンを押しても、プログラムが表示される偽のトップスタックフレームを超えて実行されます。
- 「サスペンド」(コールスタックではまだ偽物)を押してから、「終了」を押します。
- OpenOcd から Ctrl+C を押します。
- stm32 MCU を手動 (ハードウェア) でリセットします。
- OpenOcd を再起動します。
- Eclipse で再度デバッグを開始します。
OpenOCD 出力:
運が良ければ、しばらくの間、ようやくデバッガ接続が機能するようになりました。しかし、これにはいくつかの繰り返しが必要な場合もあります。接続が悪いことは明らかなのに、なぜ「プレスレジューム」が間にあるのですか? 確かではありませんが、これにより、次の反復で接続できる可能性が大幅に高まるように思われました。
おそらく関連するメモ:MCUにはLCDが接続されており、それからいつリセットされるかがわかります。何らかの理由で、Eclipse でデバッグを開始しても、明らかにデバイスがリセットされませんが、デバッグ構成でリセット チェックボックスがオンになっています。端末で OpenOCD への telnet 接続を開き、そこで「リセット」を実行すると、デバイスがリセットされます。
セットアップの奇妙な動作の原因は何ですか?
arduino - Arduino OpenOCD コマンドは IDE では機能しますが、CMD プロンプトからは機能しません。私は何が欠けていますか?(NRF)
Arduino は次の処理を正常に実行します。しかし、コマンドラインから試してみると失敗します。何故ですか?
結果:
コマンドラインから上記を試すと、次のようになります。
読みやすくするために、hex ファイルへのフル パスを置き換えました。
ツールチェーンとしてArduinoを使用して、ビルド済みのバイナリをアップロードしようとしています。IDE から実行できますが、Arduino ビルド コードでのみ実行できます。
私は何が欠けていますか?