最近收到LCM當機客訴。說會當機,經大陸工廠實測,機器連續運作200次會發生3次當機,但有的機器不會。
因為就是用我做的簡單多工,我自然必須去追。
問題是,當機率不高,實在不好抓。而且研發部只有一台機器,實在不容易做為代表。
我實在查不出那裡有問題,因為好像只有一個Task當,其他Task沒當掉。
所以只好在通訊解析上做了一個Buffer邊界檢查,然後請大陸工廠測。
結果很不錯,都沒當機。
這樣可以確定是通信品質有問題。
做MCU的程式,果然是一點可能發生錯誤的可能性都不行,因為實在不知電子是否有穩定。
可以再把 通訊解析上做了一個Buffer邊界檢查 說清楚一點嗎? 是因為收到錯的data 導至buffer 爆掉嗎?
回覆刪除謝謝
[版主回覆11/21/2010 22:37:18]這個算是通信封包上的問題。
因為封包簡單又要有效率,其中有一項是封包長度。
結果雜訊干擾的長度的資料,變成錯誤資料,在資料取用上就會產生問題。
會清除到別的Task資料造成當機。
後來就加入檢查是否是合理的長度,沒想到就這樣解了。
請問那是什麼機器?是用什麼通信介面在傳送封包?
回覆刪除照Bee大的說法就像是在接收端加一個資料濾波器,過濾多餘的或是錯誤的封包,如果檢查格式不對,就要求再傳送一次,不愧是好辦法。
[版主回覆08/08/2013 10:49:08]前公司的機器。是使用8051做為畫面處理器。
因為主要MCU只剩I2C界面,拉出板外再以1米長的線連起來。
I2C驅動能力弱,所以會有信號上的問題。
不過因是舊機器,通信格式無法修改。
是Bee第一個簡單多工開發平台,所以當時會担心穩定度。
這次事件反而證明,多工程式對於資料錯誤的耐受度較單工來得好。部分功能當了,有些功能還在動作。不會一個卡,就全卡死。
現在簡單多工也做了數個產品了。