他のスレッドで「H8/36094:IRQ0の処理が起動しないことがある」というのを見かけましたが
SH7670で下記のようなソースで自作関数を作成しています
ソースここから→
/////////////////////////////////////////////////////////////////////////タイマを設定するTIME_PROC tproc[]={{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},};BOOL bWaitTimer=FALSE;BOOL WaitTimer(int msec,void (*pc)()){ int i; CMT.CMSTR.BIT.STR1=0;//タイマ停止 for(i=0; i<10; i++){ if(tproc[i].msec ==0){ tproc[i].msec =msec; tproc[i].pc =pc; //1m Sec タイマ開始 if(!bWaitTimer){ bWaitTimer=TRUE; cpu_ms1_start //タイマを開始させるマクロ } CMT.CMSTR.BIT.STR1=1;//タイマ開始 return TRUE; } } //登録できない return FALSE;}/////////////////////////////////////////////////////////////////////////////////////1mSインターバルタイマvoid cmi1_(void){ BOOL flg; int i; void (*pc)(); CMT.CMCSR1.BIT.CMF &= 0; CMT.CMSTR.BIT.STR1=0; flg=FALSE; for(i=0; i<10; i++){ if(tproc[i].msec > 0){ tproc[i].msec--; if(tproc[i].msec == 0){ pc = tproc[i].pc; tproc[i].pc=0; pc(); } } if(tproc[i].msec > 0)flg=TRUE; } if(!flg){ bWaitTimer=FALSE; return; } CMT.CMCSR1.WORD=0; CMT.CMCNT1.WORD=0; CMT.CMCOR1.WORD=1000; CMT.CMCSR1.BIT.CKS=1;//11:Pφ/512 CMT.CMCSR1.BIT.CMIE=1; CMT.CMSTR.BIT.STR1=1; cpu_ms1 ++;}/////////////////////////////////////////////////////////////////////////タイマ関数 end///////////////////////////////////////////////////////////////////////
→ソースここまで、これを使用するには
void test(void)
{
}
に飛ばしたい場合に
WaitTimer(100, &test );
等とすると、100ミリ秒後にtest()が実行されるという仕組みですが
どうやらたまに実行されない場合があるということで、なにが原因なのか思案しています
アドバイスお願いできませんでしょうか?