mob7272
|
|
1 | |
stm32f103c8 и стек01.05.2017, 10:31. Показов 5106. Ответов 15
Метки нет (Все метки)
Доброго всем времени.
Какой размер стека указывается в stortup-файле? Так в статье "ASM в STM32 Начало" автор определяет размер стека stack_size equ 0x100 в Reference manual на stm32f100xx указано в пункте 2.3.1 SROM = 32K. Keil при автоматическом включении stortup-файла пишет Stack_Size EQU 0x00000400. Для stm32f103c8 RM сказано SROM = 96K. Keil пишет в stortup-файле Stack_Size EQU 0x00000400. Так вот вопрос как увязать данные из RM и stortup-файла, какой размер указывать? Заранее спасибо. |
01.05.2017, 10:31 | |
Ответы с готовыми решениями:
15
stm32f103c8 цап Обвязка stm32f103c8 stm32f103c8 usb проблема STM32F103C8 тактирование от HSI |
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
|
01.05.2017, 11:38 | 2 |
0x400 всегда хватало. А в чем проблема собственно?
0
|
mob7272
|
|
01.05.2017, 11:44 | 3 |
Я начинающий, и фраза "всегда хватало" мне непонятна так как в AVR стек начинался с конца, а в STM как-то подругому? И как определить хватит или нет? Как я заранее могу определить скока надо, не проще указать в конец и все? Спасибо.
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
|
01.05.2017, 12:05 | 4 |
Не важно как стек расположен ибо вы его сами можете расположить как хочется (но зачем?), важно сколько под него выделено места.
Так вот 0x400 этого размера более чем достаточно для приложений. Если вам нужно до байта высчитать то смотрите сколько у вас вызовов вложенных и сколько инициализируется переменных внутри. Сможете посчитать - отлично, нет - оставили поумолчанию и работаем дальше.
0
|
mob7272
|
|
01.05.2017, 12:11 | 5 |
Спасибо за ответ. Но всеже почему не указать конец SROM и забыть про него? Если это не трудно, можете обьяснить?
Для начала и обучения (изучения) указываю 0x400 и незаморачиваюсь. |
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
|
01.05.2017, 12:21 | 6 |
Если стек будет расти с конца то можно его перекрыть динамически выделяемыми переменными и не понять что происходит, а так он идет сразу за статическими и вы туда не попадете. Ну или же свалитесь в hard fault
Смотрите MAP файл который Keil компилит.
0
|
mob7272
|
|
01.05.2017, 12:26 | 7 |
О как, так почему этого не делали в AVR, из-зи малых размеров?
Где на эту тему почитать, желательно на русском. А то нет четкого понимания что где расположено, куда помещается/распределяется автоматически и так далее. Еще раз спасибо. а про map файл можно поподробнее, где он и что в нем отражено или литературу какую. |
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
|
01.05.2017, 12:34 | 8 |
С АВР не знаком, так что не могу сказать почему так.
После первой компиляции проекта в папке проекта появляются *.map файл с именем проекта. Найдите его и откройте любым текстовым редактором. Там будет много интересного, но все достаточно понятно и есть заголовки какая секция что содержит. Там будет видно как расположены переменные, сколько под них места, по каким адресам идут вызовы функции и т.д. почитать на русском... не знаю. гуглить нужно :)
0
|
mob7272
|
|
01.05.2017, 12:45 | 9 |
Спасибо огромное.
Пошел изучать, искать, новые вопросы готовить. |
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 225
|
|
01.05.2017, 13:27 | 10 |
Доброго времени суток !
Давайте разбираться. stm32f103c8 - 48pin 64kB - flash; 20kB - ROM; Глянем как в .ld файлах задается стек. Первый файл mem.ld - здесь распределяется адресное пространство и задается режимы доступа к ней
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
|
01.05.2017, 13:51 | 11 |
У ТС Keil. Вот примерно что будет в map файле:
Код
.................. HEAP 0x20002bf0 Section 512 stortup_stm32f10x_md.o(HEAP) Heap_Mem 0x20002bf0 Data 512 stortup_stm32f10x_md.o(HEAP) STACK 0x20002df0 Section 1024 stortup_stm32f10x_md.o(STACK) Stack_Mem 0x20002df0 Data 1024 stortup_stm32f10x_md.o(STACK) __initial_sp 0x200031f0 Data 0 stortup_stm32f10x_md.o(STACK)
0
|
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 225
|
|
01.05.2017, 14:23 | 12 |
Keil один раз поставил, глянул - корявая поделка, вернулся назад на гнутый Си
0
|
0 / 0 / 0
Регистрация: 15.04.2016
Сообщений: 237
|
|
01.05.2017, 15:46 | 13 |
Сообщение от mob7272
Сообщение от mob7272
Там случайно не написано что в этом МК несколько терабайт флеша частота 100 ГГц?
0
|
mob7272
|
|
01.05.2017, 16:45 | 14 |
Moyk
1. В указанной выше статье был рассмотрен пример конкретно на F100, а у меня F103. Поэтому связи никакой, разве только ядрышко. 2. А это скрин из RM на F103. Может я неправильно понял эту запись, буду рад разьяснению. |
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 225
|
|
01.05.2017, 16:52 | 15 |
Здесь сказано что в контроллерах stm32f10x может быть до 96кБ ОЗУ. К которому может быть 16 битный или 32-х битный доступ и начинается эта память с адреса 0x2000 0000. В микросхеме stm32f103c8 конкретно 20кБ ОЗУ
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
|
01.05.2017, 16:52 | 16 |
RM он же по несколько разных МК на одном ядре. А запись "up to 96" означает что старшие МК из этого семейства могут иметь до 96 КБ, нужно смотреть на конкретный камень который у вас в руках.
Для этого хорошо подходит CubeMX. Но не более :) P.s. там и флеша на самом деле мегабайты ;)
0
|
01.05.2017, 16:52 | |
01.05.2017, 16:52 | |
Помогаю со студенческими работами здесь
16
Кажется спалил STM32F103C8 Чем заменить Stm32f103C8? Stm32F103C8 встроенный термодатчик STM32F103C8 SPI SDcard Keil stm32f103c8 прерывания RTC STM32F103C8 отставание часов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |