[H8-ML(5577)] Re: PCの値の取得
From: 先尾翼 <mhirota@xxxxxxxxxxxxx>
Date: 2005年05月29日(日)12時03分54秒
こんにちは廣田です。

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

プログラムカウンタがアドレス空間に見えるCPUっていうと
uchanさんは8x51系やPICなどを常用されている?記憶が正しければ
8x51系はアドレス空間の先頭付近にそのようなレジスタが
有ったような。
H8やSHなどはPCを含めすべてのレジスタがアドレス空間には有りません。
(IOレジスタは別、ここで言うレジスタとはPCやR0,1,2....などの汎用
レジスタのことです。)


> なぜPCの指し示しているアドレスが欲しいかというと、ちょっとした
> マルチタスクOSなるものを作ろうと思っているからです。

すでにmacさんなどからresがついて居ますが、H8でマルチタスクを
作るときは一般的にはtrapa命令などスタック上にPCが積まれる命令を
使用して現在動いているタスクが使っているPCを含むレジスタをメモリに
退避し、同時にマルチタスクの状態を管理しているプログラムを動かし、
この部分で次に動作させるべきタスクのレジスタ群をCPUのレジスタにも
どして、実行権を次タスクに渡すという方法をとります。


> タスクが8個ほど有りまして、たとえばタスク0を実行中にタスク切り
> 替えの割り込み(0.1msのタイマ割り込みで強制的にタスクを切り替え
> ようと思っています。)がかかったとき、PCの中身を変数に待避して

0.1msごとに割り込みがかかるのならすでに割り込みが掛かった時にPC
に保持されている次実行アドレスがスタックメモリに退避して居るわけ
ですからスタック参照ですぐに「戻るべきアドレス」が確認出来ます。

はちゃ。

-- 
// Name: "Hirota Masataka"
// E-mail address:  mhirota@xxxxxxxxxxxxx
// Using Mozilla/5.0, Netscape's conventional e-mail client_/_/

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


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


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