|
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
|
|
Реальные адреса из МК05.05.2022, 11:00. Показов 9645. Ответов 99
Метки нет (Все метки)
Как найти реальные адреса под которыми всё находится в МК?
Ассемблер я не понимаю. Две программы (STM32 ST-LINK Utility и STM32CubeProgrammer) показывают один и тот же результат. Не похоже на то чтоб это была только интерпретация отдельной программы. Может это реальные адреса и расположение внутри МК?
0
|
|
| 05.05.2022, 11:00 | |
|
Ответы с готовыми решениями:
99
Показывать реальные IP адреса пользователей Можно ли отдавать реальные IP адреса при проксировании в Apache? Реальные/ виртуальные |
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||||
| 07.05.2022, 15:27 | ||||||
|
А про оффтоп у вас спросить надо, вы же его разводите, не я. Но вы не ответили на вопрос: зачем вы одно и то же повторили столько раз?
0
|
||||||
|
|
|||||||||
| 07.05.2022, 16:38 | |||||||||
![]() Реальные адреса из МКА вообще это вы прикопались к фразе "начало стека". Реальные адреса из МК Видимо тупо потролить захотелось.
0
|
|||||||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
|||||||
| 07.05.2022, 16:51 | |||||||
|
Пока что мы выяснили, что вы совсем недавно узнали как может быть организован стек (интересно, то, что его можно в том числе на основе связного списка сделать, для вас тоже новость?); что совсем недавно узнали где у стека дно, а где вершина. Чем начальное значение указателя отличается от самого указателя вы, похоже, пока не узнали. Ознакомьтесь, откуда в переменные попадают их значения инициализации. Учитывая, что сразу после ресета в оперативке находится только мусор.
0
|
|||||||
|
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
|
|
| 07.05.2022, 17:10 [ТС] | |
|
Я вообще ничего не понял. Указатель на стек во флеше, да ещё и в первом адресе.
Стек в процессе работы программы перезаписывается кучу раз. Так жизни МК не хватит чтоб Стек во флеше держать. Не важно. Вроде бы это немного не по теме.
0
|
|
|
|
|||||||||||
| 07.05.2022, 17:46 | |||||||||||
![]() В данном случае это начальный адрес стека. Запомните это!![]() Я думаю все должны понимать что означает фраза "начало стека". Если хотите можете объяснить ТС что такое стек. ![]() Про таблицу векторов прерываний тоже не слышали?
0
|
|||||||||||
|
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
|
|
| 07.05.2022, 17:53 [ТС] | |
|
Что такое стек мне не надо объяснять, спс.
0
|
|
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||||||
| 07.05.2022, 20:11 | ||||||||
|
Стек расположен обычно в конце оперативной памяти и растет в сторону начала. Текущий указатель вершины стека хранится в регистре SP. При старте он инициализируется значением из флеша, лежащим по адресу по адресу 0x0800`0000. Собственно, на этом участие флеша в работе стека и заканчивается.
0
|
||||||||
|
87 / 86 / 4
Регистрация: 20.11.2016
Сообщений: 271
|
|
| 07.05.2022, 21:44 | |
|
Я правильно понимаю что если при инициализации в указатель стека заносится значение 0x2000'5000, то его величина составляет 20 КБ и по мере заполнения стека его указатель приближается к значению 0x2000'0000 ?
0
|
|
|
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
|
||
| 07.05.2022, 22:31 [ТС] | ||
|
В контексте МК про стек конечно недостаточно знаю, но этим я буду позже заниматься.
Мне кажется или я неправильно понял или это бессмысленно. По адресу 0x08000000 хранится указатель на вершину стека? Адрес вершины стека постоянно разный, так как в стек приходят новые данные, то они ложатся сверху. Получается этот адрес 0x08000000 во флеше зарезервирован под указатель на начало стека? Почему бы не защитить этот адрес 0x08000000 от записи раз он так важен? У меня это находится по адресу 0x08000000: 00 20 00 10 ED 0F 00 08 Получается это hex адрес на начало стека? 200010ED0F0008 Нигде не видел я предупреждений о том что нельзя записывать во флеш по адресу 0x08000000 Я думал что начиная с адреса 0x08000000 можно писать свой код Я видел где то статью об опасности когда стек становится слишком большим и затирает код. Тоже странная ситуация что нет рамок у стека.
0
|
||
|
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
|
|
| 07.05.2022, 22:37 [ТС] | |
|
0
|
|
|
|
||||||||||||
| 07.05.2022, 23:46 | ||||||||||||
|
Следующие 4 байта - адрес начала выполнения прошивки, т. е. стартовая функция. Какая модель МК?
1
|
||||||||||||
|
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
|
||
| 08.05.2022, 00:08 [ТС] | ||
|
Ок, вот 4 Байт: 200010ED
Это в 64 разрядной системе адрес хранится в 8 Байтах. С какого адреса во флеш можно писать, не опасаясь затереть что то нужное? Значит по адресу 0x08000000 в течении работы программы должно быть постоянно новое значение. Непонятно. Ок, разберусь.
0
|
||
|
|
||||
| 08.05.2022, 00:20 | ||||
|
Пишите в свободную область. Обычно для этого используется последняя страница. Смотрите сколько флеш-памяти в МК, какой размер страницы и вычисляйте ее начальный адрес.
1
|
||||
|
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
|
||||
| 08.05.2022, 00:44 [ТС] | ||||
|
А флеш это не ОЗУ. Флеш -это ПЗУ. В нём память хранится. В ОЗУ всё исчезает после завершения работы программы. Это ведь мне кажется такая системная информация о которой я ничего знать не должен, ибо зачем.
0
|
||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||||||||||||||||||
| 08.05.2022, 09:33 | ||||||||||||||||||||
|
Если что, PC - program counter, адрес текущей выполняемой инструкции. Само по себе значение инициализации обычно соответствует максимальному адресу оперативки. А в разных контроллерах количество памяти разное. Кстати, подобные извращения с SP, PC это далеко не единственный способ. Чаще SP инициализируется в коде вручную, в PC начинается с нуля.
Если же хотите защититься от говнокода, изучайте модуль MPU (memory protection unit), настраивайте разрешенные области памяти и обрабатывайте ошибки при выходе за их пределы. int SP = 0x20001000;. Вот SP это указатель, а 0x2000`1000 - только начальное значение. При работе программы меняться будет "переменная" (которая на самом деле регистр), а число 0x2000`1000 один раз использовали и тут же забыли, оно больше никому не нужно.Лучше скажите, что именно вы туда собираетесь писать. Например, контроллер стартовал, ему в SP аппаратно приехало значение 0x2000`5000 - это дно стека ядра. Потом ядро захотело запустить новый процесс, для него выделяется область памяти, например 0x2000`3000 - 0x2000`4000, в ней же располагается его стек (0x2000`4000). На эту же область накладываются ограничения доступа: по адресам от 0x2000`3000 до 0x2000`4000 данный процесс писать может, по любым другим - нет. Потом запускается еще один процесс, ему тоже выделяется свой кусок памяти 0x2000`2000 - 0x2000`3000, там тоже создается стек начиная от 0x2000`3000, выдаются права доступа и все такое. Вот у нас получилось три процесса и три стека. На самом деле выделять ах 4 кБ памяти на процесс это довольно много, обычно выделяют куда меньше. Зато так числа получились нагляднее. Под регистрами обычно понимают регистры общего назначения. То, с чем работают инструкции процессора. Все эти r1, r5, sp, pc и прочике. Плюс специализированные регистры ядра (не помню есть ли они в ARM). А то, что назвали регистрами вы это периферия. Она к ядру никакого отношения не имеет и может располагаться по большому счету где угодно - как пожелает производитель. Добавлено через 8 минут Да. Раз уж вы пытаетесь достаточно глубоко разобраться в устройстве контроллера, постарайтесь все же освоить ассемблер. Многие вещи там делаются гораздо нагляднее, чем в Си. А если у вас нет какой-то конкретной цели и вы именно что изучаете низкоуровневое программирование, я бы даже посоветовал не ARM'овый ассемблер, а какой-нибудь более человекообразный. Например, AVR. Или есть интересный материал по RISC-V (видеолекция, моя статья на Хабре, в которой я рассматриваю gd32vf103, почти клон stm32f103, только чуть побыстрее и на RISC-V ядре вместо ARM). Даже если сам по себе RISC-V не заинтересует, ознакомиться все равно полезно: принципы работы ведь по большому счету одни и те же что в AVR, что в ARM, что в x86, что в MIPS, что в RISC-V. Освоите один ассемблер, с другими будет просто.
1
|
||||||||||||||||||||
|
|
|||||||||
| 08.05.2022, 10:04 | |||||||||
![]() ![]() Вот чтобы не было путаницы, лучше писать "начальный адрес".
0
|
|||||||||
|
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
|
||||||
| 08.05.2022, 13:46 [ТС] | ||||||
|
Порядок я думаю правильный, little endian для этого адреса выглядит так: 10002000 Что определяет какого размера будет стек? В этом случае у меня 16 бит стек. Дo каких пор можно записывать свой код во флеш? Во флеш важными являются первые 8 Байт? Больше никаких сюрпризов там нет, которые затереть можно? Флеш начинается с адреса 0x08000000
0
|
||||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||||||||
| 08.05.2022, 14:14 | ||||||||||
|
Вы хотели привести цитату своих придирок, где вам не нравится использование мной термина "указатель". У вас есть адрес дна стека 0x2000`1000. Если его записать в little-endian, получится 00 10 00 20, во флешке контроллера он так и хранится (это я в прошлом посте показывал). Просто у вас то ли отладчик кривой, то ли еще что, но байты он здорово перемешал. 16 бит стек это слишком мало, в него ни одного значения не влезет. Лучше все же ответьте на вопрос: зачем вам сейчас что-то писать во флеш? Если для проверки адресов или еще какой отладки, то это самый неудачный способ: есть же UART, через который вы в реальном времени можете передавать любую отладочную информацию.
1
|
||||||||||
|
|
|||||||||||||||
| 08.05.2022, 15:01 | |||||||||||||||
![]() Что по вашему означают слова "начало" и "конец" или нужно объяснять как ребенку? ![]() ![]() Вам нужно переехать в другую страну где ложь выдают за правду, а черное у них - белое. Там много таких как вы! Разве не видите на скринах ТС что МК F405 с CCMRAM? То у вас адрес инициализации это вершина, то дно. Уж определитесь и не вводите ТС в заблуждение. Он и так погряз в заблуждениях относительно МК. Вы в очередной раз вводите ТС в залужение. Он расслабится и будет бумать что имеет право израсходовать всю оперативку и еще стек заполнит под завязку. Очередное заблуждение.![]() В STM32 ячейки стека 32-ух битные (4 байта).
1
|
|||||||||||||||
|
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
|
|||||||||
| 08.05.2022, 15:37 [ТС] | |||||||||
|
Как это можно сделать?
0
|
|||||||||
| 08.05.2022, 15:37 | |
|
Реальные скорости Wi-Fi Реальные надписи в маршрутках... Как заработать реальные деньги?
Реальные знаки и их HTML сущности Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|