こんにちは廣田です。 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_/_/