Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Адрес выполняемого кода
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
quarz
Приветствую знатоков!

Работаю с процессором Cortex-M3 LM3S3748, пишу загрузчик.
Загрузчик располагается по нулевым адресам во Flash, прошивка будет находится в старших.
Загрузчик, как и полагается, проверяет наличие прошивки и при отсутствии должен снова запускать себя сначала.
Однако при переходе по адресу 0x00000000 вываливается в исключение FaultISR.

Как будто по нулевому адресу не код расположен, а что-то другое.
Пишу в IAR, в стартапе указано, что после reset переходит по адресу __iar_program_start. Чему равен __iar_program_start - не нашел.
Как тогда определить адрес расположения моего загрузчика?
kan35
Цитата(quarz @ Dec 21 2010, 18:31) *
Однако при переходе по адресу 0x00000000 вываливается в исключение FaultISR.

Я так думаю, что для такого прыжка надо в регистр PC, желательно в асме загрузить 0 (простите если я сказал что то не то:-))). Просто вызвать код оттуда как указатель на функцию точно неправильно.

Цитата(quarz @ Dec 21 2010, 18:31) *
Как будто по нулевому адресу не код расположен, а что-то другое.
Пишу в IAR, в стартапе указано, что после reset переходит по адресу __iar_program_start. Чему равен __iar_program_start - не нашел.
Как тогда определить адрес расположения моего загрузчика?

Объявите
void __iar_program_start(void);
и вызывайте __iar_program_start(); откуда хотите
zltigo
QUOTE (quarz @ Dec 21 2010, 18:31) *
Работаю с процессором Cortex-M3 LM3S3748, пишу загрузчик.

Видимо рановато еще загрузчиком заниматься - надо архитектуру Cortex-M3 хоть немного представлять для начала.
QUOTE
Однако при переходе по адресу 0x00000000 вываливается в исключение FaultISR.
Как будто по нулевому адресу не код расположен, а что-то другое.

Разумеется "другое" - Initial stack pointer.
P.S.
На форуме есть раздел для начинающих.
Сергей Борщ
Я дико извиняюсь что встреваю, но недавно на Сахаре всплывал вопрос про переход на фиксированный адрес и там выяснилась маленькая тонкость - Cortex работает в Thumb-2, поэтому при переходе командой B(L)X адрес перехода должен содержать в себе "метку" Thumb - единичку в младшем разряде.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.