哇哈哈~~今天下班的時候,BT終於起來了!!!
當它能scan到其它裝置時,高興的都快哭了....
跟TI的人通了20幾封mail,然後在今天下午mike學長帶著我去跟TI的人做電話會議...
經過TI的人確認,BTS是沒有問題的,因為其它家廠商都己經support成功了....只是不知道問題出在哪,但他說,他記得之前也有人碰過這種問題,只是他不太曉得...依稀記得跟size有關。
得到模糊的答案之後,就把主力放在source code上,第一步先檢查TI給的kernel,看裡面的UART source code是不是有問題...
經過1個多小時的追蹤,也確定跟kernel無關,因為UART source code只跟設定baudrate、tty device等相關而己,接著我就把重心放在最不可能的bluez....
但好死不死,我突然發覺,似乎真的是bluez的問題,因為在執行「hciattach」這個bluez tools的時候,為什麼會去download TI的firmware呢?
想到這點,心中百分之百確定TI一定有在bluez動手腳....之前會沒想到是因為bluez幾乎都support各種BT的profile及protocol,實在沒必要畫蛇添足...
果其不然,從「hciattach」這個binary file找到hciattach.c,但進去看的時候,也沒看到有關download BTS等相關code...
正準備要死心的時候,發現到hciattach_ti.c !!!
一點進去,哈,這個source code果然是專門處理BTS的...
在經過40幾分鐘的debug....終於發現,原來TI給的BTS要寫進memory的buff,比這個source code所定義的buff大了許多!!!
嘿嘿....一改完,重新編譯...REBOOT,
用hciattach再去鏈結一次serial裝置....OK !!
---------------------------------------------------
在這段debug的日子裡,為了找出原因....一步一步的確定baudrate、用示波器看TX、RX、CTS、RTS等工作是否正常....到最後找出答案,還滿令人振奮的!!!
或許大家都知道,當要debug一個東西時,都會從源頭找起,不然就是先確認hardware是否能正常工作,等確認ok了,再來開始著手software的問題。
我也是這樣,重編kernel...cross compile等等,懷疑BTS是否能用.....
所以我在這得到一個滿重要的體認:
「當要debug時,務必從printf error message開始往上找起。」
在debug的時候,沒人可以幫你,因為只有自己清楚遇到什麼樣的issue,你問別人說不定還會誤導自己的方向。
除了保持頭腦清晰,重要的是不能慌,再來就是先確定自己遇到什麼問題,然後把你遇到的問題、懷疑那個地方出錯、要如何去debug等等,這些都要再你提問時都要準備好,不然只會越撞越頭大。
不要期望有人給你答案,旁人給你的答案有百分之八十都是錯的,大部份都是經驗談,這點要牢記,除非是同一個問題。
恭喜恭喜........
ReplyDelete這個月聚餐吃壽喜燒,阿你晚上不上線是怎樣?
我有上唄
ReplyDelete只是我回到家、吃飯完、洗完澡大約9點半了吧...
你可以早上跟我說呀@@