Вам не нужно их удалять, просто не передавайте их на обработку. Вы можете либо проверить символ data
перед тем, как поместить его в буфер строк (ss
), либо после получения полной строки найдите первый соответствующий символ и передайте только строку, начинающуюся с этой позиции, в свои функции обработки.
Var 1:
BOOL isGarbage(char c){
return c<'0' || c > '9';
}
if (data==0x0D)
{
puts(ss);printf("\r")
a=0;
memset(ss, '\0', sizeof(ss));
} else {
if(!isGarbage(data))
{
ss[a]=data;
a+=1;
}
}
Var2:
if (data==0x0D)
{
const char* actualString = ss;
while(isGarbage(*actualString )){
actualString ++;
}
puts(actualString );printf("\r")
a=0;
memset(ss, '\0', sizeof(ss));
} else {
ss[a]=data;
a+=1;
}
Однако:
возможно, вам следует попытаться решить проблему в отличие от простого устранения симптомов (подавить ' ? 'символов).
Каково точное значение сомнительных символов? Я подозреваю, что '?' используется только для представления непечатаемых данных.
Возможно, ваша конфигурация интерфейса неверна, и отправитель использует программное управление потоком данных на линии, а подозрительные символы XON
/ XOFF
байты
Еще одно примечание:
Вы можете столкнуться с проблемами, если будете использовать более сложные функции или даже периферийные устройства из своей подпрограммы обработки прерываний (ISR).
Я бы настоятельно рекомендовал заполнять там только буферы и делать все остальные вещи в основном л oop. вызвано некоторыми буферами данных изменчивых флагов.
Также я не понимаю, почему вы используете дополнительный буфер (ss
) в ISR, поскольку кажется, что RX-буфер уже существует. Реализация выглядит так, что существует хорошая реализация буфера RX-приема, которая должна иметь некоторые функции / возможности для получения содержимого буфера в основной l oop, так что вам не нужно добавлять свой собственный код в ISR.
Дополнительные дополнительные примечания:
строковый массив, максимальная длина которого равна 10 цифрам.
Я считаю больше, надеюсь, ваш ss
массив больше этого, и вам также следует учитывать тот факт, что что-то может go быть неправильным при передаче, и вы получите намного больше символов до следующего '\n'
. В настоящее время вы перезаписываете все свои оперативные памяти.