Irinka
18.Декабрь.2022 16:42:11
1
Следующим этапом в моём обучении будет кольцевой буфер.
Как сказали в соседней ветке, алгоритм поиска перевода строки не является хорошим вариантом работы с буфером (а он для меня такой простой…)
if (temp == ‘\n’ && pos_buf > 1 && buffers[pos_buf - 2] == ‘\r’) {
Спойлер
#include <SoftwareSerial.h>
SoftwareSerial SIM800(9, 2);
#define MAX_BUF 50
char buffers[MAX_BUF];
void setup() {
Serial.begin(9600);
SIM800.begin(9600);
Serial.println(F("Start!"));
SIM800.println(F("AT"));
}
//Запись в буфер
void write_buffer(uint8_t temp) {
}
//Чтение из буфера
void reading_buffer() {
}
//Очистка буфера
void clearing_buffer() {
}
void loop() {
if (SIM800.available()) write_buffer(SIM800.read());
}
Кольцевой буфер.
1 этап(функция). При записи нужно удалять старые данные и записывать на их место новые?
1 лайк
BOOM
18.Декабрь.2022 17:19:43
2
Почитай:
Смотри там саму идею и реализацию (хотя, наверное, лучше бы все классом оформить), «пример» использования там с ошибкой грубой.
Очень сложная для начинающих статья.
Если делать полноценный кольцевой буфер, то тупо надо хранить две переменных, абсолютная позиция и количество непрочитанных байт (+размер буфера).
В случае с sim800 нафиг не нужен размер оставшихся байт. Просто искать вхождение искомой строки с последнего пришедшего байта.
Вообще-то голову и хвост. Не?
2 лайка
BOOM
18.Декабрь.2022 18:00:57
6
@andycat как с одним «адресом» по кольцу «гулять»?
kolyn
18.Декабрь.2022 18:04:08
7
А по нему (буферу) и не надо гулять, основная задача найти ответ от медема.
andycat
18.Декабрь.2022 18:17:02
10
bool s800lib::findResp(char * inStr, byte inByte) { // поиск строки в циклическом буфере
byte slen = strlen(inStr); // длина искомой строки
if (inByte == inStr[slen - 1]) { // если последний символ совпадает - продолжаем искать всю строку
byte cfound = 1; // число совпавших символов
byte abpos = pos_buf; // абсолютная позиция в буфере поиска-1 = последнему символу искомой строки
if (!abpos) abpos = max_size_response_buf - 1; else --abpos; // ищем с предпоследнего символа
for ( byte i = 0; i < (slen - 1); ++i) {
if (inStr[slen - 1 - i] != resp_buf[abpos]) return false;
if (!abpos) abpos = max_size_response_buf - 1; else --abpos;
}
} else {
return false;
}
return true;
}
andycat
18.Декабрь.2022 18:18:16
11
Озадачили)
Не помню, ща найду код.
andycat
18.Декабрь.2022 18:21:17
12
BOOM
18.Декабрь.2022 18:22:49
13
andycat:
Uart буфер
Может я чего то не понимаю, но тема называется «побеждаем кольцевой буфер». Хотя…
andycat
18.Декабрь.2022 18:23:35
14
Да, именно uart очень подходит под кольцевой буфер.
Так абсолютная позиция чего? Головы или хвоста?
(о том, что ссылка, мягко говоря, странная, я даже не говорю)
andycat:
А что не так с ссылкой?
Я ожидал увидеть ссылку на документацию, а не на форум.
Какое форум вообще имеет отношение к кольцевому буферу?
andycat
19.Декабрь.2022 06:21:09
19
на что? на алгоритм/реализацию кольцевого буфера?
Вы нормальный? их вагон…
P.S. Правильно кто то из модераторов форума недавно написал: сюда в основном ходят читать, а не постить. Т к придет вот такой занудный заумный дядька, все желание отобьет.
Green
19.Декабрь.2022 06:26:07
20
andycat:
Вы нормальный? их вагон…
Думаю, это не дядьке нужно, а ТС.