我是使用Contiki操作系統的新手,我有一個基本問題。在Contiki上下文中使用ISR功能
我可以安全地使用Contiki流程內的低級ISR嗎?
我正在做這個快速測試,它運作良好。 但是,我擔心我可能會破壞操作系統中將在以後不同條件下 失敗的內容。
在基於事件定時器週期性觸發的過程中,我在調用一個設置LED閃爍的函數。 LED閃爍功能本身是來自Atmel SAMD21 MCU上的硬件定時器觸發的ISR的回調。
有人能爲我澄清在這個特殊情況下我應該關注什麼限制嗎?
謝謝。
我是使用Contiki操作系統的新手,我有一個基本問題。在Contiki上下文中使用ISR功能
我可以安全地使用Contiki流程內的低級ISR嗎?
我正在做這個快速測試,它運作良好。 但是,我擔心我可能會破壞操作系統中將在以後不同條件下 失敗的內容。
在基於事件定時器週期性觸發的過程中,我在調用一個設置LED閃爍的函數。 LED閃爍功能本身是來自Atmel SAMD21 MCU上的硬件定時器觸發的ISR的回調。
有人能爲我澄清在這個特殊情況下我應該關注什麼限制嗎?
謝謝。
基本上可以,但你要明白其中的代碼運行的每一個部分。
的過程有函數的上下文背景下,半自助旅遊旅行社的調度在main
體運行時,計時器會排隊進程在此調度程序中醒來,實際上,將Contiki進程視爲相互調用的函數,請注意那些PROCESS_*
宏實際上確實會調用該函數的返回值。
當您處於中斷處理程序或回調函數時,您處於不同的上下文中,如果您與進程共享數據,則在此處可能存在競爭條件,這與裸機固件中的中斷和main()
不同的背景。
我強烈建議您閱讀有關「protothreads」,除了它們聽起來像線程,它們不是,它們是在主體中運行的函數。 (我相信這個鏈接會啓發你http://dunkels.com/adam/pt/)
在你描述的問題上,我沒有看到任何錯誤。
Contiki本身有一些硬件抽象模塊,所以你不必直接從你的應用程序代碼處理平臺。我用Contiki編寫了大量的固件,發現這些抽象的功能不是很實用,因爲它的應用有限。在這種情況下,我所做的就是編寫我自己的底層來觸及平臺,所以在應用程序中一切仍然是平臺獨立的,但從操作系統的角度來看,我有應用程序代碼調用平臺寄存器。