Азбука Ардуино

Модератор: Gnat

Аватара пользователя
Andrey.I
Сообщения: 1734
Зарегистрирован: Вт июл 02, 2013 1:21 pm
Откуда: Москва
Контактная информация:

Азбука Ардуино

Сообщение Andrey.I » Ср янв 29, 2020 8:02 am

Вместо дефайна записал цифры, то что делает дефайн автоматически. Переменные всё равно нашлись. :(
Изображение
С уважением, Андрей

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Ср янв 29, 2020 9:34 am

Andrey.I, Добрый день Андрей, у Вас в скетче ошибка int Period = 100; это переменная так как ее значение изменяется в процессе выполнения скетча.
С уважением Владимир.

Аватара пользователя
MOT
Сообщения: 2278
Зарегистрирован: Сб дек 16, 2017 7:58 pm
Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир

Азбука Ардуино

Сообщение MOT » Ср янв 29, 2020 10:10 am

Andrey.I писал(а):
Ср янв 29, 2020 8:02 am
Переменные всё равно нашлись.
Андрей, что Вы имеете ввиду?
P.S.: #define - по сути это констатнта, которая объявляется в начале программы. Замечательный оператор. :) Целесообразно использовать, когда много констант в коде, и чтобы не запоминать "циферки" мы их объявляет словами со значением, становится интуитивно понятнее всё сразу.
Последний раз редактировалось MOT Ср янв 29, 2020 10:18 am, всего редактировалось 1 раз.
С уважением, Виктор Евгеньевич
Accept Corp.

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Ср янв 29, 2020 10:14 am

Давайте рассмотрим в продолжении вопроса оптимизации кода следующие скетчи

Первый абсолютно пустой

Изображение

Второй с переменными

Изображение

Третий с #define Red_led 13


Изображение

Как правильно заметил Андрей во всех случаях под глобальные переменные выделяется 9 байт (на разных ардуино выделяемый объём памяти может варьировать) это тот минимум который выделяется под переменные и нужно стараться писать скетч так чтобы по возможности не вылазить за этот минимум.

Обратите внимание объём памяти выделен в байтах а объём переменных в битах!!!
С уважением Владимир.

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Ср янв 29, 2020 10:30 am

MOT, Виктор Евгеньевич про константы мы поговорим позже а #define это оператор подмены значений, когда мы будем разбирать константы я постараюсь более детально объяснить в чем разница. Я стараюсь изначально использовать правильные термины чтобы в дальнейшем не было путаницы.
С уважением Владимир.

Аватара пользователя
MOT
Сообщения: 2278
Зарегистрирован: Сб дек 16, 2017 7:58 pm
Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир

Азбука Ардуино

Сообщение MOT » Ср янв 29, 2020 11:08 am

SmartAvit, Владимир, не в коем случае не хотел вмешиваться в процесс изложения Вами учебной информации. Я не стал лезть по перёд батьки в пекло и просто выразил свою мысль, чтобы было понятнее другим. Про оператор #define я в курсе. :) Простите, коль что не так!
С уважением, Виктор Евгеньевич
Accept Corp.

Аватара пользователя
Andrey.I
Сообщения: 1734
Зарегистрирован: Вт июл 02, 2013 1:21 pm
Откуда: Москва
Контактная информация:

Азбука Ардуино

Сообщение Andrey.I » Чт янв 30, 2020 9:07 am

MOT писал(а):
Ср янв 29, 2020 10:10 am
Андрей, что Вы имеете ввиду?
Вот эту запись внизу окна Arduino IDE: "Глобальные переменные используют 9 байт (0%) динамической памяти" она не изменилась, т.е. я никак не мог увидеть, что заменив переменные дифайном мы оптимизировали код.
SmartAvit писал(а):
Ср янв 29, 2020 10:14 am
Обратите внимание объём памяти выделен в байтах а объём переменных в битах!!!
Владимир, подскажите пожалуйста, где это видно в Arduino IDE, не нашёл.
С уважением, Андрей

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Пт янв 31, 2020 9:27 am

Andrey.I, Под глобальные переменные изначально зарезервировано 9 байт, в одной байте 8 бит итого 72 бита.

Даже если у Вас вовсе нет переменных все равно минимальная область памяти 9 байт, резервируется под переменные и ваша цель при написании скетча не выйти за этот объём по возможности.

Переменная int может занимает 16 бит, поэтому если вы напишите скетч с 20 переменных int то 20 х 16 = 320 бит или 40 байт.
В дальнейшем когда у нас в скетче будет много переменных мы это увидим.

А минимальный объем памяти зарезервирован под 9 переменных типа byte (8bit), поэтому если у вас в скетче меньше переменных все равно будет занято 9 байт.
С уважением Владимир.

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Пт янв 31, 2020 11:27 pm

При разработке скетчей нам необходимо знать как то или иное действие выполняет 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 как квест с загадками который нужно пройти.

Не бойтесь эксперементировать с различными вариантами написания сектча.
С уважением Владимир.

Аватара пользователя
Andrey.I
Сообщения: 1734
Зарегистрирован: Вт июл 02, 2013 1:21 pm
Откуда: Москва
Контактная информация:

Азбука Ардуино

Сообщение Andrey.I » Сб фев 01, 2020 1:12 am

Изображение

Я просто почему то знал как сделать. 8)
Теперь и посчитать можно. :)

Изображение
С уважением, Андрей

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Сб фев 01, 2020 9:07 am

Andrey.I, Отлично :good:
С уважением Владимир.

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Пн фев 03, 2020 1:18 am

Давайте посмотрим как с помощью 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()
{}


Изображение
С уважением Владимир.

Аватара пользователя
BazilVV
Сообщения: 639
Зарегистрирован: Пт сен 15, 2017 11:34 am

Азбука Ардуино

Сообщение BazilVV » Пн фев 03, 2020 1:31 am

SmartAvit писал(а):
Пн фев 03, 2020 1:18 am
А теперь попробуйте найти ошибку в следующем скетче и исправить ее, чтобы получить правильный ответ
:( я отстал, с переменными и периодом не разобрался, нет времени, двоешник, однако, :%) .
Василий Васильевич. Моя галерея.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Пн фев 03, 2020 1:54 am

BazilVV,По переменным я делал развернутый урок с коробочками )
С уважением Владимир.

Аватара пользователя
MOT
Сообщения: 2278
Зарегистрирован: Сб дек 16, 2017 7:58 pm
Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир

Азбука Ардуино

Сообщение MOT » Пн фев 03, 2020 9:08 am

SmartAvit писал(а):
Пн фев 03, 2020 1:18 am
А теперь попробуйте найти ошибку в следующем скетче и исправить ее, чтобы получить правильный ответ
...
То, что сразу на глаза попало, ответ спрячу :)
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()
{}
С уважением, Виктор Евгеньевич
Accept Corp.

Ответить

Вернуться в «Усилители»