массив char, не понимаю
- Войдите на сайт для отправки комментариев
приветствую мужики.
хочу сделать сигналку в гараж, использую М590, ну и пытаюсь разобраться со строками.
с программированием знаком очень поверхностно, но неспешно влезаю, интересно.
так вот, String многие используют, читал примеры сигналок здесь, удобно да, но мне не очень нравится, дело в чем, хотелось бы номер мастера забивать не тупо в программе, а пунктом в меню, выбрав который, контроллер ждет звонок и номер звонившего забивает мастером в епром, ну и вот: собирать строку String используя char посимвольно удобно, но разбирать опять на char посимвольно, дабы выдернуть именно номер как то не правильно, как мне кажется.. и да, возможно есть способ сделать это проще, я действительно начинающий, а со строками совсем профан, да..
как я вижу алгоритм работы с м590, слушаем порт, если что то есть, собираем в массив, потом массив начинаем посимвольно терзать длинным алгоритмом с кучей флагов в результате, которые и выведут алгоритм самой сигналки куда нужно, это грубо, не буду писать о управляемом питании м590, о ноге ринг с м590, о ноге старт м590, о проверках работоспособности путем запросов и тд
в общем не хотел так сильно отвлекаться, извините )) пока просто пытаюсь покрутить сам массив и так и этак ))
сам вопрос, объявляю массив, указываю размер, потом пробую забивать в сериал пару символов, и выводить - все получается, не понятно одно, почему при размере массива в 5 символов, получается загонять в него хоть 20..
чего я не понял здесь? массив размером 5 элементов, получается заполнить на большее число элементов.
#include <SoftwareSerial.h> #define MassTotal 5 char mass[MassTotal]; // объявляем массив byte d=0; byte i=0; void setup() { Serial.begin(9600); } void loop() { if(Serial.available()){ mass[i]=Serial.read(); i++; delay(2); d=i; } if(d>0){ for(byte i=0; i<d;i++) Serial.print(mass[i]); d=0; i=0; } }
Потому что в языке Си обязанность проверять, не вышли ли данные за границы массива - лежит на программисте, то есть на вас.
Это можно сделать в строке 20 например так:
ух ты, т.е. если я объявил в n-е число элементов, а сам закидал туда больше, есть шанс что я зафигачу другие участки памяти, где могут быть сосвсем не повинные данные, понял, спасибо.
имеет смысл объявить массив с запасом, на все случаи
ух ты, т.е. если я объявил в n-е число элементов, а сам закидал туда больше, есть шанс что я зафигачу другие участки памяти, где могут быть сосвсем не повинные данные
Именно так, причем шанс этот в МК очень велик - памяти-то мало.
По этой же причине обьявить большой массив на все случаи жизни часто возможности нет. Более продуктивный путь - обрабатывать приходящие сообщения по частям.
Более продуктивный путь - обрабатывать приходящие сообщения по частям.
это типа читаем первые символы с м590 (в моем случае) и если соответствует определенным, следующими заполняем другой, специально созданный, массив? и уже дальше работаем с ним?
или чего это я, используем дальше тот же, предварительно очистив. )
или нет, наверное мне проще пока будет объявить массив в 300 элементов, и пробовать пока так, с жсм модуля вроде больше не бывает
наверное мне проще пока будет объявить массив в 300 элементов, и пробовать пока так, с жсм модуля вроде больше не бывает
На большинстве модемов есть GPRS - а значит интернет. Размеры ответа WEB-сервера могут быть сотни килобайт и сотни мегабайт. Так что советую сразу осваивать правильные приемы работы в ограиченной памяти.
Размеры ответа WEB-сервера могут быть сотни килобайт и сотни мегабайт. Так что советую сразу осваивать правильные приемы работы в ограиченной памяти.
вот да..
была мысль на ftp данные отправлять еще..
спасибо.