Азбука Ардуино
Модератор: Gnat
- Andrey.I
- Сообщения: 1734
- Зарегистрирован: Вт июл 02, 2013 1:21 pm
- Откуда: Москва
- Контактная информация:
Азбука Ардуино
Вместо дефайна записал цифры, то что делает дефайн автоматически. Переменные всё равно нашлись.
С уважением, Андрей
Азбука Ардуино
Andrey.I, Добрый день Андрей, у Вас в скетче ошибка int Period = 100; это переменная так как ее значение изменяется в процессе выполнения скетча.
С уважением Владимир.
- MOT
- Сообщения: 2278
- Зарегистрирован: Сб дек 16, 2017 7:58 pm
- Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир
Азбука Ардуино
Андрей, что Вы имеете ввиду?
P.S.: #define - по сути это констатнта, которая объявляется в начале программы. Замечательный оператор. Целесообразно использовать, когда много констант в коде, и чтобы не запоминать "циферки" мы их объявляет словами со значением, становится интуитивно понятнее всё сразу.
Последний раз редактировалось MOT Ср янв 29, 2020 10:18 am, всего редактировалось 1 раз.
С уважением, Виктор Евгеньевич
Accept Corp.
Accept Corp.
Азбука Ардуино
Давайте рассмотрим в продолжении вопроса оптимизации кода следующие скетчи
Первый абсолютно пустой
Второй с переменными
Третий с #define Red_led 13
Как правильно заметил Андрей во всех случаях под глобальные переменные выделяется 9 байт (на разных ардуино выделяемый объём памяти может варьировать) это тот минимум который выделяется под переменные и нужно стараться писать скетч так чтобы по возможности не вылазить за этот минимум.
Обратите внимание объём памяти выделен в байтах а объём переменных в битах!!!
Первый абсолютно пустой
Второй с переменными
Третий с #define Red_led 13
Как правильно заметил Андрей во всех случаях под глобальные переменные выделяется 9 байт (на разных ардуино выделяемый объём памяти может варьировать) это тот минимум который выделяется под переменные и нужно стараться писать скетч так чтобы по возможности не вылазить за этот минимум.
Обратите внимание объём памяти выделен в байтах а объём переменных в битах!!!
С уважением Владимир.
Азбука Ардуино
MOT, Виктор Евгеньевич про константы мы поговорим позже а #define это оператор подмены значений, когда мы будем разбирать константы я постараюсь более детально объяснить в чем разница. Я стараюсь изначально использовать правильные термины чтобы в дальнейшем не было путаницы.
С уважением Владимир.
- MOT
- Сообщения: 2278
- Зарегистрирован: Сб дек 16, 2017 7:58 pm
- Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир
Азбука Ардуино
SmartAvit, Владимир, не в коем случае не хотел вмешиваться в процесс изложения Вами учебной информации. Я не стал лезть по перёд батьки в пекло и просто выразил свою мысль, чтобы было понятнее другим. Про оператор #define я в курсе. Простите, коль что не так!
С уважением, Виктор Евгеньевич
Accept Corp.
Accept Corp.
- Andrey.I
- Сообщения: 1734
- Зарегистрирован: Вт июл 02, 2013 1:21 pm
- Откуда: Москва
- Контактная информация:
Азбука Ардуино
Вот эту запись внизу окна Arduino IDE: "Глобальные переменные используют 9 байт (0%) динамической памяти" она не изменилась, т.е. я никак не мог увидеть, что заменив переменные дифайном мы оптимизировали код.
Владимир, подскажите пожалуйста, где это видно в Arduino IDE, не нашёл.
С уважением, Андрей
Азбука Ардуино
Andrey.I, Под глобальные переменные изначально зарезервировано 9 байт, в одной байте 8 бит итого 72 бита.
Даже если у Вас вовсе нет переменных все равно минимальная область памяти 9 байт, резервируется под переменные и ваша цель при написании скетча не выйти за этот объём по возможности.
Переменная int может занимает 16 бит, поэтому если вы напишите скетч с 20 переменных int то 20 х 16 = 320 бит или 40 байт.
В дальнейшем когда у нас в скетче будет много переменных мы это увидим.
А минимальный объем памяти зарезервирован под 9 переменных типа byte (8bit), поэтому если у вас в скетче меньше переменных все равно будет занято 9 байт.
Даже если у Вас вовсе нет переменных все равно минимальная область памяти 9 байт, резервируется под переменные и ваша цель при написании скетча не выйти за этот объём по возможности.
Переменная int может занимает 16 бит, поэтому если вы напишите скетч с 20 переменных int то 20 х 16 = 320 бит или 40 байт.
В дальнейшем когда у нас в скетче будет много переменных мы это увидим.
А минимальный объем памяти зарезервирован под 9 переменных типа byte (8bit), поэтому если у вас в скетче меньше переменных все равно будет занято 9 байт.
С уважением Владимир.
Азбука Ардуино
При разработке скетчей нам необходимо знать как то или иное действие выполняет Arduino.
Наиболее простой способ общение с Arduino при помощи монитора последовательного порта или Serial Monitor.
Открыть окно Serial Monitor, можно щелкнув по кнопке с лупой в верхнем правом углу окна.
Serial Monitor является каналом связи – между (Вами) компьютером и Arduino.
В этом окне вы можете «отправлять сообщения» Arduino и «получать сообщения» от Arduino.
Для начала Вам нужно настроить скорость обмена информации 9600 бод в окне Serial Monitor как указанно на картинке
Для настойки скорости передачи информации (тактовой частоты) в Arduino есть функция Serial.begin( );
Для вывода информации с Arduino окно Serial Monitor существует функция Serial.println ( );
Напишите простейший скетч для вывода информации 12345 в окно Serial Monitor
void setup()
{
Serial.begin(9600); // Настройка скорости порта
Serial.println(12345); // Вывод в окно Serial Monitor значение 12345
}
void loop()
{
}
И откройте окно Serial Monitor
У Вас должно получится так
А теперь попробуйте вывести в окно Serial Monitor такую информацию
Рассматривайте уроки по Arduino как квест с загадками который нужно пройти.
Не бойтесь эксперементировать с различными вариантами написания сектча.
Наиболее простой способ общение с Arduino при помощи монитора последовательного порта или Serial Monitor.
Открыть окно Serial Monitor, можно щелкнув по кнопке с лупой в верхнем правом углу окна.
Serial Monitor является каналом связи – между (Вами) компьютером и Arduino.
В этом окне вы можете «отправлять сообщения» Arduino и «получать сообщения» от Arduino.
Для начала Вам нужно настроить скорость обмена информации 9600 бод в окне Serial Monitor как указанно на картинке
Для настойки скорости передачи информации (тактовой частоты) в Arduino есть функция Serial.begin( );
Для вывода информации с Arduino окно Serial Monitor существует функция Serial.println ( );
Напишите простейший скетч для вывода информации 12345 в окно Serial Monitor
void setup()
{
Serial.begin(9600); // Настройка скорости порта
Serial.println(12345); // Вывод в окно Serial Monitor значение 12345
}
void loop()
{
}
И откройте окно Serial Monitor
У Вас должно получится так
А теперь попробуйте вывести в окно Serial Monitor такую информацию
Рассматривайте уроки по Arduino как квест с загадками который нужно пройти.
Не бойтесь эксперементировать с различными вариантами написания сектча.
С уважением Владимир.
Азбука Ардуино
Давайте посмотрим как с помощью Arduino можно в окно Serial Monitor выводить значение вычислений
void setup()
{
Serial.begin(9600); // Настройка скорости порта
int a = 256, b = 127, c = 34, d = 62, e = 29;// Присвоение значения переменным новая форма записи
int f = a/2 + b*2 + c - d * e;
Serial.println(f); // Вывод в окно Serial Monitor значения вычисления
}
void loop()
{}
А теперь попробуйте найти ошибку в следующем скетче и исправить ее, чтобы получить правильный ответ
void setup()
{
Serial.begin(9600); // Настройка скорости порта
byte a = 256, b = 127, c = 14, d = 32, e = 26;// Присвоение значения переменным новая форма записи
int f = a + b + c + d + e;
Serial.println(f); // Вывод в окно Serial Monitor значения вычисления
}
void loop()
{}
void setup()
{
Serial.begin(9600); // Настройка скорости порта
int a = 256, b = 127, c = 34, d = 62, e = 29;// Присвоение значения переменным новая форма записи
int f = a/2 + b*2 + c - d * e;
Serial.println(f); // Вывод в окно Serial Monitor значения вычисления
}
void loop()
{}
А теперь попробуйте найти ошибку в следующем скетче и исправить ее, чтобы получить правильный ответ
void setup()
{
Serial.begin(9600); // Настройка скорости порта
byte a = 256, b = 127, c = 14, d = 32, e = 26;// Присвоение значения переменным новая форма записи
int f = a + b + c + d + e;
Serial.println(f); // Вывод в окно Serial Monitor значения вычисления
}
void loop()
{}
С уважением Владимир.
Азбука Ардуино
я отстал, с переменными и периодом не разобрался, нет времени, двоешник, однако, .
Василий Васильевич. Моя галерея.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.
- MOT
- Сообщения: 2278
- Зарегистрирован: Сб дек 16, 2017 7:58 pm
- Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир
Азбука Ардуино
То, что сразу на глаза попало, ответ спрячу
С уважением, Виктор Евгеньевич
Accept Corp.
Accept Corp.