реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Адрес выполняемого кода
quarz
сообщение Dec 21 2010, 12:31
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 15-01-05
Из: Москва
Пользователь №: 1 980



Приветствую знатоков!

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

Как будто по нулевому адресу не код расположен, а что-то другое.
Пишу в IAR, в стартапе указано, что после reset переходит по адресу __iar_program_start. Чему равен __iar_program_start - не нашел.
Как тогда определить адрес расположения моего загрузчика?
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 21 2010, 14:10
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Цитата(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(); откуда хотите
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 21 2010, 14:47
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (quarz @ Dec 21 2010, 18:31) *
Работаю с процессором Cortex-M3 LM3S3748, пишу загрузчик.

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

Разумеется "другое" - Initial stack pointer.
P.S.
На форуме есть раздел для начинающих.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 21 2010, 14:57
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Я дико извиняюсь что встреваю, но недавно на Сахаре всплывал вопрос про переход на фиксированный адрес и там выяснилась маленькая тонкость - Cortex работает в Thumb-2, поэтому при переходе командой B(L)X адрес перехода должен содержать в себе "метку" Thumb - единичку в младшем разряде.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01364 секунд с 7
ELECTRONIX ©2004-2016