我正在使用微控制器向Matlab发送无符号8位数据。每当有任何数据丢失时,Matlab显示的值为255.与WIN32 USB API接口的Matlab程序的基础代码显示,对于一系列错误,返回值-1。由于数据是无符号8位类型,因此值-1将被解释为255,这解释了为什么在发生传输错误时显示后一个数字。
那么,如何判断255的值是表示真实数据还是错误输出?
谢谢和欢呼!
答案 0 :(得分:2)
(这只是部分答案。)
这听起来类似于C的标准字符输入方式。
fgetc()
函数返回int
结果,值为EOF
(通常为-1
),如果出现错误或没有更多数据需要读取,或成功阅读的字符的值,视为unsigned char
并转换为int
。
如果您将fgetc()
返回的值存储在已签名的char
对象中(请注意,char
可以是已签名或未签名),则值-1
可以指示 fgetc()
返回EOF
,或它已成功读取值为0xFF
的字节。这就是这种带内信令的问题;可能很难区分错误指示和恰好看起来像错误指示的有效数据。
使用fgetc()
,有两种方法可以解决此问题。您可以将结果存储在int
中,这意味着您将获得EOF
( - 1)和0xFF
(255)的不同值。或者,您可以在致电feof()
后致电ferror()
和fgetc()
函数;如果其中一个返回true值,则表示EOF
表示实际错误或文件结束条件。
您还没有告诉我们您的微控制器和Matlab之间的接口,以了解如何区分这些。如果您可以调用其他函数,类似于feof()
或ferror()
,则可以在获得-1或255结果时调用它来确定结果的含义。或者,如果可能,您可以考虑修改您正在使用的接口,以便返回大于一个字节的结果,以便错误指示-1
与所有可能的有效数据值不同。
答案 1 :(得分:0)
好吧,如果函数在失败时应该返回-1,那么合理的输出就不会返回255.如果函数可以返回-1,它使用带符号的8位返回,而不是无符号,这意味着其返回范围应为-128 - > 128. 255永远不会是真正的数据。