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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Переключить режим работы ARM, текущее состояние ядра Abort, надо переключить в Supervisor
impatt
сообщение Mar 17 2010, 09:16
Сообщение #1


Частый гость
**

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



Сорри за тупой вопрос.
Я не спец в АРМ-ах, но кое-что надо сделать, не познавая весь мир со стадии "когда Земля была жидкая". Посему нуждаюсь в конкретных советах: у меня есть консоль OpenOCD, подключенного к ARM1136, я могу загружать туда код и исполнять его, могу даже сделать что-то на ассемблере, скомпилировать и выдрать бинарный образ из ELF-контейнера. Надо переключить состояние с Abort или Undefined Instruction на Supervisor. Беда в том, что не знаю до тонкостей ARM-ассемблера и особенностей работы.
Собсна, вот.
Заранее спасибо.
Go to the top of the page
 
+Quote Post
Aurochs
сообщение Mar 18 2010, 11:55
Сообщение #2


Ортодокс
***

Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775



Вот фрагмент кода на ассемблере, который позволит переключиться в режим супервизора
Код
  mrs r0, cpsr
  bic r0, r0, #0x1F
  orr r1, r0, #0x13
  msr cpsr_cxsf, r1
Go to the top of the page
 
+Quote Post
impatt
сообщение Mar 19 2010, 03:05
Сообщение #3


Частый гость
**

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



Цитата(Aurochs @ Mar 18 2010, 16:55) *
Вот фрагмент кода на ассемблере, который позволит переключиться в режим супервизора

Вольшое спасибо, похоже на то, что требуется smile.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 19 2010, 12:57
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Если не секрет. Откуда возникла такая потребность? Оба режима Abort или Undefined Instruction - это "аварийные режимы" процессора. Если вы в них попали, надо выяснять почему и исправлять программу. А вываливаться из них какой смысл?
Go to the top of the page
 
+Quote Post
impatt
сообщение Mar 19 2010, 13:37
Сообщение #5


Частый гость
**

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



Цитата(sergeeff @ Mar 19 2010, 17:57) *
Если не секрет. Откуда возникла такая потребность? Оба режима Abort или Undefined Instruction - это "аварийные режимы" процессора. Если вы в них попали, надо выяснять почему и исправлять программу. А вываливаться из них какой смысл?

Не секрет, конечно: после сброса и до ввода в режим отладки, процессор успевает исполнять какой-то мусор с флэшки. Мне же его надо иметь в нормальном состоянии. Собственно, вот smile.gif
Вообще, я пока приведённым рецептом не воспользовался - нашёл способ сделать инче, но это частный случай, а так-то рецептик себе на манжету запишу smile.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 21 2010, 00:32
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(sergeeff @ Mar 19 2010, 14:57) *
А вываливаться из них какой смысл?

Да есть много причин возвращаться из Abort'а в svsr.. К примеру определить объем реально подключенной SDRAM памяти.
Плюсуете к адресу по мегабайту - натыкаетесь на датааборт - вот собсно и верхняя граница памяти.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 21 2010, 01:06
Сообщение #7


Гуру
******

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



Цитата(defunct @ Mar 21 2010, 03:32) *
Плюсуете к адресу по мегабайту - натыкаетесь на датааборт - вот собсно и верхняя граница памяти.

А контроллер памяти откуда вдруг знает о границах? Получите overlap и все.

P.S. impat, сменили б вы юзерпик - глаза можно сломать, чесслово!
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 21 2010, 01:45
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(aaarrr @ Mar 21 2010, 03:06) *
А контроллер памяти откуда вдруг знает о границах? Получите overlap и все.

В реальной системе получаю abort. Откуда контроллер памяти знает меня не интересовало.
Если не нравится пример с памятью - другой пример - сохранение svsr fault регистров при краше.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 21 2010, 01:49
Сообщение #9


Гуру
******

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



Цитата(defunct @ Mar 21 2010, 04:45) *
В реальной системе получаю abort. Откуда контроллер памяти знает меня не интересовало.

А вот мне интересно. Можно узнать, что за система, и при каких условиях получается abort?
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 21 2010, 01:58
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(aaarrr @ Mar 21 2010, 03:49) *
А вот мне интересно. Можно узнать, что за система, и при каких условиях получается abort?

SoC на двух 1136 ARM'ах, чей там SDRAM контроллер, - не знаю... Дает аборт при доступе к несуществующей памяти, даже если в MMU ARM'ов помечено, что память там есть.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 21 2010, 02:10
Сообщение #11


Гуру
******

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



Цитата(defunct @ Mar 21 2010, 04:58) *
SoC на двух 1136 ARM'ах, чей там SDRAM контроллер, - не знаю... Дает аборт при доступе к несуществующей памяти, даже если в MMU ARM'ов помечено, что память там есть.

Хорошо, а как инициализируется этот контроллер - знаете? Просто ведь неоткуда знать ему, что там и в каком количестве снаружи прикручено, если только кто-то (сам процессор, точнее) не подскажет.
А вот генерить abort там, где ему было сказано, что памяти нет - это пожалуйста.
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 21 2010, 02:19
Сообщение #12


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(aaarrr @ Mar 21 2010, 04:10) *
Хорошо, а как инициализируется этот контроллер - знаете?

Мой application грузится бутлоадером сразу в SDRAM, стало быть SDRAM контроллер уже настроен бутлоадером.
Количество памяти в системе мой application узнает описанным выше способом.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 21 2010, 02:29
Сообщение #13


Гуру
******

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



Тогда вопросов более нет.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 21 2010, 12:27
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(defunct @ Mar 21 2010, 05:19) *
Мой application грузится бутлоадером сразу в SDRAM, стало быть SDRAM контроллер уже настроен бутлоадером.
Количество памяти в системе мой application узнает описанным выше способом.


Существуют более интеллигентные способы узнать объем памяти без вваливания в Abort. Я таким пользуюсь года три.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 21 2010, 15:36
Сообщение #15


Гуру
******

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



Цитата(sergeeff @ Mar 21 2010, 15:27) *
Существуют более интеллигентные способы узнать объем памяти без вваливания в Abort. Я таким пользуюсь года три.

Интеллигентных способа, как я понимаю, здесь два:
1. Получить значение объема от bootloader'а
2. Прочитать конфигурацию контроллера памяти

Попытка выяснить объем самостоятельно неминуемо приведет к abort'у.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 21 2010, 20:26
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Завтра с работы пришлю процедуру без входа в Abort.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 21 2010, 20:28
Сообщение #17


Гуру
******

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



Цитата(sergeeff @ Mar 21 2010, 23:26) *
Завтра с работы пришлю процедуру без входа в Abort.

Не надо процедуру. Принцип в двух словах изложите.
Как определить границу памяти без входа в abort, если при обращении мимо этот самый abort однозначно генерируется?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 22 2010, 07:03
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



В u-boot есть такая функция ram_size:

Код
static long ram_size(ulong *base, long maxsize)
{
    volatile long    *test_addr;
    volatile ulong    *base_addr = base;
    ulong        ofs;        /* byte offset from base_addr */
    ulong        save;        /* to make test non-destructive */
    ulong        save2;        /* to make test non-destructive */
    long        ramsize = -1;    /* size not determined yet */

    save = *base_addr;        /* save value at 0 so can restore */
    save2 = *(base_addr+1);    /* save value at 4 so can restore */

    /* is any SRAM present? */
    *base_addr = 0x5555aaaa;

    /* It is important to drive the data bus with different data so
     * it doesn't remember the value and look like RAM that isn't there.
     */
    *(base_addr + 1) = 0xaaaa5555;    /* use write to modify data bus */

    if (*base_addr != 0x5555aaaa)
    ramsize = 0;        /* no RAM present, or defective */
    else {
    *base_addr = 0xaaaa5555;
    *(base_addr + 1) = 0x5555aaaa;    /* use write to modify data bus */
    if (*base_addr != 0xaaaa5555)
        ramsize = 0;    /* no RAM present, or defective */
    }

    /* now size it if any is present */
    for (ofs = 4; ofs < maxsize && ramsize < 0; ofs <<= 1) {
    test_addr = (long*)((long)base_addr + ofs);    /* location to test */

    *base_addr = ~*test_addr;
    if (*base_addr == *test_addr)
        ramsize = ofs;    /* wrapped back to 0, so this is the size */
    }

    *base_addr = save;        /* restore value at 0 */
    *(base_addr+1) = save2;    /* restore value at 4 */
    return (ramsize);
}



Вызываю ее при запрещенных прерываниях, соответственно нет и Abort
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 22 2010, 07:20
Сообщение #19


Гуру
******

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



Цитата(sergeeff @ Mar 22 2010, 10:03) *
Вызываю ее при запрещенных прерываниях, соответственно нет и Abort

Однако, нет слов sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 22 2010, 07:35
Сообщение #20


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(sergeeff @ Mar 22 2010, 11:03) *
Вызываю ее при запрещенных прерываниях, соответственно нет и Abort

Разве оно работает? Вместо того чтобы писАть в рам адрес ячейки, чтобы оверлап детектировать, Вы пишете туда ахинею, совсем для этого не предназначенную sad.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 22 2010, 07:50
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Ну просветите! Надо объем памяти выяснить или в Abort влезть?

По поводу "Нет слов". Может это тлетворное влияние понедельника, но не въехал в смысл фразы.

Пишу не я, а авторы u-boot.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 22 2010, 07:59
Сообщение #22


Гуру
******

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



Цитата(sergeeff @ Mar 22 2010, 10:50) *
Пишу не я, а авторы u-boot.

Зачем тогда копипастите, то что не понимете, да и еще и добавляете отсебятину sad.gif?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 22 2010, 08:07
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(zltigo @ Mar 22 2010, 10:59) *
Зачем тогда копипастите, то что не понимете, да и еще и добавляете отсебятину sad.gif?


Уважаемый гуру!

Наверное у меня с утра приступ мозговой слабости. Буду признателен, если вы уделите некоторую толику своего времени для пояснения мне:
1. Чего я не понимаю.
2. В чем состоит отсебятина.

P.S. Безо всякого ехидства спрашиваю. Действительно не понял.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 22 2010, 08:58
Сообщение #24


Гуру
******

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



Цитата(sergeeff @ Mar 22 2010, 11:07) *
Действительно не понял.

Запрет прерываний на Abort ну никаким образом не распространяется.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 22 2010, 09:03
Сообщение #25


Гуру
******

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



Цитата(sergeeff @ Mar 22 2010, 11:07) *
Чего я не понимаю.

Про осебятину с запретом прерыаний - ответили.
А не хотите понимать того, что Data Abort будет всегда при обращении к внешней памяти о которой не знает/не запрограммирован EMC. Есть/нет/работоспособна память это второе, а как запрограммирован EMC это первое.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 22 2010, 09:28
Сообщение #26


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Благодарю за ответы, переотдыхал, наверное.
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 22 2010, 12:16
Сообщение #27


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(sergeeff @ Mar 22 2010, 09:03) *
В u-boot есть такая функция ram_size:
Код
static long ram_size(ulong *base, long maxsize)
{
....
}


Не знаю как насчет интеллигентности, но такой код выглядит куда более яснее и понятнее того, что вы привели:

Код
{
    V8 *p = 0x00;
    HANDLE h;

    GetExceptionVector( EXPVECT_DABT,  &h);
    SetExceptionVector( EXPVECT_DABT,  DabtDetHandler);

    while ( !DabtHappened )
    {
         p += 1*M;
         *p;
    }

    SetExceptionVector( EXPVECT_DABT, h);
    return (U32)p - 1;
}

Другое дело, что он работоспособен только после настройки EMC как выяснилось. sad.gif
Go to the top of the page
 
+Quote Post
impatt
сообщение Mar 24 2010, 10:55
Сообщение #28


Частый гость
**

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



Привет всем.
Есть кусок кода:
CODE
;
; Disable L2 cache
;
ldr r1, =CSP_BASE_REG_PA_L2CC
ldr r0, =0x0
str r0, [r1, #L2CC_CR_OFFSET]


Как я разумею:
1. "ldr r1, =CSP_BASE_REG_PA_L2CC" - загружает в r1 то, что содержится (а именно константа CSP_BASE_REG_PA_L2CC) в некоем адресе, заданном как смещение относительно PC. Так ?
2. "ldr r0, =0x0" - по аналогии, запись в r0 числа 0. Хотя, путь странноват. Неправильно понимаю ?
3. "str r0, [r1, #L2CC_CR_OFFSET]" - созранить значение из r0 в адрес, заданный как r1+ L2CC_CR_OFFSET. Верно понимаю ?

Спасибо.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 24 2010, 12:27
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



По пунктам 1 и 2: запись "LDR reg, =число" значит загрузить число в регистр. При этом ассемблер сам выбирает реализацию. К примеру, если число - это 0, то он подставит инструкцию "MOV reg, #0". Может поиграть константой и сдвигами, если есть возможность. Иначе загрузит по смещению от PC.
Пункт 3. Верно.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 24 2010, 12:28
Сообщение #30


Гуру
******

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



Все верно понимаете. Вместо второго ldr логичнее написать mov r0, #0.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 24 2010, 12:37
Сообщение #31


Гуру
******

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



Цитата(impatt @ Mar 24 2010, 13:55) *
Привет всем.

Moderator:
1.Мигающий Аватар убрал, раз на просьбы Вы не реагируете.
2.Темы захламляющие основные ветки форума объединил и перенес к начинающим. Настоятельно прошу не плодить темы с детскими вопросами.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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