LinuxDev 板


LINE

先進們好,現在狀況是這樣的。目前 MCU 端要傳 data 給我 AP 開發板端,透過一根 gpio,註冊為irq,我這邊寫了個 driver,當中用到的 API 為 request_threaded_irq。 這個 api 的第二個參數 handler(上半部)為 null,第三個參數為一個 function thread 這個 thread(下半部),會透過 spi_sync 來跟 MCU 要資料,至於甚麼時候 MCU 會透過 irq 來通知我的 driver? 也就是每 1ms(每秒1000筆) 來通知我,我 每次透過 spi_sync要到的 64 byte 資料,都還會做個 check crc 的錯誤判斷,只要 有錯,這64 byte 就作廢。錄了 7200 秒,crc error 98 筆,大概1%,想要降至0.x% 看了波型,發現錯誤的時機點幾乎都是,MCU發了irq,而我的 driver 卻沒有馬上 進入 thread 發 spi command 來要資料,都是延遲了才要,也就是延遲進入 thread。 我估狗了中斷機制,和API查詢,發現用 request_threaded_irq 創造的 thread, 會類似於 workqueue 這下半部機制,而且屬於 process 上下文。既然屬於process 它就會被 kernel 來排班,甚麼時候執行,是看 kernel 而定。 request_thread_irq 裡面有個 irqflags 參數,我給他設定為 IRQF_ONE_SHOT,這個 參數代表表的是 當我這個 thread 執行完畢,才會再把 irq 打開,所以我猜想, 也許就是 kernel 還在處理 thread 的 task,irq 還沒被打開,所以 MCU 就算發 irq 我可能會導致延遲去處理,或者甚至不理IRQ(有看過波型也有發生過)。請問有甚麼可 行的方向來解決我想要即刻去處理中斷的問題? 1 我有想過把 thread 要做的內容寫在第二個參數的上半部 funcion,既然是上半部 的中斷的函式,driver 一定能立即去做處理。可是這又有一個問題,我在網路上 搜尋到,在中斷的 context 下,規定他不能睡眠,也不能阻塞,我 spi_sync 似乎 是個阻塞的 function,我除了作 spi_sync 也有做 input_sync 的 function,這看 起來也是個阻塞同步 function。中斷函式一定不能加上阻塞的嗎? 即使它運作時間 非常短? 2 softirq (下半部機制方法)??? 希望能有些資訊能從前輩們獲得,萬分感激。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.220.69.181
※ 文章網址: https://webptt.com/m.aspx?n=bbs/LinuxDev/M.1488966659.A.105.html
1F:→ wens: 不能等 buffer 滿了才送 interrupt 啊, 大概 1/2 ~ 3/4 滿 03/09 10:49
2F:→ wens: 就該送了。interrupt handler沒有保證馬上執行的 03/09 10:49
3F:→ gn00618777: 好感動,感謝w大回應。您說 buffer 滿是說誰的 buffer 03/09 12:57
4F:→ gn00618777: interrupt handler 沒有保證馬上執行,那如果我是在上 03/09 12:58
5F:→ gn00618777: 半部,也就是request_thread_irq的第二個參數設一個 03/09 13:00
6F:→ gn00618777: ISR(硬中斷),會不會這個handler 就會保證馬上執行? 03/09 13:01
7F:→ gn00618777: 因為查詢結果,request_thread_irq的第三個參數,是在 03/09 13:02
8F:→ gn00618777: process context的,所以不保證迅速執行,而是被kerne 03/09 13:02
9F:→ gn00618777: 排班,而 request_thread_irq的irqflags我有設 03/09 13:03
10F:→ gn00618777: IRQF_ONE_SHOT,這個代表 thread process要執行完才能 03/09 13:04
11F:→ gn00618777: 再打開 interrupt,所以我的 driver 會不理 mcu 發的 03/09 13:04
12F:→ gn00618777: interrupt 甚至會延遲進入 thread handler 03/09 13:05
13F:推 askacis: 要是我會請MCU那邊改寫法,miss interrupt就掉資料, 03/10 12:53
14F:→ askacis: 別人一天到晚在等MCU就飽了 03/10 12:54
15F:→ gn00618777: 好,我再花點時間去了解MCU有沒有更好的解決方案 03/11 11:26
16F:→ gn00618777: AP這端我還有兩到三種方法可以嘗試,之後再來這邊報告 03/11 11:27
17F:→ gn00618777: 謝謝。 03/11 11:27
18F:→ wens: 沒設ONE_SHOT會更崩潰,而且SPI bus一次也只能一個存取啊 03/13 00:09
19F:→ wens: 我說的buffer指的是MCU上的buffer。舉一些I/O裝置為例,通常 03/13 00:10
20F:→ wens: 會內建個FIFO,可以存一點資料,然後可以設定要滿到什麼程度 03/13 00:10
21F:→ wens: 的時候發 interrupt或DRQ (DMA的狀況) 03/13 00:11
22F:→ wens: AP這端我覺得你沒太多可以做的,因為你就是沒辦法在top half 03/13 00:12
23F:→ wens: 做IO去讀資料出來,而且即便是top half也沒保證馬上輪到你, 03/13 00:12
24F:→ wens: 其他的ISR 也會擋你啊 03/13 00:12
25F:推 askacis: 另外一個暴力的方式是不要用kernel的SPI API,自己填 03/13 09:19
26F:→ askacis: register去控制SPI拿資料, 03/13 09:20
27F:→ gn00618777: 為什麼要用填 register的方式? 目前測時間 spi cs 拉 03/14 19:17
28F:→ gn00618777: 下來到被拉上來,整個spi寫入讀取只花 0.1ms 03/14 19:18
29F:→ gn00618777: 請問w大,您說我沒辦法在 top half 讀資料,是因為API 03/14 19:20
30F:→ gn00618777: 是阻塞的function嗎? 然後a大才說用填暫存器方式? 03/14 19:21
31F:→ gn00618777: 另外為何說沒設 ONE_SHOT會更崩潰..?? 我就是不打算 03/14 19:29
32F:→ gn00618777: 在 thread 做,所以 ONE_SHOT 沒有應該不會影響吧?? 03/14 19:29
33F:→ gn00618777: 抱歉..因為板子還未到,我只能一直先這樣詢問了解 03/14 19:30
34F:→ gn00618777: 懇請各位賜教 謝謝 03/14 19:31
35F:→ wens: 如果沒有要在 thread 裡面做,那似乎無所謂? 03/17 16:50
36F:→ wens: 然後top half不能讀資料確實是 API 限制沒錯 (SPI可能sleep) 03/17 16:51







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP