Обработка AT-команд
- Войдите на сайт для отправки комментариев
Сб, 10/11/2018 - 11:33
Столкнулся с тем, что ответом на AT может быть не одна строка и через произвольные интервалы времени.
Есть ли способ гарантированно корректно обрабатывать ВСЕ символы?
Такое не работает:
{
String _resp = "";
long _timeout = millis() + 10000;
while (!Serial1.available() && millis() < _timeout) {};
if (Serial1.available())
{
long _timeout_local;
do
{
while (Serial1.available())
{
int readchar=Serial1.read();
_resp = _resp+char(readchar);
_timeout_local = millis() + 5000;
if DEBUG
{
Logger=Logger+readchar;
Serial.print(char(readchar));
Serial.println(Logger.length());
}
}
} while (millis() < _timeout_local);
Serial.println("Timeout local...");
}
else
{
Serial.println("Timeout...");
}
return _resp;
}
Примеры и на форуме есть и в интернете.
Необходимо полностью переосмыслить работу с входящими байтами, переходить на char, избавляться от String , читайте про циклический буфер.
1. Нету ничего, третий день поисков.
2. Меня устраивает мой подход. Мне надо получить по фиксированному таймауту строку и её обработать. Всё, что за таймаутом - неважно. Что здесь не так?
3. Зачем мне циклический буфер?
4. Зачем мне избавляться от String?
а длина буфера у сериала какая, выдерживает 10 секундный таймаут?
Зачем ему его выдерживать если символы забираются сразу?
Ну, а если устраивает, то к чему тогда эта тема?
1. Нету ничего, третий день поисков.
2. Меня устраивает мой подход. Мне надо получить по фиксированному таймауту строку и её обработать. Всё, что за таймаутом - неважно. Что здесь не так?
3. Зачем мне циклический буфер?
4. Зачем мне избавляться от String?
3. Уместить в ОЗУ МК например пару тысяч байт ответа от модема достаточно проблематично - получится - поделитесь плиз, самому интересно.
4. См.п.3 - данный объект не очень рационально кушает память. Хотя для простых задач вполне подходит - получится - аналогично просьба поделиться.
http://arduino.ru/forum/apparatnye-voprosy/vse-o-sim800l-i-vse-chto-s-ni...
Зачем ему его выдерживать если символы забираются сразу?
строка 22 так не думает
А что не так с 22?
К тому, что не устраивают внезапно рандомные куски вывода при корректно работающем посимвольном MultiSerial, взятом за основу. Памяти в 32 кб вроде как более чем достаточно для хранения даже двухкилобайтного массива лога. Если String поставить в MultiSerial он обнуляется где-то при пяти тысячах символов. Что ещё странно - при первом выводе в логе уже килобайт символов, хотя в setup() он был обнулён.
Очень странно. Странно что фигни в код набросают, приходят за советом и его не слушают. Еще странно миллис некоторые используют, не буду уточнять, еще одной темы про переполнения не хватает;) Но берегитесь сюрпрайзов!
Ну допустим не нашли пример, ну вот оно, http://arduino.ru/forum/apparatnye-voprosy/gsm-modem-a6-v-rezhime-tcp может поможет.
Фигню в коде покажите, пожалуйста.
Ну, то, что платформа себя ведёт как хз что - это вина разрабов платформы, в общем-то. Делаете абстракции - делайте качественно, а не "а здесь рыбу заворачивали".
"Страница не найдена" (
Фигню в коде покажите, пожалуйста.
Ну, то, что платформа себя ведёт как хз что - это вина разрабов платформы, в общем-то. Делаете абстракции - делайте качественно, а не "а здесь рыбу заворачивали".
"Страница не найдена" (
Не нравится платформа или не умеете её программировать - валите в другой форум.
Пример в 6 сообщении есть, в atmega328p 2 КБ ОЗУ как вы собрались 5000 байт сохранить денамических данных я например не понял.
Понимаете, мне надо не академически исследовать вопрос и знакомиться с философией разрабов МК и дуины, а практически решать задачу в поставленные сроки с обозначенными требованиями. Таймауты устроят, советы поменять подход к обработке и её всю строить вокруг асинхронной хрени - нет. Требования банальны: получить все символы (полкилобайта всего) за заданный промежуток времени полностью совпадающими с результатом MultiSerial.
"Страница не найдена" (
У меня 32 кб.
Сами валите.
Круто, свалил.....
"Токсичное русское коммьюнити", да.
1. Нету ничего, третий день поисков.
2. Меня устраивает мой подход. Мне надо получить по фиксированному таймауту строку и её обработать. Всё, что за таймаутом - неважно. Что здесь не так?
3. Зачем мне циклический буфер?
4. Зачем мне избавляться от String?
3. Скорее всего не зачем.
4. Затем что это совершенно ненужная приблуда в микроконтроллере. Тяжелое наследие true-плюсанутых программистов забредших с больших машин. Всё нормально делается и без него.
"Страница не найдена" (
поправил
"Токсичное русское коммьюнити", да.
это нормально, зло в стадии саморазрушения.
У меня 32 кб.
можно уточнить, что за плата у вас?
Zero.