а почему типы головы и хвоста unsigned char ? не критично конечно но все же.
Конструкция используется давно, с контроллеров где памяти было мало.
При максимальной величине буфера (как указано в примере в 256 байт), для головы и хвоста как раз хватает байта (0-255) (unsigned char)
да это мне все понятно что хватит одного байта, почему он char, а не uint8_t например или byte?
просто char в качестве “указателя”, ну ладно может я придираюсь просто.
Я еще с UNIX привык к unsigned char 8-bit, да и ее воспринимали многие компиляторы потом, а uint8_t появился сравнительно недавно:
а unsigned char уже много лет:
тип я всегда задаю явно, неизвесно, что завтра в стандарте будет означать char. А написал uint8_t и башка не болит за переносимость. ![]()
Я бы рад, Ну нет в ICC AVR, например, unit8_t ![]()
Нужно переопределение типов делать тогда
using uint8_t = unsigned char;
долго писать?
Так на ICC AVR не прокатывает, ошибку дает.
попробовал так - норм:
#define uint8_t unsigned char
#define uint16_t unsigned int
#define int16_t int
форум постепенно превращается в вертеп сектантов. Кошмар, блин!
Отвечу как в анекдоте про фотографию Ломоносова.
“А мне нравится”
На Ардуино я перешел в 2015 с появлением ESP8266.
А под AVR пишу годов 2005, до этого 8051, вот и использовал ICC . Написано то много.
Сейчас стоит последняя 7.23 Professional
8-ка не зашла она на MS VC уже базировалась. Мне ее под WinNT хватило.
А ICC 7.ХХ легкий и быстрый, и код очень неплохой получается.
Под Win10 нормально работает.
А связь? Ардуино плагин содержит не весь SDK. Часть доступна только в чистом программировании есп-шки.
А про AVR так - родной SDK от Атмела использует GCC. Следовательно все остальное - сектантство.
GCC уже давно стандарт компилятора. ;)))
Да мне пока всего хватало, неразрешенных задач не было.
Наверное, но в ICC были и есть Wizzard и оболочка, сильно сокращающие время на ползанье по даташитам и отладку кода для любителей.
8266 может и так. Это переходный недоделок. А в 32ом много всякого интересного, что недоступно из Ардуино. В Ардуино все максимально безглючное включено. Штоп себе в ногу не стреляли! ;))
Добавлю: зато все Адафрут библиотеки доступны без камлания. Так что я и сам часто выбираю -куда подаццо.
Спасибо! Буду иметь в виду.
typedef unsigned char uint8_t;
typedef signed char int8_t;
typedef unsigned int uint16_t;
typedef signed int int16_t;
Получившаяся функция поиска ответа от модема без кольцевого буфера:
unsigned char findOKRNfromModem(const unsigned char inByte /*входной байт из модема*/) { // Поиск во входящих из модема данных OK
const unsigned char strOK[] = "OK\r\n"; // строка поиска
static constexpr unsigned char lenOK = 4; // длина строки поиска // можно strlen использовать, но константой быстрее
static unsigned char foundPosOK = 0; // число найденных символов в строке OK\r\n
if (strOK[foundPosOK] == inByte) { // нашелся символ
if ((++foundPosOK) == lenOK) { // увеличиваем счетчик найденых символов и заодно сдвигаем позицию поиска // нашлась вся строка
foundPosOK = 0; // обнуляем поиск
return 1; // успешно выходим
}
} else { // не совпадает
foundPosOK = 0; // обнуляем поиск
}
return 0;
}
Reset!
ATZ
OK
ATE0ATE0
OK
ATV1
OK
AT+CMEE=2
OK
AT+CLIP=1
OK
AT+DDET=1
+CME ERROR: operation not allowed
