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],從此變成長睡不起。

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


2012年2月5日 星期日

使用Cortex-M3後的事

在前公司,一直摸不到ARM。在技術上這是一個趨勢,早晚會碰到,不如早點用,但苦無機會。
現在用Cortex-M3,不只用,還要很熟。

在設計上有次算錯了效能,結果放了一個FPGA上去。FPGA廠商很高興,因為公司以往最多用到CPLD,遇到會寫的人,自然全力支援。
就有二家全力支援產品開發,都希望有機會採用。
後來Bee就發現MCU也可以做,加上開始熟STM32,結果用中斷程式不用十行就解決了。
對公司是好的,又少了一個零件。但FPGA廠商就沒這樣高興了。

去年底出了Cortex-M4,廠商送來Demo Board,趁空擋試了一下,將FreeRTOS給裝上去,看來還不錯。
不過因為案子皆已開跑,就先放著。
然後,其他也出M4的廠商也來訪,也送來一套。過完農曆年,又一家廠商來也想推。
看來Cortex-M系列真的很拼,MCU市場還真難賺。