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

UC3A Свой загрузчик

Приветствую !

Пишу свой загрузчик для uc3a0512, загружаю файл по x-modemу

использую avr32studio+gcc, уже умею загружать файл и прошивать во внутренею флеш

 

расположение по памяти такое:

------------------------------------

0х80000000: + 0 flash

boot-загрузчик

0x80020000: + 128k flash

program-то что прошил

------------------------------------

 

возникли вопросы:

 

Как организовать переход на загруженную прошивку из загрузчика?

Так понимаю что программу которую прошиваю загрузчиком нужно собирать со смещением 128к от начала как это можно сделать ?

Можно ли поместить подпрограму перепрошивки во внутреннею RAM и оттуда запустить ?

:smile3046:

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


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

cpl, это copy-past:)

Скажите пожалуйста, а что значит "загружаю файл по x-modemу"? Каким аппаратным средством вы загружаете прошивку?

Переход на программу я думаю делается обыкновенным джампом на адрес "0x80020000: + 128k flash".

"Можно ли поместить подпрограму перепрошивки во внутреннею RAM и оттуда запустить ?" - вопрос теоретический - какой архитектуры процессор - гарвардской или фон-неймановской Вам карты в руки, проверяйте на практике

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


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

cpl, это copy-past:)

Скажите пожалуйста, а что значит "загружаю файл по x-modemу"? Каким аппаратным средством вы загружаете прошивку?

Переход на программу я думаю делается обыкновенным джампом на адрес "0x80020000: + 128k flash".

"Можно ли поместить подпрограму перепрошивки во внутреннею RAM и оттуда запустить ?" - вопрос теоретический - какой архитектуры процессор - гарвардской или фон-неймановской Вам карты в руки, проверяйте на практике

 

загружаю через уарт,

переход сделал как вызов функции.

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


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

Объясните, пожалуйста, как на "С" организовать переход на адрес 0x80020000.

Там на ассемблере переходы только относительно PC, а мне нужно прыгнуть на абсолютный адрес.

Я писал оператор: asm ("br 0x8002000"); , но компилятор ругался.

На Меге-16 все получалось:

там было так: asm("jmp 0"); либо asm("jmp 0x7000"); и все проходило, пог прыгнуть из загрузчика на пользовательскую программу, а мог назад.

 

Подскажите, что нужно написать в программе на С для avr32uc3b0..., чтобы уйти на пользовательскую программу (загрузчик решил писать сам, потому что хотелось бы, чтобы драйвер для загрузчика и пользовательской программы был один и тот же - свой, а не фирменный)

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


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

Я просто вызываю функцию

AppMain();

Которая объявлена таким образом

void(*AppMain)(void) = ((void(*)(void))APP_FLASH_ADR);

 

где APP_FLASH_ADR - адрес приложения, в моем случае 0x80004000

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...