Самый простой способ подсчитать, сколько глобальных переменных содержится в коде скетча?

У меня есть довольно сложный скетч с примерно 1 тыс. строками кода. Я также должен сказать, что я не программист по профессии...

Когда я просматриваю свой код и пытаюсь сделать его более эффективным, было бы полезно знать, сколько глобальных переменных содержится в моем коде и необходимы ли все они как глобальные. Итак:

1 - Есть ли простой способ подсчитать, сколько глобальных переменных вы использовали (опять же, представьте себе сложный код, написанный некодером), и

2 - Есть ли простой способ в среде IDE Arduino перейти к нему?

, 👍-1

Обсуждение

Вы можете показать нам код, и мы расскажем вам, как сделать его более эффективным., @Jot

@Jot - тысяча строк?, @Jaromanda X

@JaromandaX, конечно, обычный скетч для arduino Uno может быть 3000 строк, 1000 строк-это не большой скетч., @Jot

Если вы скомпилируете свой код (кнопка"проверить"), вы можете увидеть размер программы и объем памяти, используемой для глобальной переменной, в нижней части экрана., @Gerben

глобалы не так злы на микроконтроллерах, как на ПК; при правильном использовании они могут сэкономить драгоценную оперативную память., @dandavis

все справедливые комментарии - но ни один не отвечает на мой вопрос: есть ли в IDE (или любом другом инструменте) функция, которая выделяет/подсчитывает ваши глобальные значения?, @frednikgohar

Фредникгоар, ты должен пойти нам навстречу. Расскажите нам, что компилятор говорит о памяти, когда вы проверяете скетч. Он показывает количество байтов, используемых скетчей (байты и проценты), и количество байтов, используемых глобальными переменными (байты и проценты). Покажи нам свой скетч. Я не понимаю, чего ты хочешь. Если вы объявили глобальные переменные над функцией установки, то именно там они и находятся. Что именно вы хотите посчитать? переменные или байты? Компилятор показывает количество байтов при проверке скетча., @Jot


1 ответ


1

1 - Количество переменных не важно, но важно количество используемой памяти (в байтах). Это показано в нижней части среды разработки Arduino компилятором при проверке или загрузке скетча.

2 - Невозможно перейти, например, к самой большой глобальной переменной. Вы можете использовать функцию поиска для поиска чего-либо.

Для небольшого микроконтроллера, например Attiny или Atmega8, каждый байт, использующий память, может быть важен.

Для Arduino Uno и большего размера оптимизация выполняется более глобально.

Чтобы оптимизировать использование оперативной памяти, поищите самых голодных пожирателей памяти:

  • Для Arduino Uno и других микроконтроллеров avr текст с Serial.println можно вставить в программу с помощью макроса F ().
  • Многим строковым объектам может потребоваться много памяти кучи.
  • Массивы могут стать большими быстро.
  • Массивы больших элементов (float, struct) могут увеличиваться еще быстрее.
  • Библиотека SD использует много оперативной памяти. Существует небольшая версия библиотеки SD.
  • Некоторые графические библиотеки для дисплеев используют много памяти.

Старайтесь избегать сохранения одного байта, если вы не проверите использование результирующей памяти. Компилятор может оптимизировать код таким образом, чтобы он конфликтовал с кем-то, кто пытается сохранить байт.

  • Когда целое число преобразуется в байт, возможно, все вычисления по-прежнему выполняются с целыми числами, и компилятору требуется больше памяти для преобразования из байта в целое число и обратно.
  • Возможно, это целое число использовалось только в регистрах и не использовало место в памяти.
  • Целое число "const", вероятно, вообще не использует оперативную память.

Последний совет: Не бойтесь переходить на другую плату Arduino с большим объемом памяти. Если ваш проект использует почти всю память, то добавить что-то в ваш проект невозможно. Когда проект будет запущен в течение некоторого времени, вы можете захотеть добавить дополнительный датчик или дополнительную функциональность.

,