duvida sobre ponteiros para int 32

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

duvida sobre ponteiros para int 32

Mensagempor egb » 21 Fev 2009 00:43

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
egb
Bit
 
Mensagens: 12
Registrado em: 27 Mar 2007 15:05

Mensagempor chipselect » 24 Fev 2009 23:04

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".
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor egb » 04 Mar 2009 01:02

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.
egb
Bit
 
Mensagens: 12
Registrado em: 27 Mar 2007 15:05

Mensagempor chipselect » 04 Mar 2009 07:47

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.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

cron

x