1. 程式人生 > >【C語言實現串列埠通訊知識點整理(二)】遇到的問題整理(待續....)

【C語言實現串列埠通訊知識點整理(二)】遇到的問題整理(待續....)

1.c編譯錯誤--error:stray \357 in program

UTF-8編碼問題。UTF-8編碼有BOM和無BOM格式。BOM,ByteOrderMark(位元組標記順序),表明使用UTF8來進行編碼。UTF-8的BOM通常為3個位元組EF BB BF。轉換成對應的字元檢視,就是‘\357’,‘\274’,‘\233’。

很大可能是中文字元的原因

2.static declaration follows non-static declaration 的錯誤 

原因是 呼叫的靜態函式沒有先宣告一下,就是它定義在你呼叫之後啦。

解決:呼叫之前宣告一下這個函式。

3.Linux下undefined reference to ‘pthread_create’問題解決

 需手動連結-執行緒庫 -lpthread

4.串列埠列印資訊為空,或者亂碼。

很大可能是波特率不對

5.在標頭檔案中定義了一個結構體RS_DATA,在A執行緒中對這個結構體RS_DATA進行了賦值,但是在另一個檔案中呼叫該賦值的變數時發現,沒有賦值成功,列印一直是0。。。

 首先想到沒有執行緒同步.......然而加互斥鎖以後仍然沒有解決!最後是因為在外部呼叫的時候沒有用extern......

在C語言中,修飾符extern用在變數或者函式的宣告前,用來說明“此變數/函式是在別處定義的,要在此處引用”。

6.在過程中遇到一個問題,在開啟串列埠成功的情況下讀到的資料一直獲取不正常

解決方法:波特率就是通訊的速率,只有波特率一致的情況下才能保證接收方和傳送方獲取同樣的資料。

7.有遇到幾次宕機問題,通過分析coredump檔案,1:在使用strcpy()函式時,沒有給指標申請空間導致段錯誤 2:在讀寫的時候沒有進行異常處理,沒有讀到東西后面沒有分析直接進行操作導致段錯誤。

8.因為建立執行緒後,執行緒並不是立刻就執行,而是等到時間片到來後再執行。

這樣就可以解釋建立執行緒後面的列印資訊出現線上程裡的列印資訊前面。

                    ......
  1          CREAT_pthread();
  2          printf("%s     %d\n",__FUNCTION__,__LINE__);
                    ......
//第二行資訊先打印出來,建立的執行緒裡面的列印資訊後出現