本帖最后由 wzg_soullon 于 2010-01-08 08:36:46 编辑

解决方案 »

  1.   

    若用Received事件,其實它不一定保證讀進來一個完整的片段(可能只有片段)
    比較完善的作法是用個queue收集讀到的資料,再依辨識字元+長度+Checksum等Frame定義檢查
    但為何大部分的示範寫法都不這樣作呢? 因為底層的接收工作單純,而且設備速度發送來就不快,
    遇到不穩定片段時,頂多加個Sleep()等待就行,
    但愈上層的APP工作較複雜,若還是照底層收法,通常會有miss的現象(片段或雜訊bytes)。封定收集+檢查的完善作法,也常常運作在網路socket收取上
    這就是有經驗的人寫出來的程式通常就穩定的原因。
      

  2.   

    另外RS232接收及傳送時,也要考慮到flow control的問題
    否則sender一直送,而receiver因為忙碌超過read_buffer就會miss後來的資料了。總之,愈上層複雜的程式,一定就要考慮到更多的方面
    才會穩定。
      

  3.   

    tomexou 你好,能给个例子吗?如果不用received事件接收,用单独的一个线程循环检测吗?那样会不会浪费cpu资源啊