看板 LinuxDev 關於我們 聯絡資訊
※ 引述《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
musicguitar:soga!!清楚明瞭!!!多謝!! 也謝謝J大!! 02/22 23:24