Можно ли хранить данные в программном пространстве вместо динамической памяти?
Я объявляю массив на верхнем уровне следующим образом:
constexpr байт a[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; // какие бы данные
Я ссылаюсь на массив таким образом, чтобы он не был оптимизирован сразу. При компиляции этой программы из Arduino IDE она сообщает мне, что использует 1474 байта пространства для хранения программ и 194 байта динамической памяти. Любопытно, что если мой массив вдвое больше (20 элементов), то используется еще 10 байт как программного хранилища, так и динамической памяти (1484 и 204 соответственно).
Могу ли я каким-то образом убедить компилятор хранить все это только в программном пространстве хранения? Какие-либо квалификаторы или параметры я должен использовать вместо этого? (и вообще, зачем ему занимать место в обоих пространствах памяти?!)
Я использую arduino uno.
@adrianton3, 👍1
Обсуждение0
- Глобальному массиву не присваивается то место которое он занимал бы в памяти
- Лучшая практика — объявлять «статичный» текст и экономить память
- Есть ли ограничения на размер массива в Arduino Mega 2560?
- Инициализировать и читайть из массива указателей PROGMEM на массивы PROGMEM.
- Отправка массива размером >255 байт на arduino
- Включает ли скомпилированный бинарный файл скетча неиспользуемые функции из библиотеки?
- Как заставить компилятор гарантировать, что выделение памяти для локальных переменных не приведет к переполнению оперативной памяти во время выполнения?
- Условное присвоение массива
Вы должны использовать PROGMEM или более новые AVR, такие как Atmega4809, с "плоской" моделью памяти (все различные типы памяти отображаются в одно и то же пространство памяти и доступны по одним и тем же указателям)., @KIIV
https://www.arduino.cc/reference/en/language/variables/utilities/progmem/, @Juraj
Это больше похоже на ответы, чем на комментарии, поэтому, если вы думаете, что это то же самое, опубликуйте это как таковое, чтобы я мог это принять; progmem не является бесшовным, но он выполняет свою работу, @adrianton3