我正在使用微控制器向Matlab發送無符號的8位數據。無論何時出現任何數據丟失,Matlab顯示值爲255.與WIN32 USB API接口的Matlab程序的底層代碼顯示返回值爲-1的錯誤範圍。由於數據是無符號的8位類型,所以-1的值將被解釋爲255,這就解釋了爲什麼當發生傳輸錯誤時顯示後一個數字。辨別255的值是真數據還是錯誤輸出
那麼,如何判斷255的值是真值還是錯誤輸出呢?
謝謝,歡呼!
我正在使用微控制器向Matlab發送無符號的8位數據。無論何時出現任何數據丟失,Matlab顯示值爲255.與WIN32 USB API接口的Matlab程序的底層代碼顯示返回值爲-1的錯誤範圍。由於數據是無符號的8位類型,所以-1的值將被解釋爲255,這就解釋了爲什麼當發生傳輸錯誤時顯示後一個數字。辨別255的值是真數據還是錯誤輸出
那麼,如何判斷255的值是真值還是錯誤輸出呢?
謝謝,歡呼!
那麼,如果函數失敗時返回-1,那麼合理的輸出將不會返回255.如果函數可以返回-1,則它使用帶符號的8位返回值,而不是無符號的意味着它的返回範圍應該是-128 - > 128。255永遠不會是真正的數據。
請閱讀我對上面Keith Thompson的回覆。接收和顯示數據的主程序指定使用無符號8位數據,這與微控制器發送的數據類型相同。所以,無論是在其中一個鏈接的函數中有錯誤,還是Matlab在遇到這類數據錯誤時默認返回-1值。我仍然試圖按照所有鏈接文件中的代碼來確定問題是否與前者相關。但是,如果是後一種情況,在無符號情況下,默認值-1是否不會返回爲255?我還沒有找到關於此的任何信息。 – 2012-03-25 07:20:24
(這僅是部分答案。)
這聽起來類似於C的標準字符輸入完成的方式。
的fgetc()
函數返回一個int
結果,或者是值EOF
(通常-1
),如果有錯誤或沒有更多的數據讀取,或者被成功地讀取,視爲該字符的值unsigned char
並轉換爲int
。
如果您存儲由fgetc()
在簽署char
對象返回的值(注意,普通char
可以或者符號或無符號)的-1
值可能表明要麼是fgetc()
回到EOF
,或它成功讀取一個值爲0xFF
的字節。這就是這種帶內信令的問題;可能難以區分錯誤指示和看起來像錯誤指示的有效數據。
隨着fgetc()
,有兩種方法可以解決這個問題。您可以將結果存儲在int
中,這意味着您將得到EOF
(-1)和0xFF
(255)的不同值。或者您可以在致電fgetc()
後致電feof()
和ferror()
函數;如果要麼返回真值,您知道EOF
表示實際錯誤或文件結束條件。
您還沒有告訴我們您的微控制器與Matlab之間的接口是否足夠了解您如何才能做出區分。如果還有其他函數可以調用,類似於feof()
或ferror()
,您可以在得到-1或255結果時調用它來確定結果的含義。或者,如果可能的話,您可能會考慮修改您正在使用的接口,以便返回大於一個字節的結果,以便錯誤指示-1
與所有可能的有效數據值不同。
我正在使用的程序實際上是一個示例(它帶有一個開源庫),爲了改變接收到的字節數,我已經稍微編輯了一些代碼。通過分散在幾個文件上的幾個函數,程序間接調用與USB端口連接的可執行文件。 正如我在上述Oli Charlesworth的回覆中所提到的,如果某些串行數據無法通過,我無法在USB接口文件中找到任何返回值-1的特定行代碼。因此,我想知道在這種情況下Matlab是否默認返回-1,如果是這樣,我應該怎麼做。 – 2012-03-25 06:54:00
這還不清楚。如果您的數據以無符號方式傳輸,那麼-1從哪裏來? – 2012-03-24 17:46:36
我仔細查看了返回值爲-1的錯誤類型,例如連接失敗。但是,如果沒有成功接收到串行數據,我無法在USB接口文件中找到任何特定的代碼行(返回值爲-1)。 在我的情況下,255的值序列很可能表示傳輸錯誤,因爲微控制器上的狀態標誌計數器顯示在那段時間內數據已被丟棄。 所以,我想知道在這種情況下Matlab是否默認返回-1。如果是這樣,我原來的問題依然存在 – 2012-03-25 06:17:56