Оперативка
- Войдите на сайт для отправки комментариев
Ср, 27/02/2019 - 08:49
Собственно вопрос по "практической" опасной близости кучи к стеку, где критическая граница? Понятно, что компилятор будет предупреждать заранее, ещё за долго об этой опасности. Может кто сталкивался на практике с глюками по теме?
Скетч использует 16776 байт (54%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 1541 байт (75%) динамической памяти, оставляя 507 байт для локальных переменных. Максимум: 2048 байт. Недостаточно памяти, программа может работать нестабильно.
Граница в сферическом скетче?
vlad072, вам что поговорить не о чем?
Да, вопрос задал сумбурно.. Правильней так: от чего в AVR в основном зависит размер стека, и в каких пределах он обычно разрастается на практике?
Понятно, что компилятор будет предупреждать заранее, ещё за долго об этой опасности.
И не подумает. Вот даже в мыслях у него не будет.
Да, вопрос задал сумбурно.. Правильней так: от чего в AVR в основном зависит размер стека, и в каких пределах он обычно разрастается на практике?
Он не "разрастается". Он занимает ровно столько места, сколько требуют ваши временные и локальные переменные.
И еще отвечу не на ваш вопрос - однако по делу :)
Вот у вас кода всего 16К - а оперативки занято уже 1500 байт - и ЭТО НЕНОРМАЛЬНО. Ищите, куда вы дели такую прорву RAM.
Не обижайтесь, но скорее всего - вы банально не умеете писать эффективный код и не владеете приемами экономии памяти. Для кода, занимающего 16к во флеше - в среде Ардуино средний расход RAM обычно не превышает 300-500 байт
ну так ты не берешь в ращёт, наерна, такие прожорливые биб-ки, как SD, OLED и т.д. мало ли что память жрать умеет как не в себя...
ну так ты не берешь в ращёт, наерна, такие прожорливые биб-ки, как SD, OLED и т.д. мало ли что память жрать умеет как не в себя...
беру. Использование библиотеки ОЛЕД с буфером в 1К - это тоже признак неумения экономить память :)
Не обижайтесь, но скорее всего - вы банально не умеете писать эффективный код и не владеете приемами экономии памяти. Для кода, занимающего 16к во флеше - в среде Ардуино средний расход RAM обычно не превышает 300-500 байт
и как после этого дальше жить )))
Для кода, занимающего 16к во флеше - в среде Ардуино средний расход RAM обычно не превышает 300-500 байт
Много строковых переменных для работы с модемом и iot. Из библиотек использую только SoftwareSerial и 1wire.
так хотелось бы узнать, что больше всего использует стек? Переменные функций в нём размещаются? И главный вопрос, стоит ли вообще париться при 25% свободной оперативки или это излишняя осторожность компилятора?
и как после этого дальше жить )))
Конструктив так и прёт, трололо
так хотелось бы узнать, что больше всего использует стек? Переменные функций в нём размещаются? И главный вопрос, стоит ли вообще париться при 25% свободной оперативки или это излишняя осторожность компилятора?
Да, кто ж Вас знает, что там за скетч у Вас и что (а, главное, как) он использует?
Ну, попробуйте запустить с постоянным мониторингом памяти, увидите как оно меняется в процессе работы.
Вот в этой теме показано как следить за памятью в процессе выполнения программы.
Много строковых переменных для работы с модемом и iot.
ну вот именно это я и предполагал - не умеете работать с памятью. Строки во флеш класть не пробовали?
Повторяю, вы не о том думаете. Судя по многим признакам. память у вас кончилась потому. что код кривой. Так что правильный вопрос от вас должен звучать так: "Как мне уменьшить расход памяти в программе?" - а не "Где граница стека?" - на этот вопрос точно вам никто не ответит.
у стека нет границы, у него есть только верхушка. А она постоянна плавает.
у стека нет границы, у него есть только верхушка. А она постоянна плавает.
а 0x0000 ? надеюсь здесь он тоже вниз растёт?
Строки во флеш класть не пробовали?
Может я чего то не понимаю, но во флеш мы можем положить максимум константы, а мне не хватает памяти под переменные.
http://microsin.net/programming/avr/avrstudio-gcc-progmem.html
Понятно, что компилятор будет предупреждать заранее, ещё за долго об этой опасности.
И не подумает. Вот даже в мыслях у него не будет.
Если бы ни разу не приходилось менеджер памяти допиливать, то можно бы уточнить откуда такие сведения о компиляторе, а так просто поржать.
Строки во флеш класть не пробовали?
Может я чего то не понимаю, но во флеш мы можем положить максимум константы, а мне не хватает памяти под переменные.
может я тоже не понял гениального замысла кода - но в первом отрывке все дикое количество строк - это именно константы. а не переменные. Во втором коде строк, вроде нет - а в третьем строки даже описаны как const
Код весьма кудряво написан. Сами с нуля писали или правите то, что нашли в инете?
свой код и прямо таки с паролями выложили )))
vlad072 , примеров и добрых советов вы как я понял слушать не желаете как я понял,
было же вам уже с progmem пример - чем не нравится то?
http://arduino.ru/forum/programmirovanie/snova-mqtt-1?page=1#comment-428950
sadman41 Спасибо, теперь многое становится понятно.
"Несмотря на указание const при декларации констант, компилятор все равно для их хранения использует ОЗУ (при старте программы они просто копируются из flash в RAM). "
примеров и добрых советов вы как я понял слушать не желаете
"Нет ничего более раздражающего, чем хороший пример" (Марк Твен).
а 0x0000 ? надеюсь здесь он тоже вниз растёт?
Вниз по кругу.)