デバッグについて質問です。
何もしない空のメインループで下記割り込みが発生したときのみ
処理を行うシステムがあるとします。
・タイマ割り込み(以下、TMINTとしてCALLされる関数をfuncTM())x1 → 1ms毎
・外部割り込み(以下、OUTINTとしてCALLされる関数をfuncOUT())x1 →ディップスイッチによる手動で押下時
※プライオリティはOUTINT>TMINTとします。
※使用するICEはMr.ICE
このときプライオリティを確かめるデバッグの方法として下記のようなことを考えています。
・TMINT中に手動でOUTINTが発生させることが困難なため、連続で何度も押し続ける。
・ICEの設定としては、funcTM()→funcOUT()2点間通過指定でブレイクイベント
・ただし、これだけではTIMINT通過後にOUTINT発生でもイベント成立してしまう。
こういうケースのデバッグは不可能なんでしょうか?
ICEの種類問わず、こういうデバッグのノウハウをご教授願います。
No.3ベストアンサー
- 回答日時:
もう一つ追加です。
おおざっぱなチェックであり、なおかつ、同じ割り込みが多重に発生しない時に、簡易的にチェックする方法です。
チェックが必要な割り込みをすべて無限ループにしてしまいます。
タイマ割り込みなどで同種の割り込みが多重に発生する場合には、割り込み処理の入り口で、割り込み禁止にした状態で、無限ループにします。
この状態では、割り込みが発生すると、割り込み処理から抜けることはありませんから、プライオリティの順に、あるいは、逆順に、あるいは、任意の手順で割り込みを発生させます。
すでにプライオリティの高い(はずの)割り込みが発生していれば、それよりプライオリティの低い割り込みは発生しませんし、高い割り込みは発生します。
ただ、タイマ割り込みのように、割り込みが、外部からコントロールできない場合には、工夫が必要ですし、各割り込みの中で無限ループを作るので、プライオリティのチェックくらいしかデバッグできない状況になりますが。
AsanoNagi様>
アドバイスありがとうございます。
一番最後の方法をやってみようと思います。
イメージ的には、プライオリティの順に次々へ入っていく感じですね。
No.2
- 回答日時:
間接的な方法も併せていくつか方法があります。
実際にできるかどうかは、ICE にもよりますが。
1.準備
可能であれば、タイマ割り込みの処理時間を(わざと)長くします。
1ms ごとの割り込みであれば、タイマ割り込みにかかる処理を、990μsくらいにするとか。
これで、実行時間のほとんどの間タイマ割り込みの処理がなされていることになります。
この状態であれば、スイッチを操作した瞬間が、タイマ割り込みの処理中である確率がかなり高くなります。(故に、タイマ割り込みの処理中に、スイッチの割り込みが発生しする可能性がかなり高くなります)
方法1)外部出力信号を使う。
2つの出力ポートがデバッグ用に使用可能であれば、それぞれ、funcTime() の入り口で、High, 出口で Low()。もう一つは、funcOut() の出入り口で同じように設定します。
オシロスコープで信号を確認して、条件が成立しているかどうかをチェックします。オシロスコープの、トリガ条件(一方が High の間に、他方の立ち上がりでトリガ など)が使用できれば、オシロスコープを動かしたまま、スイッチ操作をすれば、(動作していれば)そのうち捕まるでしょう。
方法2)変数のウォッチ機能を使う
上記の出力ポートを変数で置き換えたものです。
ひとつの変数の1ビットずつをそれぞれの関数の出入り口に割り当てます。
ICE の変数ウォッチ機能で、両方のビットが立ったところで、ブレークをかけます。
ただお、この方法は、プライオリティの設定が逆になっていてもわかりませんので、この点注意(オシロを使えば、波形の状態から順序はわかるでしょう)
方法3)スタックを確認する。
funcOUT() の入り口でブレークをかけます。
このときに、スタックに積まれている「戻り番地」が、funcTM() にあれば、funcTM() の中から処理が写ったことが確認できます。
ICE のバックトレース機能があれば、これを使えば、どこから飛び込んできたかわかります。
他の箇所から飛び込んだときに、NGとは断言できない点に注意してください。
以上のいずれか(または併用)でチェックした後、念のため、プライオリティの指定を逆にして、「プライオリティを逆にすると確かにNG」というのを確認しておいてください。
No.1
- 回答日時:
多重割り込みプライオリティのデバッグなどできません。
私が以前行った多重割り込みでは、割り込みコントローラの設定が正しく設定されているか否かで判断しました。この場合、ディップスイッチが手動で動きますので、タイミングを取るのは殆ど不可能です。(1)机上で割り込みコントローラの設定が正しく設定されているか否かで判断します。(2)そして、多重割り込みを信号をoutさせた上、オシロスコープで最終確認しました。ソフトウエアは机上で確認、その上でオシロスコープで動作確認します。ハードウエア側からのみ動作確認できます。
アドバイスありがとうございます。
今回の例は割り込み2種類ですが、現在開発中のものは6系統くらいの割り込みがあり、内プライオリティは4種類になります。
どのみちより複雑になってしまいますので、机上確認しか無理のようですね。
>多重割り込みを信号をoutさせた上
この部分ですが、も少し深く教えていただけたら幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
電車で待機列の割り込みについ...
-
PIC12F683のソフトウェアUARTは...
-
Amazonfireタブレットにわから...
-
一定時間操作がなかったら、と...
-
スーパーのレジで並んでいたら...
-
CPU負荷率の安全な上限と計...
-
音声ファイル再生時のフリーズ
-
CPUの処理量を減らすコーデ...
-
sleep関数の原理について
-
PICマイコン 割り込み実行時間...
-
このレジの並び方は間違ってま...
-
pic 複数の割り込み関数 切り分...
-
はじめて読む486の割り込み関係...
-
電車乗車時、並んでいるのに割...
-
USJでの割り込み
-
Macターミナルで実行中のプログ...
-
C# シリアル通信でデータ受信...
-
バックグラウンドのプロセスの...
-
VBAの配列サイズとメモリに関して
-
3のつく数字と3の倍数のみを表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
電車で待機列の割り込みについ...
-
スーパーのレジで並んでいたら...
-
このレジの並び方は間違ってま...
-
【組込み】割り込み中のstatic...
-
USJでの割り込み
-
VB6でSendKeyを利用したTab移動...
-
CPU負荷率の安全な上限と計...
-
CPUの処理量を減らすコーデ...
-
pic 複数の割り込み関数 切り分...
-
Excelでタイマーの一時停止する...
-
VB.NET スレッドからのイベント...
-
H8マイコンでの割り込み(シリ...
-
割り込みのカウントの仕方
-
H8SX/1655のタイマー割り込みに...
-
マイコン C言語 割り込み処理...
-
一定時間操作がなかったら、と...
-
Z80の割り込みについて
-
STATUSのZフラグについて
-
PICマイコンでエンコーダパルス...
-
定周期での割り込み
おすすめ情報