推 musicguitar:soga!!清楚明瞭!!!多謝!! 也謝謝J大!! 02/22 23:24
※ 引述《musicguitar ()》之銘言:
: ※ 引述《roylee17 (把我id還我阿......)》之銘言:
: : 需要 lock 與否,是取決你要存取的資料是否共享
: : 而不是因為 irq 是不是共用
: : ^^^^^^^^^^^^^^^^^^
: : 除了你的 ISR 外,有其他的 code flow 會存取這個暫存器嗎?
: 抱歉!!
: 剛剛確認一下我的程式.更新兩個訊息.
: 1. 我的kernel是2.6.31
: 2. ISR的動作
: 因為是透過SCI發出的中斷.
: ISR中會做的事是讀取GPE暫存器.確認是否是我要擷取的interrup.
: 基本上.這個站存器只有我去讀取.如果是我的訊號.會將interrupt flag清掉.
: 沒有其他code flow會處裡這個暫存器了.
: : 另外,ISR 中,不適用 semaphore
: : 或是其他需要 process context 的同步機制
: 不好意思.semaphore跟spinlock印象已經有點久遠了!(好像還有mutex)
: 不太記得這兩個用法上的差異.什麼時候該用哪種.
: 我會再去查查資料.
: 可以請問.ISR為何不適用semaphore???
: : spin lock 應該是沒問題的(需不需要是另外一回事)
: 初始化沒問題.我都有做到.
: : 如果你的 lock 是自己建的,記得初始化
: : 如果是 lock 系統中現有的某個 lock,
: : 那要檢查一下整個 lock 的使用情況,
: : 你有沒有 double lock/unlock
: : error message 可以貼上來
: error message要等我一下.手邊目前沒辦法得到!!
: 另外一個問題.在kernel 2.6.31中多出一個lock的方式.
: DECLARE_RWSEM(isrlock);
: down_write(&isrlock);
: up_write(&isrlock);
: 不知跟semaphore有沒有差別?
: 我之前有用過mutex, spinlock,跟這個semaphore.
: 使用這三種都會當機!!!出現error!
推文 james大大有說明過了, 我只是補充一下
實際上 spin_lock的實作是用while loop (busy waitting)
而sem實作是類似 sleep 的做法, 因為是sleep() 才會有context switch 的可能
ISR 基本上是不允許 context switch的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.165.131.190