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

 
 
> sam256 remap, need example :(
SpiritDance
сообщение Apr 20 2007, 09:52
Сообщение #1


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Люди я чето непонимаю.
Итак цель - бутром записывающийся в конец флеш, для бутрома нужны прерывания, для того чтобы его собственная таблица векторов не затиралась приложением нужно также хранить ее в конце флеша, при старте переписывать в RAM и делать remap, при выходе из загрузчика делать remap обратно на флеш.

Так вот как это грамотно сделать в IARе?, кроссворксовский код
Код
    mov     r8, #0x00200000
    ldr     r9, =_vectors
    ldmia   r9!, {r0-r7}
    stmia   r8!, {r0-r7}
    ldmia   r9!, {r0-r6}
    stmia   r8!, {r0-r6}
    ldr     r0, =MC_RCR_RCB
    strb    r0, [r10, #MC_RCR_OFFSET]

просто так не проходит. RAMSTART в линкер-скрипте сделал 00200100- пофиг, без команды remap работает с ней беда, до main проц не доходит. Думаю причина в том, что remap как -то не вяжется с инитом компилера? причем посмотреть отладчиком что происходит тоже не очень удается.

Что такое
RSEG INTRAMSTART_REMAP
RSEG INTRAMEND_REMAP
в статртапе? недопонял.

может есть где проект под IAR с ремапом а?


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SpiritDance
сообщение Apr 20 2007, 11:12
Сообщение #2


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Да штука то в том что сам remap как раз и работает, только после него не работает ничего. Я кажется понял - pc после него указывает на рам а мне нужно чтоб оно из флеши выполнялось а таблица експекшены были в рам

Сергей Борщ
Насчет системной ошибки - я ему вектор ресета оставляю в начале флеша и не даю переписывать его через загрузчик.
Вообще спасибо большое, ушел думать.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 20 2007, 12:13
Сообщение #3


Гуру
******

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



Цитата(SpiritDance @ Apr 20 2007, 10:12) *
Сергей Борщ
Насчет системной ошибки - я ему вектор ресета оставляю в начале флеша и не даю переписывать его через загрузчик.
Размер страницы - 128 байт, размер сегмента векторов - вдвое меньше. Чтобы переписать остальные вектора надо предваритально затереть их все, вместе с вектором ресета.


--------------------
На любой вопрос даю любой ответ
"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
SpiritDance
сообщение Apr 20 2007, 13:21
Сообщение #4


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(Сергей Борщ @ Apr 20 2007, 13:13) *
Размер страницы - 128 байт, размер сегмента векторов - вдвое меньше. Чтобы переписать остальные вектора надо предваритально затереть их все, вместе с вектором ресета.

Не понял причем здесь размер страницы. Я по вектору ресета всегда в лоб пишу команду "b reset_загрузчика" если идет запись в начало флеш - это все что меняется в исходной программе. Адрес, который реально был в программе запоминается и по нему происходит прыжок в конце работы загрузчика. Правда нужно еще добавить вычисления, когда в начале программы стоит инструкция "ldr pc..". Но мысль насчет того что команда затирается понятна.

Все таки я что-то не пониммаю насчет remap. В приведенных примерах вроде нет никакого шамантсва с pc.Судя по логике после этой команды pc естественно не меняется и так как сейчас код выполняется из Internal Memory Area 0, то после подсовывание на это место RAM получается фигня. Вопрос - каким образом перескочить на выполнение кода из Internal Memory Area 1? Или я вообще все не так понял?


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 20 2007, 15:09
Сообщение #5


Гуру
******

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



Цитата(SpiritDance @ Apr 20 2007, 12:21) *
В приведенных примерах вроде нет никакого шамантсва с pc.
Да, вместо этого шаманство в файле линкера. Загрузчик исполняется не с отремапленых адресов 0x0000.... а с реальных адресов флеш 0x01000000.... Поэтому после ремапа его код остается на месте. Именно для этого я положил в архив исправленный загрузчик для иара FlashAT91SAM7Sx.d79, ибо родной из-за ошибки умеет писать только в адреса 0x00.....


Цитата(SpiritDance @ Apr 20 2007, 12:21) *
Адрес, который реально был в программе запоминается и по нему происходит прыжок в конце работы загрузчика.
А если программа пользователя хочет подвесить свои обработчики на остальные вектора? Можно конечно там сразу поставить LDR PC, AIC_IVR, но это уже ограничение, а как быть с FIQ?


--------------------
На любой вопрос даю любой ответ
"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
SpiritDance
сообщение Apr 20 2007, 16:35
Сообщение #6


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(Сергей Борщ @ Apr 20 2007, 16:09) *
Да, вместо этого шаманство в файле линкера. Загрузчик исполняется не с отремапленых адресов 0x0000.... а с реальных адресов флеш 0x01000000....

Я уже понял вроде. Пасибо. Туплю бывает. Добавил еденички, только после команды ремап все равно не работает код. sad.gif Прерывания отключены и всякие копирования векторов в рам тоже закоменчены. Отладкик такой код прошивать-отлаживать уже отказывается, наверно надо ковырятся в mac-файле.
А без ремапа работает - флешка шьется читается, нормально все. sad.gif Волшебство.

Цитата(Сергей Борщ @ Apr 20 2007, 16:09) *
А если программа пользователя хочет подвесить свои обработчики на остальные вектора? Можно конечно там сразу поставить LDR PC, AIC_IVR, но это уже ограничение, а как быть с FIQ?

Так, еще раз. Я при заливке программы через бутром меняю ей только вектор ресета, все остальное остается как есть.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 20 2007, 19:21
Сообщение #7


Гуру
******

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



Цитата(SpiritDance @ Apr 20 2007, 15:35) *
Отладкик такой код прошивать-отлаживать уже отказывается, наверно надо ковырятся в mac-файле.
Хм. У меня работает. Как ругается когда не прошивает? У меня просто вис, попробуйте мой прошивальщик положить вместо штатного.
Цитата(SpiritDance @ Apr 20 2007, 15:35) *
А без ремапа работает - флешка шьется читается, нормально все. sad.gif Волшебство.
Посмотрите в окне памяти что творится в области векторов. Окно дизассемблера не обновляется, а в окне памяти все изменения видны сразу.
Цитата(SpiritDance @ Apr 20 2007, 15:35) *
Так, еще раз. Я при заливке программы через бутром меняю ей только вектор ресета, все остальное остается как есть.
Да, меня заклинило - у вас же загрузчик в конце памяти. Т.е. остается нехорошесть в виде переписывания сегмента с векторами. Что-то там не сложилось и прибор надо возвращать к разработчику вместо повтороной перепрошивки на месте.
Цитата(d__ @ Apr 20 2007, 17:40) *
при старте она проверяет был ли ремап
Уже одно это действие на SAM7 нетривиально - надо изменить что-то в начале ОЗУ и посмотреть как это отразилось в нулевых адресах. После чего вернуть исходное значение. В моем варианте все гораздо проще - для старта приложения скопировал вектора приложения в начало ОЗУ, сделал ремап, перешел на адрес 0. Переход из приложения обратно в загрузчик - запретил прерывания, сделал ремап, перешел на адрес 0.


--------------------
На любой вопрос даю любой ответ
"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

Сообщений в этой теме
- SpiritDance   sam256 remap   Apr 20 2007, 09:52
- - amw   Не совсем то, что спрашивается, поскольку делает r...   Apr 20 2007, 10:45
- - Сергей Борщ   Цитата(SpiritDance @ Apr 20 2007, 08:52) ...   Apr 20 2007, 10:55
- - d__   А вот если так: Если программа должна работать из...   Apr 20 2007, 18:40
- - Waso   Есть несколько непоняток по скрещиванию программы ...   Nov 21 2007, 07:13
|- - Сергей Борщ   Цитата(Waso @ Nov 21 2007, 09:13) 1. Если...   Nov 21 2007, 11:54
- - Waso   У меня основная программа закачивает обновление че...   Nov 23 2007, 08:38
|- - Сергей Борщ   Цитата(Waso @ Nov 23 2007, 10:38) но отла...   Nov 23 2007, 09:50
|- - Waso   Цитата(Сергей Борщ @ Nov 23 2007, 16:50) ...   Nov 23 2007, 10:01
|- - Сергей Борщ   Цитата(Waso @ Nov 23 2007, 12:01) Отлажив...   Nov 23 2007, 10:55
- - Waso   Однако подвисает симулятор при запуске. Но всеравн...   Nov 26 2007, 06:04


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

 


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


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