|
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 30
|
|
Адресация памяти, помогите разобраться02.08.2013, 00:06. Показов 39539. Ответов 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 Массивы, адресация, дин. исп памяти Прямая адресация к памяти. Использование подпрограмм Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
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) в массовой культуре принято понимать. . .
|