consoledevФорум

коды ошибок под псп (2 стр)

Страницы: 1 2 3 Следующая »
#15
22:57, 6 июня 2006

bada
Сам пока еще не имею опыта подобной отладки на PSP. Но думаю, что offset записан в EPC (типа program counter), т.е. тебе надо искать в полученном от psp-objdump map-файле адрес 0326C560, и не обязательно что он там такой будет (в этом случае найди границы, между кототрыми он находится). Совершенно точно, что такая отладка предполагает какое-то знание ассемблера и представление причины, по которым комбинация набора значений регистров и инструкции вызвала GPF-сбой.

Следующий вопрос. Чем это может помочь? Очевидно, что ничем, если у тебя нет знания архитектуры.

#16
22:59, 6 июня 2006

Да, вдогонку. Я предполагаю что такая вот фигня (Cause 18) может получиться из-за ошибки доступа к данным. Например, к элементам структур с плохим выравниванием. Там целая эпопея. Я в соседней теме (PSP - подводные камни) помещу лог, который может быть будет тебе полезен.

#17
12:30, 7 июня 2006

Padawan

почитал лог, это что совсем так все плохо? та лааадддно...вон народа на ДС пишет .. им вобще даже на фриварном сдк класть на выравнивание, и ничего - пашет и сеет......вы уж меня и всех запугали ))))))


кстати...поборов все ашипки в коде, прога все равно виснит при перегрузке ((
по асму - вылет в <_malloc_r> .... единое место - в библиотеке пнг.....черт.....у кого есть либа на пнг чтоб работала? )))

#18
13:32, 7 июня 2006

bada

Тебе уже много раз говорил, что лучше свой pool manager, и без free.
Один раз делаешь например такое
  dsMemoryPool* pool = &memoryPool[memoryPoolFreeIndex];
  pool->memoryBlockID = sceKernelAllocPartitionMemory
    (
      SCE_KERNEL_PRIMARY_USER_PARTITION,
      "dsEngine::MemoryPool",
      SCE_KERNEL_SMEM_HIGH,
      size,
      (void*)4096
    );
  ASSERT(pool->memoryBlockID > 0,"error allocating kernel partition memory 0x%08x",pool->memoryBlockID);

  pool->currentheap = static_cast<unsigned char*>(sceKernelGetBlockHeadAddr(pool->memoryBlockID));
  pool->minheap    = pool->currentheap;
  pool->maxheap    = pool->currentheap + size;

и забываешь резко про mallocs

=========================

2. Если не думать про align, это сразу exception BUS ERROR, это реальность ! На DS стоит ARM7-ARM9 которому насрать на выравнивание, но подозреваю что все равно там будет penalty

#19
14:15, 7 июня 2006

bada

> кстати...поборов все ашипки в коде, прога все равно виснит при перегрузке ((
> по асму - вылет в <_malloc_r> .... единое место - в библиотеке пнг.....черт.....у кого есть либа на пнг чтоб работала? )))

malloc он у многих не работает.
Соответственно middleware которое юзает malloc тоже может не работать.
Поцаны кладут на это ;)

#20
14:29, 7 июня 2006

neteraser

эээ кладут на это и все равно пишут malloc или пишут свой распределитель?

я вот просто в тихом шоке....а как это у меня 7(семь) месяцев все работало?????? и даже кучу кода уже написано...ага с виртуальным наследованием и ..ага....со сторонними бибилотеками....и без никаких выравниваний - вот он - МЕДНЫЙ ТАЗ!!

#21
14:33, 7 июня 2006

bada
> и без никаких выравниваний - вот он - МЕДНЫЙ ТАЗ!!
Если просто писать структуры, маллокировать и копировать по полям - компилятор сам за тебя выравнивания делает :)
А вот как только озадачиваешься memory mapped или работой с align 64 - тут то и начинается жопа

Updated: а где тебе потребовалось виртуальное наследование? Интересно подсчитать, какое там пенальти будет!

#22
17:08, 7 июня 2006

KVaks

дяденька, научите писать такие умные пулы, ато я ниразу не писал.....ну или скажите где подсмотреть

#23
17:13, 7 июня 2006

>> я вот просто в тихом шоке....а как это у меня 7(семь) месяцев все работало?????? и даже кучу кода уже написано...ага с виртуальным наследованием и ..ага....со сторонними бибилотеками....и без никаких выравниваний - вот он - МЕДНЫЙ ТАЗ!!

Я так от смеха и надорвусь :)

#24
17:21, 7 июня 2006

bada

Я уже дал тебе подсмотреть :) а в нем у тебя уже есть memory start и memory end (aka minheap maxheap)
делаешь malloc

void* uber_malloc(int size)
{
  void* address = currentheap;
  currentheap = currentheap + size; // таже нада учитывать alignment
  return address;
}

в DEBUG ставишь там ASSERT
когда level reload делаешь currentheap = minheap, и ни одного free

это конечно сильно упрощенно, но можешь стартануть с этого, и по ходу добавлять функциональность.

#25
17:24, 7 июня 2006

bada
Это называет heap стекового типа. Только malloc() и общий discard(). Навороченные системы "умеют" также делать и free(), но в том же самом стековом порядке (LIFO)

KVaks
> На DS стоит ARM7-ARM9 которому насрать на выравнивание, но подозреваю что все равно там будет penalty
А куда же оно денется? Считывание информации с двух адресов памяти и объединение внутри процессора :)

#26
18:04, 7 июня 2006

кстати и memset тоже вылетает, ура товарищи!

а что это за число такое хитрое ?  (void*)4096  ?

и  "тоже учитывать элайнмент" это как и по какому месту?

#27
18:29, 7 июня 2006

bada
>пнг.....черт.....у кого есть либа на пнг чтоб работала? )))
Чорт, пропустил пост. Сейчас отвечу.

Залез в png.h, увидел структуру png_info_struct. Подсчитал поля, посочувствовал. ИМХО без серьезной переделки исходников png загрузить не удастся.
Подробнее - см. здесь http://www.gamedev.ru/community/ps2dev/forum/?id=1209, пост №3.

#28
18:54, 7 июня 2006

Димка

гммм....гмммм.....вобщето , по секрету - все грузицца без никаких....и все ээээндцать метров ресурсов у меня в пнг....воот....а то что по каким то странным причинам вдруг перестает работать - это все печально....просто там можно подменять считывание и выделение памяти, что я и сделал....но! в какойто произвольный момент - бам - доступ по нулю или вобще мертвый повис.....причем это настало когда на уровне уже так эээ3 перса со всеми анимациями и 3 врага + фон....тоесть оживленно , да

#29
19:23, 7 июня 2006

bada
Странно. Работать не должна :). В структуре, в которой идет int16, а потом int32, должно быть выравнивание адресов и добавление лишних двух байт.
Как только найду немного времени, посмотрю, как png загружает данные.
По поводу exception в malloc_r - могу только посоветовать заменить менеджер памяти на какой-то оладочный и смотреть уже там.
У меня в PS2 все основные падения в malloc_r происходили из-за записи в освобожденный блок.

Страницы: 1 2 3 Следующая »
consoledevФорум

Тема в архиве.