例外からの復元 (コンテキスト復元)

Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

私は次のユースケースを持っています:TC36xを使用して、2つのアプリケーション(APP1 - メインアプリケーションとAPP2 - セカンダリアプリケーション)を保存します。 APP1で、APP2が利用可能かどうかを確認します(マイクロコントローラでフラッシュ)。 そのために、APP2の開始アドレスへのダミーアクセス(読み取りアクセス)を実行します。

動作は単純で、APP2がフラッシュされていない場合、トラップ4 TIN 2がトリガーされます。

私が今直面している問題は、最初に例外をトリガーしたものから次の命令に例外から回復することです。

#Step 1: ダミー読み取りアクセス

符号なし長loc_TestSwStartAddr= 0xA04F0000;
符号なしロング* loc_DummyAccess = 0U;


/* ダミー アクセス - APP2 がフラッシュされていない場合、TRAP4 TIN 2 がトリガーされます */
*loc_DummyAccess = *(符号なしロング*)loc_TestSwStartAddr;

#Step 2: OS トラップハンドラ (rslcx+rfe) へのジャンプ

#Step 3: トラップ発生時のスナップショットデータを保存する (func 呼び出し)

#Step 4: プロテクションフック (関数呼び出し) にジャンプする

#Step 5: APP1 固有のトラップ処理 (func 呼び出し) にジャンプします。 このステップでは、トラップの原因となった次の指示に戻ろうとしていますが、まだ解決策が見つかりませんでした。

私が試したこと:

->トラップを発生させる命令の前にレジスタFCX / LCX / PSW / PCXIの内容を保存し、次の命令に何らかの形で戻った後に復元します(後でコンテキストスイッチトラップ>)

-> トラップ発生時にPCXIに保存された情報に基づいてA11の内容を更新します。(->コンテキストスイッチトラップ後)

どのように進め CAN のか、それともそのようなコンテキストの復元を行っているソースコードがあるかどうかについて何か考えがありますか?

注:私はマイクロコントローラのアーキテクチャマニュアルを読みましたが、あまり役に立ちませんでした。

 

0 件の賞賛
0 返答(返信)