(Это только частичный ответ.)
Это звучит подобно тому, как выполняется стандартный ввод символов 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
отличалась от всех возможных допустимых значений данных.