Página 1 de 1

duvida sobre ponteiros para int 32

MensagemEnviado: 21 Fev 2009 00:43
por egb
Mais uma questão que levantei:

Preciso carregar um int32 em quatro registradores com endereços sequenciais. Os registradores do PIC18f458 são:
0xF41 (byte mais alto do valor que quero guardar)
0xF42
0xF43
0xF44 byte mais baixo

Em uma função utilizo codigo equivalente ao mostrado abaixo:
Código: Selecionar todos
  int32 *ptr;
  int32 id = 0x000F000F;

  ptr = 0xF41;  //aponta para o primeiro dos 4 registradores
 
  *ptr = id;    //preenche os 4 registradores com valor de id


Parece razoavel não? Mas ao simular o programa no MPLAB percebi que os valores são armazenados de forma invertida, isto é, o byte menos significativo de ID vai para o 0xF41 e a parte alta vai para 0xF44, então foram carregados: 0x0F000F00


Fiquei confuso. Esse comportamento é normal ?
Se sim, existe alguma forma de fazer a operação inversa(como eu imaginava) utilizando o *int32 ?

Obrigado

MensagemEnviado: 24 Fev 2009 23:04
por chipselect
procure por big endian e little endian, você está esperando um formato de armazenamento de números e o mplab/pic está utilizando outro formato, que você considera "invertido".

MensagemEnviado: 04 Mar 2009 01:02
por egb
Obrigado chipselect!

Realmente não sabia da existencia deste detalhe.
Problema é que não encontrei documentação sobre isso nem no MPLAB nem no CCS, então não sei com certeza qual metodo cada um usa e se é possivel configurar esse parametro de alguma forma.

MensagemEnviado: 04 Mar 2009 07:47
por chipselect
bom dia egb

Eu não conheço direito o mplab nem o C18, mas no manual dele tem a descrição sobre o que você procura no item 2.2 da página 10 do manual do compilador (MPLAB® C18 C COMPILER USER’S GUIDE) que encontrei neste link:

http://gputils.sourceforge.net/51288a.pdf

Texto retirado do referido documento:
"Endianness refers to the ordering of bytes in a multi-byte value. MPLAB C18 stores data in little-endian format. Bytes at lower addresses have lower significance (the value is stored “little-end-first”)."

Compiladores tem o C18, Hitech PICCC e um tal de CCS (algo parecido com isso). Se você está usando o C18 é bom você baixar o "manual do usuário" e o "guia rápido" do seu compilador, tem informações úteis para quem está começando a usar a ferramenta.

Bons estudos.