[uquote="Мурик",url="/forum/viewtopic.php?p=4278638#p4278638"]Посмотрите стартап из архива и сравните с тем что у вас.[/uquote]
Посмотрел, да теперь понятно. Что таблица векторов явно присутствует в коде прошивки, а не создаётся компоновщиком.
И поискав (по папкам блинка) я нашёл её в файле: cmsis/vectors_stm32f401xc.c
Код: Выделить всё
__attribute__ ((section(".isr_vector"),used))
pHandler __isr_vectors[] =
{
// Cortex-M Core Handlers
(pHandler) &_estack, // The initial stack pointer
Reset_Handler, // The reset handler
................
[uquote="VladislavS",url="/forum/viewtopic.php?p=4278660#p4278660"]Вы путаете конфигурационный файл (скрипт) линкера и стартап. Первое это правила размещения кода и данных в памяти.[/uquote]Под памятью, Вы имеете ввиду бинарный файл, который по ld-скрипту соберёт компоновщик из объектов которые создал компилятор?
[uquote="VladislavS",url="/forum/viewtopic.php?p=4278675#p4278675"]При включении питания на адрес 0x00000000 отображается область памяти, заданная на ножках BOOT0 и BOOT1. Это может быть SRAM (0x20000000), FLASH (0x08000000) или SystemFlash (адрес не помню).[/uquote]То есть без режима прошивки (заданного на ножках BOOT) МК при запуске отображает в ОЗУ память flash, куда мы разместили прошивку с таблицей векторов по адресу 0x08000000 (адрес во флеш или озу памяти?).
[uquote="VladislavS",url="/forum/viewtopic.php?p=4278675#p4278675"]то что у вас размещено в коде по адресу 0x080000000 и будет таблицей векторов прерываний. В ней в начале записан адрес стека, затем адреса функций обработки прерываний начиная с Reset_Handler. Посмотрите приложенный файл, он на С, там многое станет понятно.[/uquote]
Разве в коде мы устанавливаем адреса? По моему, код может только обращаться по адресу. Компилятор создаёт бинарный файл, который при прошивке МК мы передаём загрузчику, который размещает его во flash-памяти МК по некоторому адресу. И когда МК стартует он отображает эти данные из flash в озу.
И если так, то почему адрес 0x080000000, - ведь он соответствует размеру flash-памяти 519 МБ ? У МК только 256 кБ, не говоря уже о 64 кБ SRAM.
[uquote="VladislavS",url="/forum/viewtopic.php?p=4278675#p4278675"]
startup_gcc_stm32f401.zip
[/uquote]
Спасибо, я нашёл подобное в Eclipse в cmsis/vectors_stm32f401xc.c
[uquote="VladislavS",url="/forum/viewtopic.php?p=4278675#p4278675"]Для кортексов, коими являются чипы STM32, эта опция не имеет особого смысла. Выполнение кода начинается с адреса, указанного в таблице векторов прерывания на месте Reset_Handler.[/uquote] Да, после того как я нашёл таблицу векторов в коде cmsis/vectors_stm32f401xc.c, соответственно нашёл и Reset_Handler(), который там вызывает _start() который вызывает main().
[uquote="MLX90640",url="/forum/viewtopic.php?p=4278685#p4278685"]Таблица даже не смещений, а абсолютных адресов. Вот так она выглядит в самой прошивке микроконтроллера. Второй элемент таблицы - адрес начала работы программного кода

[/uquote]
Как я понимаю это отладчик памяти МК. Интересно как в таблице появляются эти абсолютные адреса, да тем более по такому адресу?