Определение, является ли значение 255 подлинными данными или выводом ошибки - PullRequest
0 голосов
/ 24 марта 2012

Я использую микроконтроллер для отправки 8-битных данных без знака в Matlab. Всякий раз, когда происходит потеря данных, Matlab отображает значение 255. Базовый код программы Matlab, который взаимодействует с API-интерфейсами WIN32 USB, показывает, что значение -1 возвращается для диапазона ошибок. Поскольку данные относятся к 8-битному типу без знака, значение -1 будет интерпретировано как 255. Это объясняет, почему последнее число отображается при возникновении ошибки передачи.

Итак, как можно определить, представляет ли значение 255 подлинные данные или вывод ошибок?

Спасибо и ура!

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

(Это только частичный ответ.)

Это звучит подобно тому, как выполняется стандартный ввод символов C.

Функция fgetc() возвращает результат int, которыйэто либо значение EOF (обычно -1), если произошла ошибка, либо нет больше данных для чтения, либо значение успешно прочитанного символа, обработанное как unsigned char и преобразованное в int.

Если вы храните значение, возвращаемое fgetc(), в объекте char со знаком (обратите внимание, что обычный char может быть как со знаком, так и без знака), значение -1 может указывать , который fgetc() вернул EOF, или , чтобы он успешно прочитал байт со значением 0xFF.Вот в чем проблема с этим типом внутриполосной сигнализации;может быть трудно различить индикацию ошибки и действительные данные, которые выглядят как индикация ошибки.

С fgetc() существует два способа решения этой проблемы.Вы можете сохранить результат в int, что означает, что вы получите различные значения для EOF (-1) и 0xFF (255).Или вы можете вызвать функции feof() и ferror() после вызова fgetc();если любое из них возвращает истинное значение, вы знаете, что EOF указывает на фактическую ошибку или состояние конца файла.

Вы недостаточно рассказали нам об интерфейсе между вашим микроконтроллером и Matlab, чтобы знать, какВы можете сделать это различие.Если есть какая-то другая функция, которую вы можете вызывать, например, feof() или ferror(), вы можете вызвать ее, когда получите результат -1 или 255, чтобы определить, что означает этот результат.Или, если возможно, вы можете подумать об изменении интерфейса, который вы используете, чтобы он возвращал результат размером более одного байта, чтобы индикация ошибки -1 отличалась от всех возможных допустимых значений данных.

0 голосов
/ 24 марта 2012

Что ж, если функция должна возвращать -1 в случае сбоя, разумный вывод не вернет 255. Если функция может вернуть -1, она использует 8-битный возврат со знаком, а не без знака, чтодиапазон его возврата должен быть -128 -> 128. 255 никогда не будет подлинными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...