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

 
 
> Монитор SAM-BA, Вредители навредили?
DpInRock
сообщение Mar 25 2009, 16:44
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Спаял наконец AT9SAM9261 плату.
И обнаружил следущую вещь.
1. Система команд SAM-BA в даташите неполная. Команда G (jump to address) может иметь параметр, который отвечает за REMAP.
Т.е. делать ремап или не делать.
Пример.
G00000# - делает джамп без ремапа, т.е. моментально вылазит BootRom/
G00000,1# - делает ремап. Программа стартует, загрузчик вырубается.
2. В Самбе уже под виндами в юзергайде неправильно описали команду send_file. Почему-то не указали параметр, который также отвечает за ремап. Т.е. сама программа подсказывает, что одного параметра не хватает. И этот параметр зовется remap.

Вопрос. Кто с этим сталкивался. Чего-нибудь еще там забыли сказать важного?
Или это я глючу после пайки деталей 0204?


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 19)
aaarrr
сообщение Mar 25 2009, 21:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Mar 25 2009, 19:44) *
Чего-нибудь еще там забыли сказать важного?

Весьма вероятно. SAM-BA - программа минимальной работоспособности, поэтому лучше не искать новые сюрпризы, а быстрее переходить на свое ПО.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 25 2009, 22:48
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



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


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 25 2009, 22:54
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Ну, и его туда же: dataflash->свой загрузчик->...
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 13:34
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



AAARRR, вы умный. Как поступить.
Компилятор п адресу сброса ставит команду перехода LDR PC. Скажем, по адресу 244. А он находится, еще в области ПЗУ. Команда G монитора как-то не хочет делать ремап перед джампом. НЕ желает.
Программа оттранслированная на неремапленные адреса - работает.

Или команда G делает ремап перед джампом, но я что-то не так делаю?


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 14:30
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Что-то я не очень понимаю ваши затруднения. Если у Вас внешняя флеш, то зачем команда G? Просто загружаетесь с нее при BMS=0. Или программа загружается во внутреннюю SRAM?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 15:00
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Программа грузится в внутреннюю SRAM. Флэши пока нет. Чтобы что-то во флэш записаить - надо все равно какую-то программу грузить. Либо отдельным программатором. А это неудбно очень.

Так вот. Загрузить я могу с адреса 30 0000. Это как раз SRAM. Но проограмма транслируется на адреса 0-26000. Т.е на уже ремапленные.
А первой командой компилятор ставит загрузки PC из таблицы, где указан адрес 224. Т.е. на уже ремапленный. А кто проц ремапить будет? Без ремапа проц идет по адресу 224, а там его поджидает ROM. И привет.

Вот собираюсь узнать как разместить процедуру по абсолютному адресу. Она будет ремапить и джампить на 0.
Т.е. загрузка по 30 0000. Далее выплнение команды Gxxxxxx - где xxxxx - адрес хитрой процедуры. Ну а дале - будет все нормально. Проц ремапится и начнет выполнятся начальный старт.
Так удобн отладку делать. Сразу в память. Эта же программа вполне будет работать и из флэша. Ибо Атмел уверяет, что при загрузке из флэша загрузчик ремап делает.

Программа грузится в внутреннюю SRAM. Флэши пока нет. Чтобы что-то во флэш записаить - надо все равно какую-то программу грузить. Либо отдельным программатором. А это неудбно очень.

Так вот. Загрузить я могу с адреса 30 0000. Это как раз SRAM. Но проограмма транслируется на адреса 0-26000. Т.е на уже ремапленные.
А первой командой компилятор ставит загрузки PC из таблицы, где указан адрес 224. Т.е. на уже ремапленный. А кто проц ремапить будет? Без ремапа проц идет по адресу 224, а там его поджидает ROM. И привет.

Вот собираюсь узнать как разместить процедуру по абсолютному адресу. Она будет ремапить и джампить на 0.
Т.е. загрузка по 30 0000. Далее выплнение команды Gxxxxxx - где xxxxx - адрес хитрой процедуры. Ну а дале - будет все нормально. Проц ремапится и начнет выполнятся начальный старт.
Так удобн отладку делать. Сразу в память. Эта же программа вполне будет работать и из флэша. Ибо Атмел уверяет, что при загрузке из флэша загрузчик ремап делает.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 15:58
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Можно немного подправить стартап, и ремапить самой загружаемой программой. Для этого по нулевому адресу меняем ldr pc, ... на b ..., затем ремапим процессор и делаем финт ушами:
Код
        bic        pc, pc, #0x300000
        nop


Ну а саму программу линкуем под нулевой адрес, естественно.

UPD: И кэш инструкций надо не забыть грохнуть сначала.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 17:10
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Надеюсь отыщу как убивать кэш. Вроде мелькало где-то.

Вообще это тогда будет частный случай. Если эту же программу проц будет грузить из флэша будет облом. Он ремап сам делает перед джампом на 0. Ну, так уверяет даташит. Прямым текстом.

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

Хотя первой можно поставить команду которая идет по относительному адресу. А ей будет все равно ремаплено или нет. А уж дальше разбираться.
Но все это как-то странно. У атмела на этот счет ни гугу. Типа, чтоб сами разбирались?


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 17:24
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Mar 26 2009, 20:10) *
Надеюсь отыщу как убивать кэш. Вроде мелькало где-то.

Код
        mrc        p15, 0, r0, c1, c0, 0    ; read CP15 register 1 into r0
        bic        r0, r0, #0x01            ; clear MMU enable
        bic        r0, r0, #(0x01 << 0x0c)    ; disable I Cache
        bic        r0, r0, #(0x01 << 0x02)    ; disable D Cache
        mcr        p15, 0, r0, c1, c0, 0    ; write value back


Цитата(DpInRock @ Mar 26 2009, 20:10) *
Вообще это тогда будет частный случай. Если эту же программу проц будет грузить из флэша будет облом. Он ремап сам делает перед джампом на 0. Ну, так уверяет даташит. Прямым текстом.

Не будет он делать ремап, если это внешняя флеш (не dataflash). Состояние ремапа всегда можно проверить.

Цитата(DpInRock @ Mar 26 2009, 20:10) *
У атмела на этот счет ни гугу. Типа, чтоб сами разбирались?

У Атмела remap - это просто старая традиция. Ну, и разбираться там особо нечего.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 17:58
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Как раз датафлэш у меня. Ничего особенного. И загрузчик, обнаруживая прогу в датафлэш закачивает ее, делает ремап и джамп.
Это вроде точно (типа, так написано).


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 18:01
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Mar 26 2009, 20:58) *
Это вроде точно (типа, так написано).

Да, это точно. Тогда проверяйте состояние ремапа и переключайте только когда это необходимо.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 18:41
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Совсем просто расположить функцию по адресу как-то тяжело.
Решил дело проще.

#pragma location=0x200
unsigned long q[5]={code1, code2, code3,code4,code5};
Где сразу забью код кманд ремапа и джампа.
Потом этот массив можно и использовать повторно. Для чего-нибудь.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 19:58
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



А оказалось еще проще.

Закачал себе 5.4 ИАР. И там в стартапе для 9261 в комментариях к этому джаму по нулевому адресу написан кммент, типа засунь сюда относительный джам, ежели требуется ремап. Вот спасибо иаровцам.

Теперь придется смотреть систему команд. Понятия не имею как выглядит этот относительный джамп.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 20:45
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Mar 26 2009, 22:58) *
Теперь придется смотреть систему команд. Понятия не имею как выглядит этот относительный джамп.

b <метка> Но систему команд изучите обязательно.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 21:20
Сообщение #16


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Палучилось. !!!!!! Целый день, ё, мучался. Спасибо Иару 5 и принявшим участие в горькой судьбе начинающего армовладельца.
Поправил на релятивный бранч и вставил ремап без проверки. Чего там проверять. Надеюсь, не будет неопознанных стартов с нулевого адреса.

Но до чего же странно устроены ихние армвские команды.
Чтобы загнать число в регистр они делают вот что:

Требуется записать по адресу FFFF EE00 число 3.
Берем инвертируем FF для получения FFFF FF00 MVN R0, #0xFF
Потом инвертируем пару бит для получения FFFF EE00 BIC R0, R0, #0x1100.

Теперь в регистре R0 требуемый адрес. У него что, все команды только из одного слова состоятьт могут?
И так Си с каждой константой мучается? Надо будет посмотреть.

O!
А если использовать команду BL, то в R14 запишется PC? Это значит, я смогу узнать откуда стартовал и требуется ли ремап?
Невреддно читать систему команд. Си как-то настраивает на леность в этом вопросе.

Сообщение отредактировал DpInRock - Mar 26 2009, 21:26


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 21:25
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Mar 27 2009, 00:20) *
У него что, все команды только из одного слова состоятьт могут?

Да.

Цитата(DpInRock @ Mar 27 2009, 00:20) *
И так Си с каждой константой мучается? Надо будет посмотреть.

Компилятор как раз не мучается, в отличие от человека smile.gif
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 21:54
Сообщение #18


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Да. Посмотрю. Чтоб по крайней мере узнать какие переменные лучше использовать. Похоже на то, что все одиноко стоящие переменные лучче собрать в массив. Чтоб он так с каждым адресом не суетился. Не сильно наглядно, но экономно.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 22:33
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Да не надо в массив, у Вас же не будет сотен отдельных глобальных переменных. А экономия копеечная в лучшем случае выйдет, при полной потере читаемости.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 27 2009, 00:25
Сообщение #20


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



У меня любительская радиостанция на стапеле. Там стоко переменных, что жуть берет.
А читаемость - полдня дефайнов и будет читаться как роман. Но это я так. Пока проблема памяти не стоит. Инит всей периферии занял всего 1.5К бинарника.

Кстати, я сделал на перемычках переключение 16 и 24 битного цвета.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post

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

 


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


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