Например TDA7294

Форум РадиоКот • Просмотр темы - ОЗУ в STM32
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб апр 27, 2024 21:38:39

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 25 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: ОЗУ в STM32
СообщениеДобавлено: Пт фев 10, 2023 15:35:30 
Прорезались зубы

Зарегистрирован: Чт апр 08, 2021 09:46:48
Сообщений: 204
Рейтинг сообщения: 0
Всех приветствую! Простите если я не сюда написал. Я сейчас изучаю что такое стек и куча, для чего она нужна и с чем ее едят. После долгих прогулок по просторам интернета вроде бы изучил, но у меня по итогу не складывается картина в целом, так как на некотрых источниках противоречит помему преставлению о стеке и куче. Я хотел ручками поработать с оперативной памятью на STMF401, посомтреть как локальные переменные записываются в стек и как глобальные записываются в кучу, но ничег не получилось, непотно куда что должно записывать и там уже половину оперативки у меня заполнено (так как тестил на написанно программе). Подскажите мне пожалуйста правильное ли у меня представление о стеке и куче?

Оперативная память состоит из двух областей — стек и кучи. В стек записываются локальные переменные, аргументы и все, что связано с функцией, а все остальное (например глобальные переменные) записывается в кучу. Весь остальной код программы хранится в Flash памяти, правильно ли я понимаю?

И как можно на практике поработать со оперативной памятью STM для закрепления знаний?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Пт фев 10, 2023 18:32:42 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
правильно ли я понимаю?
Нет.

Добавлено after 5 minutes 16 seconds:
И как можно на практике поработать со оперативной памятью STM для закрепления знаний?
Смотреть map-файлы и листинги, в режиме отладки смотреть где в памяти что расположено. Только перед этим теорию подтянуть.

Добавлено after 1 hour 2 minutes 6 seconds:
Предлагаю сначала разобраться с аппаратным уровнем: блоки/регионы RAM, процессор с регистрами общего назначения (РОН), работой стека.

Затем на аппаратный уровень наложить сущности языков высокого уровня: глобальные, локальные, статические и динамические переменные, а также разного рода константы. Подумать и посмотреть где на аппаратном уровне они могут размещаться.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Пт фев 10, 2023 19:20:03 
Прорезались зубы

Зарегистрирован: Чт апр 08, 2021 09:46:48
Сообщений: 204
Рейтинг сообщения: 0
Спасибо за наставленный путь, приступлю дальше изучать)


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Пт фев 10, 2023 20:06:02 
Вымогатель припоя

Зарегистрирован: Ср дек 19, 2012 12:16:22
Сообщений: 561
Рейтинг сообщения: 0
Вообщем ситуация обстоит примерно так:
Память делится на три области - куча (heap), стек, и память данных (статическая область).

В куче место выделяется функцией malloc. И только. Если ты не используешь выделение памяти руками, то можешь в компиляторе запретить кучу. Но надо быть точно уверенным что никто из вызываемых тобой библиотечных функций тоже не использует кучу.
Если ты попробуешь выделить памяти больше чем есть, то malloc вернет NULL. Нужно обязательно проверять возвращаемое значение.

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

И область данных, где хранится все остальное. Глобальные переменные и переменные которые обозваны static.

В самой памяти стек, как правило, располагается после кучи. А место в стеке выделяется от большего адреса к меньшему, то есть стек заполняется задом наперед и при переполнении он лезет к кучу. Впринципе если он чуток залез, в куче эта область не используемая, то ничего и не произойдет, а если память занята, то будет так называемое переполнение стека. Причем не все МК умеют отслеживать данную ситуацию.

Ну как то так.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Пт фев 10, 2023 20:21:54 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 3
alex1126, каждое второе утверждение у вас ложное. Не надо с такими познаниями учить.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Пт фев 10, 2023 20:54:27 
Вымогатель припоя

Зарегистрирован: Ср дек 19, 2012 12:16:22
Сообщений: 561
Рейтинг сообщения: 0
ну подправьте


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Пт фев 10, 2023 21:00:13 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
Спасибо за одолжение, но не хочу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Пт фев 10, 2023 23:45:44 
Друг Кота
Аватар пользователя

Карма: 13
Рейтинг сообщений: 359
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Сообщений: 4323
Откуда: Воронеж
Рейтинг сообщения: 0
alex1126, ну типа если ОС отсутствует, то почти наверняка выделение памяти статическое. Malloc совсем низачем не нужен

_________________
"Привет!" - соврал он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Сб фев 11, 2023 00:08:30 
Вымогатель припоя

Зарегистрирован: Ср дек 19, 2012 12:16:22
Сообщений: 561
Рейтинг сообщения: 0
Вам может и не нужен, но в компилятор место наверняка выделяет, если вы ничего не меняли в параметрах. На чем пишите? В KEil-е в файлах проекта, в модулях инициализации, задается распределение памяти, сколько под кучу отводить, сколько под стек. Кстати поэтому совет предыдущего автора бессмысленен - что толку смотреть отладчиком адрес размещения переменных, когда это может быть и стек и куча и статитическая память, в зависимости от настроек проект.

ПС ЗЫ Кстати, данная архитектура, если ее можно так назвать, справедлива и для виндовсов всяких, с небольшими поправками на наличие процессов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Сб фев 11, 2023 00:18:28 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн апр 02, 2012 15:56:23
Сообщений: 138
Рейтинг сообщения: 0
alex1126, при всем уважении, согласен с VladislavS. Вопрос был конкретно про STM32, и рассказывать про кучу и Xalloc/new как минимум вредно (кто там есть аллокатор?).

Настройки проекта в конечном итоге (иначе и быть не может) - это настройки компилятора и компоновщика, так что очень даже полезно посмотреть на флаги и правила, ну и отладчиком убедиться, что никакой магии нет и сборка действует детерминированно, ровно в соответствии с документацией.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Сб фев 11, 2023 00:32:44 
Вымогатель припоя

Зарегистрирован: Ср дек 19, 2012 12:16:22
Сообщений: 561
Рейтинг сообщения: 0
А чем выделение памяти в куче на stm32 отличается от .... от чего? Что именно то я не так сказал? malloc.... а с ним что не так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Сб фев 11, 2023 00:35:46 
Друг Кота
Аватар пользователя

Карма: 13
Рейтинг сообщений: 359
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Сообщений: 4323
Откуда: Воронеж
Рейтинг сообщения: 0
Malloc выделяет память уже в процессе работы, в рантайме, если угодно. В микроконтроллерах такой подход применяется далекоооо не всегда. Чаще память выделяется статически, на этапе сборки проекта.

_________________
"Привет!" - соврал он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Сб фев 11, 2023 07:42:18 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 3
Что именно то я не так сказал? malloc....
Конкретно про malloc вы сказали
В куче место выделяется функцией malloc. И только.
Даже если не выходить за пределы С, то это и calloc, и realloc. А так как ТС ничего про языки не говорил, то в других найдём ещё кучу способов выделения памяти из кучи.

Также, категоричное
Память делится на три области - куча (heap), стек, и память данных (статическая область).
не соответствует действительности. Только типов памяти в контроллере больше, а уж областей и подавно.

Кстати поэтому совет предыдущего автора бессмысленен - что толку смотреть отладчиком адрес размещения переменных, когда это может быть и стек и куча и статитическая память, в зависимости от настроек проект.
Во-первых, как настройками проекта можно отправить статическую переменную в кучу, динамическую на стек и т.д.? Во-вторых, в отладчике разве не видно где расположена переменная? Вы им хоть раз пользовались? В-третьих, в отладчике запросто можно увидеть, что локальные переменные хранятся не только в стеке, а в РОН, например. Точно так же как через РОН параметры передаются в функцию и возвращается её результат.

Ну и дальше по тексту... Вы бы не были столь категоричны, если бы почаще заглядывали в map, листинги и отладчик.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Сб фев 11, 2023 09:43:08 
Прорезались зубы

Зарегистрирован: Чт апр 08, 2021 09:46:48
Сообщений: 204
Рейтинг сообщения: 0
Доброго дня! для ясности - я работаю в keil на языке си


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Вс фев 12, 2023 22:32:05 
Вымогатель припоя

Зарегистрирован: Ср дек 19, 2012 12:16:22
Сообщений: 561
Рейтинг сообщения: 0
Даже если не выходить за пределы С, то это и calloc, и realloc.

и они для выделения памяти используют именно malloc. И я писал дальше, что могут быть библиотечные функции, которые используют malloc

Цитата:
Только типов памяти в контроллере больше, а уж областей и подавно.

ну можно и до физического уровня договорится. Для начала данной информации достаточно. Да и вообще для 99% случаев данных знаний достаточно. Многие и этого то не знают.

Цитата:
Во-первых, как настройками проекта можно отправить статическую переменную в кучу, динамическую на стек и т.д.?

ну посмотрите вы в отладчике адрес переменной 0x20000A5. Где она расположена? В стеке? В куче? Локальная? Глобальная?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Вс фев 12, 2023 22:47:39 
Прорезались зубы

Зарегистрирован: Чт апр 08, 2021 09:46:48
Сообщений: 204
Рейтинг сообщения: 0
maksimdag0 писал(а):
ну посмотрите вы в отладчике адрес переменной 0x20000A5. Где она расположена? В стеке? В куче? Локальная? Глобальная?


А как посмотреть в отдадчике куда переменная записывается в стек или кучу?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Вс фев 12, 2023 23:01:06 
Вымогатель припоя

Зарегистрирован: Ср дек 19, 2012 12:16:22
Сообщений: 561
Рейтинг сообщения: 0
maksimdag0 писал(а):
ну посмотрите вы в отладчике адрес переменной 0x20000A5. Где она расположена? В стеке? В куче? Локальная? Глобальная?


А как посмотреть в отдадчике куда переменная записывается в стек или кучу?

в этом то весь и вопрос :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Пн фев 13, 2023 03:23:52 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 3
и они для выделения памяти используют именно malloc.
Это ваши фантазии. На самом деле это независимые и равноправные функции стандартной библиотеки. Как их реализовать - дело авторов библиотеки.

ну можно и до физического уровня договорится.
Не можно, а нужно с него начинать в эмбедде.
Для начала данной информации достаточно. Да и вообще для 99% случаев данных знаний достаточно.
Это вы так решили? Я вот считаю, что знание о возможности размещения переменных в РОН необходимо в 100% случаев.
Многие и этого то не знают.
Но они и не кидаются учить.
ну посмотрите вы в отладчике адрес переменной 0x20000A5. Где она расположена? В стеке? В куче? Локальная? Глобальная?
Какой ужас...

Добавлено after 6 minutes 28 seconds:
А как посмотреть в отдадчике куда переменная записывается в стек или кучу?
Переменная не может никуда записываться. Переменная где-то располагается. Записывается (присваивается) значение переменной. А где переменная располагается в отладчике видно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Пн фев 13, 2023 12:58:18 
Вымогатель припоя

Зарегистрирован: Ср дек 19, 2012 12:16:22
Сообщений: 561
Рейтинг сообщения: 0
и они для выделения памяти используют именно malloc.
Это ваши фантазии. На самом деле это независимые и равноправные функции стандартной библиотеки. Как их реализовать - дело авторов библиотеки.

Не затруднит вас показать какую нить стандартную библиотеку где это независимые и равноправные функции? Просто в Keil, например, это именно так
Вложение:
91B17D4D-EFB2-4DC1-A25F-2E16EA696F31.jpeg [32.85 KiB]
Скачиваний: 48


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ОЗУ в STM32
СообщениеДобавлено: Пн фев 13, 2023 15:30:18 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
В IAR realloc без вызова malloc умеет обходиться.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: veso74 и гости: 28


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y