使用tp的irq腳做手勢喚醒。雙擊螢幕後,從log看cpu已經被喚醒了,但很快又睡下去,通過log分析,發現沒有進入中斷處理函式。這裡使用的電平中斷。以前已分析過電平/邊沿喚醒cpu流程列印發現handle_level_irq只跑了一遍,第二次的handle_level_irq沒有過來導致無法進入中斷函式。一開始懷疑是低電平的持續時間不夠,導致沒有第二次中斷過來。修改tp的韌體,讓tp的irq拉低到500ms,也是一樣的情況,也用示波器確認訊號確實拉低了500ms。跟cpu廠商那邊溝通,說該cpu支援邊沿喚醒,也支援電平喚醒,建議用邊沿喚醒測試。修過**後,邊沿喚醒的確有效,但電平喚醒為什麼不會進入中斷。fae加了一些列印資訊,也發現什麼異常。
檢視cpu手冊,gpio支援dbc和level模式,再看下gpio**,只有dbc模式才會設定電平模式,所以設定電平中斷沒有成功,導致還是邊沿的電平觸發方式,所以中斷只會過來一次,第二次中斷沒有過來,導致沒有進入中斷模式,也就是平台**的bug。
static int sprd_gpio_plus_irq_set_type(struct irq_data *data,unsigned int flow_type)
sprd_gpio_plus_write(chip, channel, reg_int_crl,
bit_int_level, 1, 0);
irq_set_handler_locked(data, handle_level_irq);
break;
}
記一次除錯
這是我最近幾個月來遇到的最棘手的乙個問題 昨天花了4個小時找出第一層次的原因 這個糾結啊,本來和老婆說好準時下班回家吃飯的,結果被這個問題拖了老久。這是乙個gradle的plugin,用來resolve公司內部的dependency的,弄完了跑測試專案的,拋乙個npe,而且npe還不在自己的 裡面。...
記一次除錯
這是我最近幾個月來遇到的最棘手的乙個問題 昨天花了4個小時找出第一層次的原因 這個糾結啊,本來和老婆說好準時下班回家吃飯的,結果被這個問題拖了老久。這是乙個gradle的plugin,用來resolve公司內部的dependency的,弄完了跑測試專案的,拋乙個npe,而且npe還不在自己的 裡面。...
記一次nginx module 除錯
參考了 先進入nginx工作目錄 usr local nginx sbin 使用gdb q tui q選項是以安靜模式啟動,不顯示gdb版本等資訊。tui選項可以顯示 介面 然後在gdb中啟動nginx shell nginx 啟動之後,可以檢視當前nginx中的程序號 shell pidof ng...