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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Переключить режим работы ARM, текущее состояние ядра Abort, надо переключить в Supervisor
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

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

 


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


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