2012-03-24 46 views
0

我正在使用微控制器向Matlab发送无符号的8位数据。无论何时出现任何数据丢失,Matlab显示值为255.与WIN32 USB API接口的Matlab程序的底层代码显示返回值为-1的错误范围。由于数据是无符号的8位类型,所以-1的值将被解释为255,这就解释了为什么当发生传输错误时显示后一个数字。辨别255的值是真数据还是错误输出

那么,如何判断255的值是真值还是错误输出呢?

谢谢,欢呼!

+2

这还不清楚。如果您的数据以无符号方式传输,那么-1从哪里来? – 2012-03-24 17:46:36

+0

我仔细查看了返回值为-1的错误类型,例如连接失败。但是,如果没有成功接收到串行数据,我无法在USB接口文件中找到任何特定的代码行(返回值为-1)。 在我的情况下,255的值序列很可能表示传输错误,因为微控制器上的状态标志计数器显示在那段时间内数据已被丢弃。 所以,我想知道在这种情况下Matlab是否默认返回-1。如果是这样,我原来的问题依然存在 – 2012-03-25 06:17:56

回答

0

那么,如果函数失败时返回-1,那么合理的输出将不会返回255.如果函数可以返回-1,则它使用带符号的8位返回值,而不是无符号的意味着它的返回范围应该是-128 - > 128。255永远不会是真正的数据。

+0

请阅读我对上面Keith Thompson的回复。接收和显示数据的主程序指定使用无符号8位数据,这与微控制器发送的数据类型相同。所以,无论是在其中一个链接的函数中有错误,还是Matlab在遇到这类数据错误时默认返回-1值。我仍然试图按照所有链接文件中的代码来确定问题是否与前者相关。但是,如果是后一种情况,在无符号情况下,默认值-1是否不会返回为255?我还没有找到关于此的任何信息。 – 2012-03-25 07:20:24

2

(这仅是部分答案。)

这听起来类似于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与所有可能的有效数据值不同。

+0

我正在使用的程序实际上是一个示例(它带有一个开源库),为了改变接收到的字节数,我已经稍微编辑了一些代码。通过分散在几个文件上的几个函数,程序间接调用与USB端口连接的可执行文件。 正如我在上述Oli Charlesworth的回复中所提到的,如果某些串行数据无法通过,我无法在USB接口文件中找到任何返回值-1的特定行代码。因此,我想知道在这种情况下Matlab是否默认返回-1,如果是这样,我应该怎么做。 – 2012-03-25 06:54:00