Ver la versión completa : Endianness en la GP2X?
Puck2099
21/03/2006, 16:09
Hola,
He estado buscando información en los documentos técnicos del MMSP2 de la GP2X y creo entender que se puede seleccionar el Endianness de los micros con solo cambiar un/unos registros.
¿Alguien sabe por defecto si los micros se comportan como big-endian o little-endian?
Es que si son big-endian quizá vengan por ahí ciertos problemas que estoy teniendo al portar cosas de PC (little-endian)...
Gracias :brindis:
Los ARM por defecto son little-endian al igual que el x86, y nuestra GP2X no es una excepción ;)
Los ARM por defecto son little-endian al igual que el x86, y nuestra GP2X no es una excepción ;)Seguro? No era esta la razon por la que cuando porto Exult cada vez que pasaba el mouse por encima la imagen esta se corrompia?
Puck, el autor no te explico exactamente que ocurria?
Puck2099
21/03/2006, 16:43
Seguro? No era esta la razon por la que cuando porto Exult cada vez que pasaba el mouse por encima la imagen esta se corrompia?
Puck, el autor no te explico exactamente que ocurria?
No, me dijo que probara a cambiar unas macros, pero no me explicó exactamente qué le pasaba, aunque creo que me dijo que se debía a la Endianness...
< - >
Uhm, acabo de encontrar el log de la conversación en el irc y mira lo que fallaba en el Exult:
[21:31:03] <wjp> does the gp2x have any issues with unaligned memory access?
[21:45:31] <wjp> there are two implementations of that function; one (the one between the #if and the #else) is (potentially) a bit faster on some machines but can use unaligned 32bit memory access, while the other (between #else and #endif) is safer
¿Alguien podría explicarme a qué se refiere con memoria no alineada?
Gracias
¿Alguien podría explicarme a qué se refiere con memoria no alineada?
Básicamente se trata de que la información en la memoria se almacena en registros de 32 bits. Cuando la memoria está alineada, todas las variables, ya sean de 8, 16 o 32 bits se almacenan en un único registro, por lo que se puede cargar el dato en un único acceso a memoria.
En memoria no alineada puede darse el caso de que un dato de 32 bits se almacene en 2 registros, ocupando la última mitad de uno y la primera mitad del siguiente. En este caso, en la mayoría de las máquinas es necesario hacer 2 accesos a memoria para traer el dato.
En la imagen de ejemplo, se accede a un dato de 4 bytes que comienza en la dirección 1 y se extiende hasta la dirección 4, que ya está en la siguiente linea de memoria.
http://www-128.ibm.com/developerworks/library/pa-dalign/unalignedAccess.jpg
hermes PS2R
09/04/2006, 00:18
¿Alguien podría explicarme a qué se refiere con memoria no alineada?
Gracias
Lo explique el otro dia en un hilo que abriste tu.
Los ARM, al igual que pasa con los MIPS, no pueden acceder a datos desalineados. Eso quiere decir que si una instruccion lee o escribe un dato de 4 bytes, el direccionamiento en memoria debe ser con dicha alineacion (0,4,8,12,16...). Lo mismo si es un acceso de 2 bytes, etc.
Por eso hay que tener cuidado con los structs especialmente, para
que los datos nunca queden desalineados y provoquen excepciones.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions Inc. All rights reserved.