problema de memcpy en ARMcc

3

Estoy enfrentando un problema de bytes que se copian en orden inverso cuando compilo el código usando ARMCC. Por ejemplo:

int int corto; short int src = 0x0010; memcpy (& dest, & src, sizeof (short int));

El valor en el destino cuando miro en la pantalla de memoria se muestra como 10 00. Me pregunto por qué no coloca los valores en los bytes apropiados en el destino. Para superar esto, tengo que usar una matriz y copiar el byte por byte.

¿Hay una solución a este problema? O es algún problema en mi código.

    
pregunta Abhijit K Rao

2 respuestas

4

Tienes tu brazo en modo little endian, lo que significa que almacena el byte menos significativo en la dirección inferior, y "lee hacia atrás" a la percepción humana en un volcado de memoria por bytes.

Mira un volcado de memoria del valor original y verás que es de la misma manera.

En realidad, no hay ningún problema (a menos que en algún momento se esté comunicando con un sistema big-endian o mediante un protocolo que use ese estándar, en cuyo caso debe cambiar por byte).

    
respondido por el Chris Stratton
1

La mayoría de los procesadores ARM (v3 y posteriores) son en realidad bi-endian . Puede alimentar la opción -bigend a ARMCC para compilar en big endian para que el LSB se coloque en la dirección de memoria más alta.

Lea man para obtener más detalles.

Asegúrese de que el procesador en particular que está utilizando admita esta función. Es posible que deba cambiar alguna otra opción de configuración para que esto funcione correctamente.

    
respondido por el embedded.kyle

Lea otras preguntas en las etiquetas