辨别255的值是真实数据还是错误输出

时间:2012-03-24 17:40:58

标签: c matlab

我正在使用微控制器向Matlab发送无符号8位数据。每当有任何数据丢失时,Matlab显示的值为255.与WIN32 USB API接口的Matlab程序的基础代码显示,对于一系列错误,返回值-1。由于数据是无符号8位类型,因此值-1将被解释为255,这解释了为什么在发生传输错误时显示后一个数字。

那么,如何判断255的值是表示真实数据还是错误输出?

谢谢和欢呼!

2 个答案:

答案 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永远不会是真正的数据。