2012年2月11日 星期六

使用簡單多工3版遇到的問題

主要是在使用WakeUp()在中斷程式所遇到的問題。
因為新加的功能會方便很多,所以在中斷程式中Bee用了不少,結果還是發生程序卡死的狀況。
程式碼如下:

void ADC_Start(void)
{
    void ADC_GetValue(void);

    Start_ADC();
    Sleep_Next(ADC_GetValue);
}

中斷程式中為
    WakeUp(ADC_TASK_ID);

結果Run一段時間會卡死。
去看Task_State[ADC_TASK_ID]內容為3,就是TASK_WAIT
但ADC暫存器卻顯示已產生過中斷。

後來將Start_ADC();放在最後一行,問題就沒有了。

發生這樣的問題主要是下指令到產生中斷時間太短,在進入Sleep之前就產生中斷。
然後Sleep_Next才將TASK_WAIT寫入Task_State[ADC_TASK_ID],從此變成長睡不起。

以後要將會產生中斷的指令寫在函式最尾,以免再發生這樣的問題。


1 則留言: