2017-05-01 30 views
1

我遇到了一些問題,試圖通過USB在Teensy和Raspberry Pi3之間進行通信。通過串口發送一些unsigned int時出錯(teensy - > raspi)

當我送unsigned int類型,我收到錯誤的號碼包含的價值13字節的所有號碼,其數值變化爲10

例如:

13 becomes 10; 
269 becomes 266; 
525 becomes 522; 
781 becomes 778; 
1037 1034; 
1293 1290; 
1549 1546; 
1805 1802; 
etc... 

,但不是爲別人...

無論我在pi上使用我的程序,還是通過/dev/ttyACMO發送cat命令。但是,當我在另一臺電腦上做同樣的事情時,一切正常。

我在另一臺計算機上遇到了同樣的問題,所以我認爲問題來自於我安裝的一個錯誤的庫。

你有什麼想法嗎?

PS:在teensy的代碼很簡單,只要:

unsigned int i = 0; 
    while(true){ 
     Serial.write((char*) &i, 4); 
     ++i; 
     delay(500); 
    } 
+0

問題就迎刃而解了:http://stackoverflow.com/questions/42209980/serial-port- binary-transfer-changes-carriage-return謝謝! – Alex

回答

0

不知道但是如果你看一下這些數字的二進制的確切原因,他們在相同的模式1101 = 13的所有終端(DEC )。 10(DEC)的二進制爲1010,這就是爲什麼我沒有解釋(不是板缺什麼的)

13 - >00001101269 - >100001101525 - >1000001101781 - >11000011011037 - >100000011011293 - >101000011011549 - >110000011011805 - >11100001101

也許錯誤來自一個4字節長int變量的轉換到一個1字節長的變量char變量。需要注意的是在C中的字符串(也許char*被解釋爲字符串)尾隨0被終止字符,請參閱String termination - char c=0 vs char c='\0'

在這種情況下13 - >00001101將成爲0 0001 10101010在最後半個字節等於10 (DEC)

然而,正如你指出只1101這似乎這個錯誤不能是原因...