2020/12/15

GPIO, blocking read with poll.

ref:
sys 裡面的 gpio property 有一項:edge。
用來設定 interrupt
配合 poll( ) ,可以作到 blocking read,這樣就不用一直 read (polling)

gpio 的 edge 有以下幾個可以設:
  • rising
  • falling
  • both
  • none
對 edge 寫入這幾個以外的值,會回報 error

實測結果,falling 跟 both 的效果一樣。

設完之後,對 gpio 的 value 做 polling 舊可以。

就像這一篇 的說明一樣:
# echo 4      >/sys/class/gpio/export
# echo in     >/sys/class/gpio/gpio4/direction
# echo rising >/sys/class/gpio/gpio4/edge
然後舊可以 poll..

有幾項要注意:
  • 先 read 一次,把上次 trigger 的 event 清空,之後再 poll
  • poll 的 event 是 POLLPRI,不是 POLLIN
  • 要清除 event 要做 read,之前要先 seek 回 file begin

修改好,test OK 的 example 在

沒有留言:

張貼留言