100329

|


机続き。引出しを。1x6材を半分に割って引き出しの本体に、1x4材から前板を。



荒木取りしたところまで。

ナス(手前)も発芽してきた。一時モヤシ状態になっていたトマトもなんとかい けそうか。トマトはわき芽をかいてそれを差しておいたのからでも十分に収穫 可能なのであまり蒔かなくていい。

SH4A続き。SH4Aの内蔵周辺モジュールの割り込み優先度はINT2PRIレジスタに設 定し、これは5bitで設定する。この設定はCPUのSR.IMASKに上位4bitが反映され る。evbsh3の場合、sys/arch/evbsh3/include/intr.hから
typedef uint8_t ipl_t;
typedef struct {
	ipl_t _ipl;
} ipl_cookie_t;

static inline ipl_cookie_t
makeiplcookie(ipl_t ipl)
{

	return (ipl_cookie_t){._ipl = ipl << 4};
}

static inline int
splraiseipl(ipl_cookie_t icookie)
{

	return _cpu_intr_raise(icookie._ipl);
}
のように、splではSR.IMASKの設定で割り込みを制御する。(splraiseiplの設定 は外部割り込みコントローラにしてもいい。というかそういうハードの場合は そうせざるを得ない。hpcshがその例)
ここでiplはsys/arch/evbsh3/include/intr.hで
/* Interrupt priority levels */
#define	IPL_VM		12
#define	IPL_SCHED	14	/* clock */
#define	IPL_HIGH	15	/* everything */
と設定されている。IPL_VM以下の優先度はsys/sys/intr.hで
#define	IPL_BIO		IPL_VM
#define	IPL_NET		IPL_VM
#define	IPL_TTY		IPL_VM
#define	IPL_AUDIO	IPL_VM
#define	IPL_CLOCK	IPL_SCHED
#define	IPL_SERIAL	IPL_HIGH

#define	splbio()	splvm()
#define	splnet()	splvm()
#define	spltty()	splvm()
#define	splaudio()	splvm()
#define	splclock()	splsched()
#define	splserial()	splhigh()
と設定されている。なので、SH4Aの周期タイマ割り込みの優先度は IPL_SCHED(14) << 1で0x1cあるいは0x1dでないといけなかったのに、0x1f(最高 優先度)としていた。これだとIPL_HIGHでしか割り込みがブロックされない。 IPL_SCHEDにしてもタイマ割り込みが入ってきてしまったのが、ロックまわりの タイミングプロブレムだった...。
とはいえロックでは落ちなくなったけれど、割り込みまわりは、まだおかしい。