AJUDA MPLAB + C18.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor fabim » 05 Mai 2009 12:41

RESOLVIDO, FOI FALTA DE ATENÇÃO MINHA...

Código: Selecionar todos
 volatile ram unsigned short    BDEP0OUTStat  = 0x0400;
volatile ram unsigned short    BDEP0OUTCnt   = 0x0401;
volatile ram unsigned int      BDEP0OUTAdr   = 0x0402;

volatile ram unsigned short    BDEP0INStat   = 0x0404;
volatile ram unsigned short    BDEP0INCnt    = 0x0405;
volatile ram unsigned int      BDEP0INAdr    = 0x0406;

volatile ram unsigned short    BDEP1OUTStat  = 0x0408;
volatile ram unsigned short    BDEP1OUTCnt   = 0x0409;
volatile ram unsigned int      BDEP1OUTAdr   = 0x040A;

volatile ram unsigned short    BDEP1INStat   = 0x040C;
volatile ram unsigned short    BDEP1INCnt    = 0x040D;
volatile ram unsigned int      BDEP1INAdr    = 0x040E;


ABRAÇOS, FABIM
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor fabim » 07 Mai 2009 13:52

Conversão impicita para o C18.

Error [1131] type mismatch in assignment

O seguinte.
unsigned int BDEP1OUTAdr;
unsigned short *SrcPtr;

SrcPtr = BDEP1OUTAdr;<<<

BDEP1OUTAdr = pilha de comunicação usb endereço de ram 16 bits.

SrcPtr = ponteiro para variavel byte, para transferir dados de buffer ou outros para pontos solicitados.

No mikroC, o compilador entende perfeitamente o que eu estou querendo fazer, eu estou colocando o endereço de ram que está dentro de BDEP1OUTAdr, no endereçamento de ponteiro SrcPtr.

Só que o C18 é burrinho pra isso, eu queria saber se existe algo simplório para o compilador entender o que eu quero fazer..

fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Sergio38br » 07 Mai 2009 17:46

em C ANSI

Código: Selecionar todos
13.4 Atribuindo valor a uma variável ponteiro

Como o ponteiro é uma variável que armazena um endereço de memória, você deverá atribuir a uma variável ponteiro um endereço de memória. Exemplo:

/* atribuindo valor a uma variável ponteiro */

#include <stdio.h>

int main()
  {
    int idade = 35;
    int *ptr_idade;

    ptr_idade = &idade; /* foi atribuído o endereço da variável
                           idade a variável ponteiro ptr_idade.
                           Observe o uso do operador & que devolve
                           o endereço de memória da variável
                           idade. */

    printf("O valor da variável idade é %d\n",idade);
    printf("O endereço da variável idade é %x\n",&idade);
    printf("O valor da variável ponteiro ptr_idade é %x\n",ptr_idade);

    return(0);
  }


http://br.geocities.com/sdiasneto/c_int/ponteiros.htm

[ ]'s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor ivan » 07 Mai 2009 20:47

Fabim wrote:
Código: Selecionar todos
Error [1131] type mismatch in assignment

O seguinte.
unsigned int BDEP1OUTAdr;
unsigned short *SrcPtr;

SrcPtr = BDEP1OUTAdr;


No caso SrcPtr é um unsigned short e o BDEP1OUTAdr é unsigned int.
Ou vc faz um casting SrcPtr = (unsigned short*) BDP...;
Ou redefine os tipos das variáveis em questão.

Abs.
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor fabim » 07 Mai 2009 22:35

é tios então dessa nem vocês sabiam...

O PIC 18F, UTILIZA 16 BITS PARA MAPEAR A RAM E ROM..

TABLH TABLL

o que eu estou fazendo aí, é pegar um VALOR VARIAVEL de endereço de ram, e colocando em um ponteiro.. tipo byte..

O MIKROC nem deu bola pra isso... rodou de primeirissima..

fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Sergio38br » 07 Mai 2009 23:10

tem razão sobrinho se... short naum fosse de 16 bits....

Table: Integer Data Type Sizes and Limits
Type Size Minimum Maximum
short 16 bits -32,768 32,767
unsigned short 16 bits 0 65,535

[ ]`s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor fabim » 08 Mai 2009 08:02

Sergim assim ó..

O ponteiro tem dois componentes, um estático um em base de makro.
Vou dar o exemplo pra um short por exemplo..

unsigned short *ponto_data;

Componentes da estrutura.
*ponto_data
" = o ponto de manipulação de variavies tipo byte, utiliza 1 byte, "

ponto_data
" = o produto de endereçamento de varivel tipo byte utiliza 2 bytes TBH e TBL"

agóra.

_u int variavel;
_u short *ponto_data;
_u short produto, produtob;

main(){
variavel = &produto;
// quando eu olho no asm, ele realmente está alocando 16 bits endereçamento

ponto_data = variavel;
// point of data, deveria aceitar o valor dentro de variavel, já que são compativeis, pois os dois utilizam peso de 16 bits...

produtob = *produto;
//aqui propriamente dito, eu pego produto que o ponteiro estava apontando, e aloco dentro de produtob.


O C18 é muito burrinho para algumas coisas, ele não entendende conversão implicita, dentre outras... Ou seja o cabra vê estrela pra fazer alguma coisa funcionar perfeitamente, alem de ficar enorme de grande..

fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor HC908 » 08 Mai 2009 08:27

ROM
fabim escreveu:é tios então dessa nem vocês sabiam...

O PIC 18F, UTILIZA 16 BITS PARA MAPEAR A RAM E ROM..

TABLH TABLL

o que eu estou fazendo aí, é pegar um VALOR VARIAVEL de endereço de ram, e colocando em um ponteiro.. tipo byte..

O MIKROC nem deu bola pra isso... rodou de primeirissima..

fabim
HC908
Byte
 
Mensagens: 248
Registrado em: 26 Mar 2007 09:55

Mensagempor fabim » 08 Mai 2009 08:46

é isso... me confundi na hora de expinicar..rsrs
Por isso lá encima eu disse que para ram, tem o estatico e makro.

acho que assim fica mais compreensivel.


MOVFF FARG_USB_HID_Write+0, FSR0L

MOVFF FARG_USB_HID_Write+1, FSR0H

MOVFF POSTINC0, STACK_0

MOVFF USB_HID_Write_DstPtr_L0, FSR1L

MOVFF USB_HID_Write_DstPtr_L0+1, FSR1H

MOVFF STACK_0, POSTINC1

MAis mió di bão né ?
Acho que vou ter que apelar para uma makro, e ainda ficar olhando o valor do endereço pra setar o banco.. não confio naque force bank do 18f... da uns erros estranhos..

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor ivan » 08 Mai 2009 12:08

Código: Selecionar todos
#include <p18cxxx.h>

#include <stdio.h>
#include <stdlib.h>

void main(void)   {

   unsigned int testeInt = 0xff;
   unsigned short* ptr;

   ptr = (unsigned short*)testeInt;
   
}

Make: The target "C:\Projetos\TstC18\main.o" is out of date.
Executing: "C:\MCC18\bin\mcc18.exe" -p=18F4431 "main.c" -fo="main.o" -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
Make: The target "C:\Projetos\TstC18\ttptr.cof" is out of date.
Executing: "C:\MCC18\bin\mplink.exe" /l"C:\MCC18\lib" "C:\MCC18\lkr\18f4431i.lkr" "C:\Projetos\TstC18\main.o" /o"ttptr.cof" /M"ttptr.map" /W
MPLINK 4.30.01, Linker
Copyright (c) 2009 Microchip Technology Inc.
Errors    : 0

MP2HEX 4.30.01, COFF to HEX File Converter
Copyright (c) 2009 Microchip Technology Inc.
Errors    : 0

Loaded C:\Projetos\TstC18\ttptr.cof.
BUILD SUCCEEDED: Fri May 08 12:06:53 2009

"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor fabim » 09 Mai 2009 02:03

void main(void) {

unsigned int testeInt = 0xff;
unsigned short* ptr;

ptr = (unsigned short*)testeInt;

}

quer que eu mostre o erro ou ja achou ?

rsrs
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor ivan » 09 Mai 2009 23:27

Intão, mostre o erro UAI! Assim eu aprendo + uma...
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor fabim » 10 Mai 2009 12:59

void main(void) {

unsigned int testeInt = 0xff;
unsigned short* ptr; *// dado = 1 byte, ponteiro = 2 bytes.

ptr = (unsigned short*)testeInt;//converte inplicito de 16 para 8 bits
// pegando apenas o LSB
// e aloca em um ponteiro que necessita
// de 16 bits
// pois a ram vai do valor 0x0210 até + 512
}

Tendeu ?

Mais ja desisti viu caras, esse C18 MPLAB é uma MERCADORIA de ruim, burro pra dedel, nem usando comandos simples, ele não entende..

abraços

fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor ivan » 10 Mai 2009 15:41

Código: Selecionar todos
 
Data Types and Limits
Integer Types
Floating-point Types
Integer Types
The MPLAB C18 compiler supports the standard ANSI-defined integer types. The ranges of the standard integer types are documented in Table: Integer Data Type Sizes and Limits. In addition, MPLAB C18 supports a 24-bit integer type short long int (or long short int), in both a signed and unsigned variety. The ranges of this type are also documented in Table: Integer Data Type Sizes and Limits.

Table: Integer Data Type Sizes and Limits
 Type                            Size              Minimum            Maximum 
char(1,2)                       8 bits               -128                   127 
signed char                    8 bits               -128                   127 
unsigned char                8 bits               0                        255 

int                                 16 bits             -32,768              32,767 
unsigned int                   16 bits             0                        65,535 
short                             16 bits             -32,768               32,767 
unsigned short               16 bits             0                        65,535 

short long                      24 bits             -8,388,608          8,388,607 
unsigned short long        24 bits             0                        16,777,215 
long                              32 bits            -2,147,483,648     2,147,483,647 
unsigned long                32 bits             0                        4,294,967,295 

Note
1: A plain char is signed by default.
2: A plain char may be unsigned by default via the -k command-line option. 


--------------------------------------------------------------------------------
Microchip Technology Inc.
Microchip Web Site
Voice: (480) 792-7200
Fax: (480) 792-7277
Microchip Technical Support

Help Updated: 06/09/08
16:13:00
 
 



PS: Um ponteiro, por definição da linguagem C em qq compilador, é sempre um int.
http://faq.zanvar.in/size-of-pointer/
Editado pela última vez por ivan em 10 Mai 2009 16:36, em um total de 1 vez.
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor fabim » 10 Mai 2009 16:27

PS>: Unsigned int.

Dependendo do UC, ele utiliza 24 bits e não 16...
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

AnteriorPróximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x