11.01.2014, 01:39
|
|
Прописка
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
STM32 "глубокое" пояснение старта программы
программирую STM32 но так и нет полного понимания как ЭТО работает. Что происходит при старте программы. Почему при старте программа шагает по
Код:
|
LDR R0, =SystemInit
BLX R0
LDR R0, =__iar_program_start
BX R0 |
файла startup_stm32f10x_md_vl.s и как это дело происходит если этот файл не добавлять (я пробовал, без него тоже компилируется, только работает на другой частоте). я не прошу чтоб мне все объяснили. посоветуйте что почитать. может сделать несколько простых программ на ASM для STM32 чтоб понять как у него память устроена где и как там прерывания объявлены. хочу все осознать
__________________
Kvsrk85(Андрей)
|
|
|
|
11.01.2014, 21:52
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM32 "глубокое" пояснение старта программы
Сообщение от majorka65
|
К некоторым излишкам кода и неособо нужным сущностям,
|
Ну и что же там такое "не особо нужное" ?
Инициализация стека и кучи, настройка тактирования и латентости флэши ?
Что Вам так все мешает в Си ? Вы можете написать лучше и оптимальней компилятора ?
Уверен на 100 % что нет.
Может все проще , неспособность осознать парадигму модульного программирования и вообще Си .
__________________
Осторожно , злой кот
|
|
|
|
11.01.2014, 22:18
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM32 "глубокое" пояснение старта программы
Сообщение от majorka65
|
что Вы все пытаетесь пободаться со мной,
|
Да не с Вами я бодаюсь , а с Вашими домыслами .
Кто то же Ваше мнение и за постулат может принять, осторожней с этим .
На счет характера это вы зря , я белый и пушистый.
__________________
Осторожно , злой кот
|
|
|
|
12.01.2014, 00:25
|
|
Прописка
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: STM32 "глубокое" пояснение старта программы
Сообщение от majorka65
|
как Вы удаляете стартап из проекта? Project/Manage Components?
|
я пишу в IAR: создаю пустой проект, выбираю процессор, выбираю файл линкера и ставлю галочку "Use CMSIS". в main файле программы прописываю #include "stm32f10x.h" и добавляю к проекту всего два файла: stm32f10x.h и system_stm32f10x.h. Все, программа компилируется и запускается. Если убрать глочку в настройке дебагера "Run to main" то видим что программа начинает стартовать с адреса 0x8000068 если я правильно понимаю (для меня непонятно почему с именно с этого адреса).
В IAR довольно просто, как видите. В кеиле - не пробовал.
__________________
Kvsrk85(Андрей)
Последний раз редактировалось kvark85; 12.01.2014 в 00:33.
|
|
|
|
12.01.2014, 00:31
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM32 "глубокое" пояснение старта программы
kvark85, Поставь бряк на вектор сброса и шагай по ассемблеру .
Все там ясно и понятно. Скрыто от юзера то что выше писал ...
__________________
Осторожно , злой кот
|
|
|
|
12.01.2014, 00:52
|
|
Прописка
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: STM32 "глубокое" пояснение старта программы
Сообщение от dosikus
|
Поставь бряк на вектор сброса
|
бряк... а где этот вектор сброса? в каком файле? как его найти?
__________________
Kvsrk85(Андрей)
|
|
|
|
12.01.2014, 00:58
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM32 "глубокое" пояснение старта программы
Break Point , startup
Код:
|
LDR R0, =SystemInit ‹- Reset vector
BLX R0
LDR R0, =__iar_program_start
BX R0 |
__________________
Осторожно , злой кот
|
|
|
|
06.02.2014, 10:56
|
|
Временная регистрация
Регистрация: 18.01.2010
Сообщений: 89
Сказал спасибо: 7
Сказали Спасибо 22 раз(а) в 14 сообщении(ях)
|
Re: STM32 "глубокое" пояснение старта программы
Вроде все просто, проц при старте инициализирует указатель стека MSP содержимым 0-го вектора сброса, а программный счетчик - содержимым вектора 1. Т.е. там лежат данные (адреса).
Вектора сброса лежат в стартап *.s файле:
Код:
|
DATA
__vector_table
DCD sfe(CSTACK)
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler |
Т.е. это 4-х байтовые адреса. Далее ищем, куда они указывают, в том же файле:
(как писал dosikus)
Код:
|
Reset_Handler
LDR R0, =SystemInit
BLX R0
LDR R0, =__iar_program_start
BX R0 |
Это уже исполняемый код. Далее поиском по всему проекту можно найти, что делается дальше. Ну или отладкой идти...
А в AVR в векторах лежит команда перехода (обычно).
|
|
|
|
16.09.2015, 21:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.01.2007
Сообщений: 3,123
Сказал спасибо: 61
Сказали Спасибо 1,153 раз(а) в 624 сообщении(ях)
|
Re: STM32 "глубокое" пояснение старта программы
Сообщение от AlexP74
|
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
|
А что означает аббревиатура DCD?
|
|
|
|
17.09.2015, 09:17
|
|
Прописка
Регистрация: 31.10.2006
Сообщений: 149
Сказал спасибо: 15
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
|
Re: STM32 "глубокое" пояснение старта программы
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:24.
|
|