1. 程式人生 > >nRF51822 的GPIOTE的中斷處理函式中不能直接呼叫softdevice的功能,需要用app_scheduler

nRF51822 的GPIOTE的中斷處理函式中不能直接呼叫softdevice的功能,需要用app_scheduler

在做nRF51822的功能時,在GPIOTE的中斷處理中直接呼叫了。IAS的函式,直接HardFault了。

google一下。發現解決方案。

https://devzone.nordicsemi.com/question/31030/gpiote-interrupt-and-ble-send-resulting-in-hard-fault/

這個帖子列舉了兩個 

如果GPIOTE的中斷優先順序是預設的的GPIOTE IRQ,那比softdevice 服務的優先順序高,你不能從高優先順序中斷呼叫低優先順序中斷的處理。解決方法就是吧GPIOTE的優先順序設低一點。但是這不適合我的需求。

第二個方案就是用app_scheduler 把事件傳送到main 上下文處理。

具體方案可以參見下面的兩個文章。

https://devzone.nordicsemi.com/question/17526/examples-using-the-scheduler/

http://blog.chinaunix.net/uid-28852942-id-5679247.html