[H8-ML(5575)] Re: [H8-ML(5574)] PCの値の取得
From: "Kobayashi @ TKCC" <kobayashi@xxxxxxxxxxx>
Date: 2005年05月29日(日)11時15分53秒
uchanさん。こんにちは。

 次の実行アドレス。という限定がつきますが。以下の方法はいかがでしょう?

 サブルーチンコールすると、戻りアドレスがスタックに格納されます。
 そして、その時のスタックポインタを専用の入れ物(保持)に逃がします。

 続いて、別のタスク用に逃がしてあるスタックインタ(保持)をスタックポイ
ンタにセットしてリターンしてやれば、別のタスクが動作します。

 これをぐるぐる回す。でいかがでしょう。

 サブルーチンコールでスタックに格納されたアドレスは、スタックポインタ+
αので見ることできます。CPUマニュアル(ハードウェアマニュアル)の割り
込みの仕組みの箇所にメモリ上にどのようにアドレスが対比されるか、図解され
ていると思いました。

  小林

----- Original Message ----- 
From: "Uchida" <uchan_pc@xxxxxxxxxxx>
To: "H8-ML" <h8@xxxxxxx>
Sent: Sunday, May 29, 2005 11:01 AM
Subject: [H8-ML(5574)] PCの値の取得


こんにちは、uchanです。
H8/3048Fで、PC(プログラムカウンタ)の値をC言語プログラムから
参照するにはどうしたらいいのでしょうか。
PCのレジスタ自体のアドレスを探そうと思いましたが、
私が探した範囲では、何番地にPCが有るのか分かりませんでした。
PCが何番地に有るかは分からなくても良いですが、PCが指し示して
いるアドレスを取得したいと思っています。

なぜPCの指し示しているアドレスが欲しいかというと、ちょっとした
マルチタスクOSなるものを作ろうと思っているからです。
タスクが8個ほど有りまして、たとえばタスク0を実行中にタスク切り
替えの割り込み(0.1msのタイマ割り込みで強制的にタスクを切り替え
ようと思っています。)がかかったとき、PCの中身を変数に待避して
おき次のタスク処理に移ります。タスク7まで処理し終わり、タスク0
まで処理が戻ってきたとき、先ほど待避したアドレスをPCに戻して
処理を続行すれば、プリエンプティブマルチタスクが実現できるかな
と考えています。

よろしくお願いします。



スレッド概略
[5574(R)](起点)
 └[表示中]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]