Самый простой способ подсчитать, сколько глобальных переменных содержится в коде скетча?
У меня есть довольно сложный скетч с примерно 1 тыс. строками кода. Я также должен сказать, что я не программист по профессии...
Когда я просматриваю свой код и пытаюсь сделать его более эффективным, было бы полезно знать, сколько глобальных переменных содержится в моем коде и необходимы ли все они как глобальные. Итак:
1 - Есть ли простой способ подсчитать, сколько глобальных переменных вы использовали (опять же, представьте себе сложный код, написанный некодером), и
2 - Есть ли простой способ в среде IDE Arduino перейти к нему?
@frednikgohar, 👍-1
Обсуждение1 ответ
1 - Количество переменных не важно, но важно количество используемой памяти (в байтах). Это показано в нижней части среды разработки Arduino компилятором при проверке или загрузке скетча.
2 - Невозможно перейти, например, к самой большой глобальной переменной. Вы можете использовать функцию поиска для поиска чего-либо.
Для небольшого микроконтроллера, например Attiny или Atmega8, каждый байт, использующий память, может быть важен.
Для Arduino Uno и большего размера оптимизация выполняется более глобально.
Чтобы оптимизировать использование оперативной памяти, поищите самых голодных пожирателей памяти:
- Для Arduino Uno и других микроконтроллеров avr текст с Serial.println можно вставить в программу с помощью макроса F ().
- Многим строковым объектам может потребоваться много памяти кучи.
- Массивы могут стать большими быстро.
- Массивы больших элементов (float, struct) могут увеличиваться еще быстрее.
- Библиотека SD использует много оперативной памяти. Существует небольшая версия библиотеки SD.
- Некоторые графические библиотеки для дисплеев используют много памяти.
Старайтесь избегать сохранения одного байта, если вы не проверите использование результирующей памяти. Компилятор может оптимизировать код таким образом, чтобы он конфликтовал с кем-то, кто пытается сохранить байт.
- Когда целое число преобразуется в байт, возможно, все вычисления по-прежнему выполняются с целыми числами, и компилятору требуется больше памяти для преобразования из байта в целое число и обратно.
- Возможно, это целое число использовалось только в регистрах и не использовало место в памяти.
- Целое число "const", вероятно, вообще не использует оперативную память.
Последний совет: Не бойтесь переходить на другую плату Arduino с большим объемом памяти. Если ваш проект использует почти всю память, то добавить что-то в ваш проект невозможно. Когда проект будет запущен в течение некоторого времени, вы можете захотеть добавить дополнительный датчик или дополнительную функциональность.
- Я хочу создать 10 уровней с помощью одной кнопки, но этот код показывает только уровень 1?
- Запуск фрагмента кода на основе функции
- Есть ли какой-нибудь способ загрузить скетч с ардуино?
- Как объявить массив переменного размера (глобально)
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как получить тип данных переменной?
- Асинхронные вызовы функций в скетче ардуино
- Преобразование long в массив символов и обратно
Вы можете показать нам код, и мы расскажем вам, как сделать его более эффективным., @Jot
@Jot - тысяча строк?, @Jaromanda X
@JaromandaX, конечно, обычный скетч для arduino Uno может быть 3000 строк, 1000 строк-это не большой скетч., @Jot
Если вы скомпилируете свой код (кнопка"проверить"), вы можете увидеть размер программы и объем памяти, используемой для глобальной переменной, в нижней части экрана., @Gerben
глобалы не так злы на микроконтроллерах, как на ПК; при правильном использовании они могут сэкономить драгоценную оперативную память., @dandavis
все справедливые комментарии - но ни один не отвечает на мой вопрос: есть ли в IDE (или любом другом инструменте) функция, которая выделяет/подсчитывает ваши глобальные значения?, @frednikgohar
Фредникгоар, ты должен пойти нам навстречу. Расскажите нам, что компилятор говорит о памяти, когда вы проверяете скетч. Он показывает количество байтов, используемых скетчей (байты и проценты), и количество байтов, используемых глобальными переменными (байты и проценты). Покажи нам свой скетч. Я не понимаю, чего ты хочешь. Если вы объявили глобальные переменные над функцией установки, то именно там они и находятся. Что именно вы хотите посчитать? переменные или байты? Компилятор показывает количество байтов при проверке скетча., @Jot