Перейти к содержанию

    

Бутлодер для Кинетис

4 minutes ago, jenya7 said:

Вобщем все прописи в линкер файле не возимели эффекта. пришлось прописывать имплиситли


void main (void)
{
    SCB->VTOR = 0x4000;

 

 

Ну как бы все верно, линкер просто все верно разложил что бы ваш код работал корректно для этого адреса.
А VTOR обеспечивает работу прерываний из приложения, и как тут было сказано много раз, VTOR мог устанавливаться в загрузчике, чего в вашем загрузчике нет(это было видно из вашего листинга), значит это нужно делать в приложении.

Но согласитесь, было бы приятно если бы VTOR за Вас установил загрузчик?  :)))
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 minutes ago, Integro said:

Ну как бы все верно, линкер просто все верно разложил что бы ваш код работал корректно для этого адреса.

Как хорошо, что я делаю скрипт линкера и стартап самостоятельно. Всё на виду, ничего лишнего. Абсолютно понятно, что, где и как. Особенно выпукло это проявляется в схемах с загрузчиками и т.п., как мы тут можем убедиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
11 минут назад, Integro сказал:

Но согласитесь, было бы приятно если бы VTOR за Вас установил загрузчик?  :)))

Только не загрузчик, а линкер. Не напрямую, конечно, а подставил адрес в программу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
32 minutes ago, scifi said:

Да что же с вами со всем сегодня? Вообще-то эксплиситли :-)

точно! мозг уже дымиться :)

26 minutes ago, Integro said:

Ну как бы все верно, линкер просто все верно разложил что бы ваш код работал корректно для этого адреса.
А VTOR обеспечивает работу прерываний из приложения, и как тут было сказано много раз, VTOR мог устанавливаться в загрузчике, чего в вашем загрузчике нет(это было видно из вашего листинга), значит это нужно делать в приложении.

Но согласитесь, было бы приятно если бы VTOR за Вас установил загрузчик?  :)))
 

я не понял этот момент. как прописать в линкере автоматическую релокацию VTOR?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
34 minutes ago, jenya7 said:

я не понял этот момент. как прописать в линкере автоматическую релокацию VTOR? 

Хороший вопрос!)
Как сказал @VladislavS из линкера можно вытянуть адрес вектора либо начала ROM что обычно одно и тоже

А вот, исполнение зависит от компилятора, если это IAR :)
 

extern unsigned char FLASH$$Base;
SCB->VTOR = (uint32_t)&FLASH$$Base;

Где FLASH это название секции, точное название секции нужно в линкере смотреть.

Для KEIL и GCC там свои танцы...
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
19 hours ago, Integro said:

Хороший вопрос!)
Как сказал @VladislavS из линкера можно вытянуть адрес вектора либо начала ROM что обычно одно и тоже

А вот, исполнение зависит от компилятора, если это IAR :)
 


extern unsigned char FLASH$$Base;
SCB->VTOR = (uint32_t)&FLASH$$Base;

Где FLASH это название секции, точное название секции нужно в линкере смотреть.

Для KEIL и GCC там свои танцы...
 

Я понял.

Когда я писал булодер под STM32 в Атолик, хотя не думаю что среда тут важна, я прописал в линкере бутлодера размер бутлодера, вектор не трогал, а вот в линкере главной програмы прописал все смещенные адреса (вектор и флеш) и у меня все работало. Я нигде не вставлял SCB->VTOR = address;

 

ааа...блин вот я туплю. борд всегда грузиться с бутлодера и в конце он всегда прыгнет в главную програму -  JumpToUserApplication.

получается линкер файл нужен чтоб правильно сформировать бинарный файл.

 

я понял почему бутлодер посылает нас на адрес 0х4000. перепрыгнуть protected section.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

получается линкер файл нужен чтоб правильно сформировать бинарный файл.


FAQ давненько не пополнялся, похоже пора ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 14.11.2018 в 17:39, jenya7 сказал:

я понял почему бутлодер посылает нас на адрес 0х4000

Потому что если бы приложение начиналось раньше - загрузчик при первом же обновлении стер бы сам себя (страницы/сектора флешь-памяти стираются только целиком).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация