[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(toppers-users 847) Re: TOPPERS(JSP-1.3)についての問い合わせ



(株)リコー 竹内様

宮城県産業技術総合センターの今井と申します。



質問1についてですが、

> このケースで、schedtskがセットされ、runtskがゼロの場合があ
> ると思われますが
> (dispatcher_1にて割り込み待ちの状態で割り込みが発生)

「dispatcher_1にて割り込み待ちの状態」では非タスクコンテキス
トになっていますので、ここで受け付けた割込みは初段の割込みで
はなく、2段目(以降)の割込みと同じ扱いになります。
(m68kは非タスクコンテキストに割込みモードを対応させています。)
従って、ret_int:の行には行きません。
割込み処理後、下記の(a)行でdispatcherへジャンプしますので、
仰るとおり

> runtskがゼロの場合はスタックとTCB_mspとTCB_pcの保存を行わ
> ずdispatcherにジャンプすべきではないのでしょうか?

となっています。


dispatcher_1:
	stop #0x2000			/* 割込み待ち(割込みモード) */
	/*
	 *  ここで割込みモードに切り換えるのは,ここで発生する割込み処理
	 *  にどのスタックを使うかという問題の解決と,割込みハンドラ内で
	 *  のタスクディスパッチの防止という2つの意味がある.
	 *  この stop 命令は,IPM を 0 にするが,本来は task_intmask に
	 *  設定すべきである.M68040 では,stop 命令のパラメータに定数し
	 *  かとれないため,やむをえず 0 にしている(stop 命令を 8つ並べ
	 *  て,task_intmask の値で飛び分ける手はあるが,そこまでやる意
	 *  義はないと考えた).
	 */
	or.w #0x1700, %sr		/* マスタモード・割込み禁止 */
	tst.l reqflg			/* reqflg が FALSE なら */
	jbeq dispatcher_1		/*      dispatcher_1 へ */
	clr.l reqflg			/* reqflg を FALSE に */
(a)	jbra dispatcher


以上、参考になれば幸いです。


宮城県産業技術総合センター
今井和彦
E-mail kimai at mit pref miyagi jp