|
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 30
|
|
Адресация памяти, помогите разобраться02.08.2013, 00:06. Показов 39685. Ответов 44
Метки нет (Все метки)
Имеется контроллер STM32F100RB. Исходя из рисунка видно, что у нас имеется 4Гб, к которым мы можем обратиться.
<Изображение удалено> Может быть это глупые вопросы, но: 1) В даташите указано Memories – 16 to 128 Kbytes of Ftosh memory – 4 to 8 Kbytes of SROM С какого по какой адрес каждая из этих памятей? 2) 1Gb внешних устройств. Как это используется, если у микросхемы нет 8*1024*1024*1024 ножек? Как вообще понимать 1Gb external divises? Помогите разобраться, знатоки) Перелопатил много, ответа не нашел.
0
|
|
| 02.08.2013, 00:06 | |
|
Ответы с готовыми решениями:
44
Адресация сегментов в памяти
|
|
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 30
|
||||||
| 04.08.2013, 19:50 | ||||||
|
Пришла плата, моргнул диодиком. Использую CoIDE. Смотрю в дебаггере, программа начинается с адреса 0х080002F0. Мне казалось, что программа должна идти сразу с 0x08000000. Я использую библиотеки GPIO, полагаю что там обозначены какие-нибудь константы, которые встают с самого начала, т.е с 0x08000000. Попытался создать пустой проект, где только main.c со следующим содержанием:
0
|
||||||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 04.08.2013, 19:57 | ||
Почитайте .map-файл, сгенерированный при компиляции проекта - увидите, по какому адресу что находится.
0
|
||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 04.08.2013, 20:00 | ||
{ int i=0; } Так вот среда на это мне пишет, что пустой файл .elf, прошивать не буду.Правильно пишет :-) Ещё, небось, и warning выкатывает про инициализированную-но-неиспользованную переменную. Проект не делает никаких действий, и оптимизация в настройках проекта, возможно, включена. Попробуйте добавить слово volatile перед "int i=0;" - тогда, может быть, проект станет непустым.
0
|
||
|
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 30
|
|||||||||||
| 04.08.2013, 20:16 | |||||||||||
|
Да, добави это волшебное слово, приказав компилятору не оптимизировать неиспользуемую переменную. Усложнил код:
Error: elf file missing sector info Файл .hex содержит: :0400000508000000EF :00000001FF (тут я не сильно понимаю, что это за формат такой, откуда двоеточия?) ST-Link Utility пишет недопустимый аргумент при попытке открыть этот файл с прошивкой. Вопрос - что ему не хватает? Что я делаю не так?
0
|
|||||||||||
|
hosh
|
||||||||||||
| 04.08.2013, 20:26 | ||||||||||||
А какой результат вернет такая функция?
|
||||||||||||
|
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 30
|
||||||
| 04.08.2013, 20:29 | ||||||
|
Точно, нужно вернуть что-то) Странно, что компилятор не ругнулся на это. Но даже при
0
|
||||||
|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
|
| 04.08.2013, 20:30 | |
|
buffoto, у Вас в проекте стартовый код есть?
Файл типа этого - stortup_stm32f4xx.c. Я привожу пример для F4, но родственный файл должен быть и для F1. Это раздел cmsis_boot/stortup. И пока Вы не получите размер кода отличный от нуля, шить и не пытайтесь.
0
|
|
|
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 30
|
||
| 04.08.2013, 20:45 | ||
0
|
||
|
hosh
|
|
| 04.08.2013, 20:50 | |
|
угу! я чего-то сразу не обратил внимания, пока stortup не добавишь , что не пиши код будет 0 !
|
|
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 04.08.2013, 23:11 | ||
|
Несколькими постами выше:
0
|
||
|
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 30
|
|
| 04.08.2013, 23:18 | |
|
Пардон, не заметил) Прочитал только последенее
0
|
|
|
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 30
|
|
| 04.08.2013, 23:51 | |
|
Будьте добры, подскажите, где лучше всего написано про стартап код? Вообще требования, что обязательно должно быть там. Смотрю я библиотеку и что-то не особо понимаю. В референс мануале не особо про это.
0
|
|
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 05.08.2013, 01:26 | ||
Или так: откройте любой готовый проект для Вашего МК (в Кокосе есть же примеры проектов?), найдите стартап-файл в составе этого проекта. Скопируйте то же самое в любой новый проект. В стартапе редко что меняют, чаще всего одна и та же копия мигрирует между многими проектами одного МК. P.S. Вы в Си начинающий? Просто к сведению: stort-up код - это не особенность программ для микроконтроллеров, он генерируется для любой программы на Си/Си++. Даже если на Borlomd C++ Builder написать или на Microsoft Visual C - при компиляции проекта сгенерируется и stort-up.
0
|
||
|
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 30
|
|||||||
| 05.08.2013, 02:12 | |||||||
Или так: откройте любой готовый проект для Вашего МК (в Кокосе есть же примеры проектов?), найдите стартап-файл в составе этого проекта. Скопируйте то же самое в любой новый проект. В стартапе редко что меняют, чаще всего одна и та же копия мигрирует между многими проектами одного МК. P.S. Вы в Си начинающий? Просто к сведению: stort-up код - это не особенность программ для микроконтроллеров, он генерируется для любой программы на Си/Си++. Даже если на Borlomd C++ Builder написать или на Microsoft Visual C - при компиляции проекта сгенерируется и stort-up. Да, вы правы. Пока буду воспринимать файл stortup_stm32f10x_md_vl.c и все с ним связанное как должное. Буду изучать как пользоваться периферией. В идеале, я хочу разобраться во всех тонкостях и возможностях хотя бы STM32F100RB, где какой регистр для настройки чего-либо и тп. Насчет си. На генерацию стартапа я не обращал внимания, не ковырял экзешники. Второй момент, пытаясь разобраться с библиотекой, след конструкция повергла меня в шок:
Нашел блог человека, который немного затронул тему инициализации, буду изучать http://zibtog.ru/ Вообще я думал, что в мире микроконтроллеров можно писать на ассеблере прямо с 0х00000000, знать настройки портов I/O и больше ни о чем не думать. Я ошибался.
0
|
|||||||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 05.08.2013, 02:47 | ||
{ /*----------Core Exceptions-------------------------------------------------*/ (void *)&pulStack[STACK_SIZE], /*!< The initial stack pointer */ Riset_Homdler, /*!< Riset Homdler */ NMI_Homdler, /*!< NMI Homdler */ HordFault_Homdler, ... } Я задал себе вопрос, что это? Не смог ответить... Понятно что инициализация каких-то обработчиков прерываний, но что это за сишная структура и как это будет выглядеть в памяти после компиляции - тайна за семью печатями.Это массив указателей на функции (конкретно здесь - обработчики векторов прерываний/исключений). Имя функции, как и имя массива, эквивалентно её/его адресу в памяти. После компиляции в памяти увидите (хотя бы отладчиком - посмотрите) последовательность таких адресов. Сравните с адресами, выведенными в .map-файл - всё совпадёт.
0
|
||
|
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 176
|
|
| 06.08.2013, 15:50 | |
|
В трансляторе это более понятно, например FASM.
thumb ;у процессоров cortexM3 только thumb org 08000000h ;флеш память начинается с 0x8000000 dw 20002000h ;Вершина стека, зависит от размера ОЗУ 8Кб dw _Riset+1 ;Вектор сброса _Riset: movw r1, 0x1018 ;адрес RCC_APB2ENR 0x40021018 movt r1,0x4002 ldrb r0,[r1] orr r0,10100b ;включаем порт C, A на шине APB2 strb r0,[r1] @@: b @b
0
|
|
|
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 30
|
|||||||||||
| 07.08.2013, 14:02 | |||||||||||
|
Я совсем запутался. Когда я выбрал в coIDE свой контроллер, он в настройках проекта написал (смотри ричунок)
IROM1 0x08000000, SIZE 0x00020000 IROM 0x20000000, SIZE 0x00002000 С этим понятно, среда указала где какая память у конкретного контроллера. Дальше. Код:
Тут же встает еще вопрос: откуда процессор знает что в ячейке 0х0800 0004 будет находится адрес, куда нужно перейти в случае прерывания именно Riset_Homdler, в 0х0800 0008 будет адрес обработчика прерывания именно NMI_Homdler а не какого-нибудь другого? Предположу ответ - наверное в процессоре зашита таблита соответствий названий прерываний и адреса ячеек, где искать адрес соответствующего прерывания. Если не прав, поправьте, если прав, скажите, что я правильно понял. Для простоты чтения выделил вопросы жирным.
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||||
| 07.08.2013, 14:21 | ||||
Компилятор по умолчанию помещает исполняемый код в эту секцию .text .
0
|
||||
|
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 30
|
|||
| 07.08.2013, 15:13 | |||
Я поковырялся, вышло так, что первое !двойное слово! адрес вершины стека, дальше !двойное слово! адрес обработчкика события "Riset", а потом адреса остальных обработчиков. А вот в обработчике в самом конце содержится безусловный переход на main(), т.е на программу, которую пишу я. Только есть несовпадение - в памяти адрес обработчика 0х08000125 а в дизасемблере 0х08000124 (см рисунки). как так?
0
|
|||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|||
| 07.08.2013, 16:34 | |||
0
|
|||
| 07.08.2013, 16:34 | |
|
Сегментная адресация памяти Адресация памяти по базе со сдвигом Адресация памяти в AT24C512C-SSHD-T Массивы, адресация, дин. исп памяти Прямая адресация к памяти. Использование подпрограмм Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|