Re: 使用MCC產生的callback問題
|
||||
---|---|---|---|---|
版主
|
callback 方式是為了程式的完整性且容易修改,如果直接修改 MCC 所產生的中斷涵數那重新做 code generated 後,原先的中斷程式又會被改回。
使用 callback 當然會影響中斷的響應時間,當然你也可以直接在中斷涵數裡直接攔截中斷,寫你的處理程式,而不用理會 callback.
發表於: 2020/12/10 10:17
|
|||
|
Re: 使用MCC產生的callback問題
|
||||
---|---|---|---|---|
版主
|
剛剛已將中文使用手冊及範例傳到你的 e-mail 了。
發表於: 2020/12/9 13:15
|
|||
|
Re: 使用MCC產生的callback問題
|
||||
---|---|---|---|---|
版主
|
使用 MCC 的中斷處理最佳方式是是使用 MCC 所產生的 CallBack 方式。當然 CallBack 方式的處理方式是比較複雜一點,底下有一說明是如何宣告及使用 Callback 的函數指標宣告及用法。
有一份 "使用MCC mTouch 的設定,快速完成觸控按鍵實作指導手冊" 裡面有許多的範例就是使用 Callback 的方式來處理中斷功能的。摘錄書中一小段和使用 Timer 的 Callback 函數的方式:
B. 使用 Timer1 callback 函數方式
發表於: 2020/12/9 13:03
|
|||
|
使用MCC產生的callback問題
|
||||
---|---|---|---|---|
資深會員
|
以Timer為例,它提供了一個callback:
TMR1_SetInterruptHandler(TMR1_1sInterruptHandler); 讓我們可以從 interrupt_manager.c --> tmr1.c --> 自己的.c 主要的好處應該是可以不用修改interrupt_manager.c及tmr1.c就取得中斷 在範例裡面也都直接在callback裡執行流程(但都是些點LED的動作) 但callback function(本例為TMR1_1sInterruptHandler)實際上還是在ISR中,並沒有轉移控制權,只是call了函式跳出來 以前在寫的時候,一直要注意,不要在ISR裡面jump,也不要在裡面做秏時長的工作,但MCC的範例裡完全沒有這種警告,感覺好像你想在callback裡做什麼都行 我今天是看到一個Warning: non-reentrant function "_XXX_Read" appears in multiple call graphs and has been duplicated by the compiler 即function在ISR即main中都被被執行,才想到我在Timer的callback裡呼叫了函式 你們對callback內進行的操作有什麼額外的說明嗎? 在MCC裡註冊callback,實際上會跳兩次,先到tmr1.c,再到我們的c檔案,這種方式在XC8裡有什麼特殊處理讓它執行不會出問題嗎? 還有MCC產生的code自己就產生了一堆Warning,什麼xxx is never called我就不說了,其它 比如tmr1.c
void TMR1_WriteTimer(uint16_t timerVal)
Warning:
mcc_generated_files/tmr1.c:129:17: warning: implicit conversion loses integer precision: 'uint16_t' (aka 'unsigned short') to 'unsigned char' [-Wconversion]
spi1.c中:
void SPI1_ExchangeBlock(void *block, size_t blockSize)
Warning:
mcc_generated_files/spi1.c:108:: warning: (1498) pointer (SPI1_ExchangeBlock@data) in expression may have no targets
自己工具產生的code應該稍微用點心,把這種訊息給處理了吧,
發表於: 2020/12/8 17:13
|
|||
|