(toppers-users 1883) Re: H8/3048Fでの割り込みハン

Masaki Muranaka monamour @ monaka.org
2005年 2月 5日 (土) 22:19:04 JST


こんばんは。

On 2005/02/05, at 21:29, Yuki WAKUDA wrote:
> Inline void
> define_inh(INHNO inhno, FP inthdr)
> {
>  }
>
> つまり,define_inh()は何もしない関数であることがわかる.
>
> と,ここでだいたい決着するのですが,
> ここで疑問があります.なぜ
> Inline void define_inh(INHNO inhno, FP inthdr) {  }
> という何もしない関数なのに,
> “ベクトル番号 inhno の割込みハンドラの起動番地を inthdr に設定する.”
> ということが可能なのでしょうか?

H8版においては、config.txtの内容は、h8.txtの内容でオーバーライドされていると
理解してください。

もうちょっと詳しく書くと、以下のような経緯になっています。

H8以外での大半のアーキテクチャでは、define_inh で、config.txtで書いてある通りの処理をします。
// 興味と時間があるようでしたら、h8以外のCPU/ターゲット依存部も覗いてみると理解が早まります。
H8の場合は、設定すべきベクタがROMなので、本来define_inhで設定すべきコードを手で書くしかないです。
逆説的に、設定すべき情報はアプリケーションプログラマがなんとかしてくれると期待して、define_inhは
空となっています。

h8.txtで"動的"と表現しているものは、uITRON4.0仕様での静的/動的とは若干用法が異なります。
これも混乱を助長しているのかもしれません。


以前私が書いた、
> H8の場合はROMですので、例外的に開発者がsys_support.Sに手で書き込みます。手間ですが、仕方ないです。
という表現を改めて咀嚼してみてください。
H8以外の大抵のアーキテクチャでは、初期化時にINHINIBの内容を元に、define_inhを呼び出して、
例外ハンドラの設定を行っています。しかしH8の場合は例外ハンドラと例外ベクタが等価で、
しかもROMですので…(以下同文)。


// ちなみに、同じH8ターゲットでも、H8/3069F RedBoot対応版では、define_inh には割込みハンドラを
// 設定するコードが入っています。この版は、TOPPERSプロジェクトの早期リリースにアクセスできるか
// もなみソフトウェアの製品を買ったか、どちらにしても限られた人しか入手できないので参考には
// ならないのですが…。
// 混乱している現段階ではさらに混乱する要因になると思うので余談として受取ってください。



…解りづらいですね。H8版だけ見ているであろう湧田さんが躓いたとしても仕方ないと思います。
移植性の高さが、個々のターゲットのアプリケーションを書く方々に取っては仇になっている側面が
あるかもしれないですね。これは確かにマズいかもしれない…。

--
from もなか