主要是在使用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],從此變成長睡不起。
以後要將會產生中斷的指令寫在函式最尾,以免再發生這樣的問題。
厲害、厲害!!
回覆刪除