|
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
|
|
Реальные адреса из МК05.05.2022, 11:00. Показов 9548. Ответов 99
Метки нет (Все метки)
Как найти реальные адреса под которыми всё находится в МК?
Ассемблер я не понимаю. Две программы (STM32 ST-LINK Utility и STM32CubeProgrammer) показывают один и тот же результат. Не похоже на то чтоб это была только интерпретация отдельной программы. Может это реальные адреса и расположение внутри МК?
0
|
|
| 05.05.2022, 11:00 | |
|
Ответы с готовыми решениями:
99
Показывать реальные IP адреса пользователей Можно ли отдавать реальные IP адреса при проксировании в Apache? Реальные/ виртуальные |
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
||||||
| 07.05.2022, 15:27 | ||||||
|
А про оффтоп у вас спросить надо, вы же его разводите, не я. Но вы не ответили на вопрос: зачем вы одно и то же повторили столько раз?
0
|
||||||
|
|
|||||||||
| 07.05.2022, 16:38 | |||||||||
![]() Реальные адреса из МКА вообще это вы прикопались к фразе "начало стека". Реальные адреса из МК Видимо тупо потролить захотелось.
0
|
|||||||||
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
|||||||
| 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
|
|
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
||||||||
| 07.05.2022, 20:11 | ||||||||
|
Стек расположен обычно в конце оперативной памяти и растет в сторону начала. Текущий указатель вершины стека хранится в регистре SP. При старте он инициализируется значением из флеша, лежащим по адресу по адресу 0x0800`0000. Собственно, на этом участие флеша в работе стека и заканчивается.
0
|
||||||||
|
87 / 86 / 4
Регистрация: 20.11.2016
Сообщений: 270
|
|
| 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
|
||||
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
||||||||||||||||||||
| 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
|
||||||
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
||||||||||
| 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 сущности Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|