Dúvida C18

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor tcpipchip » 15 Dez 2011 17:09

use cast

O C assume que 1 e 2 sao tipo inteiros..
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor ÁgioFelipe » 16 Dez 2011 09:56

tcpipchip escreveu:use cast

O C assume que 1 e 2 sao tipo inteiros..


O que é cast?
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor xultz » 16 Dez 2011 10:47

Cast (ou typecast) é mudança de um tipo de variável para outra. Já passei por perrengues deste tipo que você passou (naquela vez, o polesapart que me salvou).
O compilador, estupidamente considera que tua linha
freq = 1/2;
o mesmo que
freq = (int)1 / (int)2;
e como resultado tem um int, que ele arredonda de 0.5 para 0, muda para float e joga dentro de freq. Louco, mas é isso que ele faz.
Se você fizer
freq = 1.0/2.0;
ele vai sacar que os valores são float (porque têm uma casa decimal, mesmo que ela não sirva para nada).
Ou se fizer
freq = (float)1 / (float)2;
ele também vai operar tudo como float.

Tem coisas que só a linguagem C faz por você...
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor ÁgioFelipe » 16 Dez 2011 19:07

Muito obrigado xultz pelos esclarecimentos.
Só mais uma coisa, no Watch do MPLab, qual a diferença entre o formato MCHP float e o IEEE float, só consegui observar minha variável float colocando ela no formato IEEE float.
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor xultz » 17 Dez 2011 12:20

Pelo que entendi, está só na ordem dos bytes. Aqui tem dois textos para você ler, comparar e se divertir à beça:
http://www.ccsinfo.com/faq.php?page=mchp_float_format
http://en.wikipedia.org/wiki/IEEE_754-1985
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor ÁgioFelipe » 25 Mar 2012 12:36

Olá amigos, venho mais uma vez com um problema no C18 para tentarmos solucionar.

Estou com erro de compilação em um projeto e descobri que é estouro da memória RAM, qdo declaro essas variáveis:

Código: Selecionar todos
unsigned char texto[] = "Eleicoes ";
unsigned char texto1[] = "Para iniciar toque na tela ou aperte o botao 1";
unsigned char texto2[] = "Selecione o candidato";
unsigned char candidato1[]=" Candidato nº1 ";
unsigned char candidato2[]=" Candidato nº2 ";
unsigned char candidato3[]=" Candidato nº3 ";
unsigned char candidato4[]=" Candidato nº4 ";
unsigned char candidato5[]=" Candidato nº5 ";
unsigned char candidato6[]=" Candidato nº6 ";
unsigned char instrucao[] = "Proxima tela";
unsigned char confirmacao1[] = "Deseja votar no candidato 1";
//unsigned char confirmacao2[] = "Deseja votar no candidato 2";
//unsigned char confirmacao3[] = "Deseja votar no candidato 3";
//unsigned char confirmacao4[] = "Deseja votar no candidato 4";
//unsigned char confirmacao5[] = "Deseja votar no candidato 5";
//unsigned char confirmacao6[] = "Deseja votar no candidato 6";
//unsigned char conclusao1[] = "Voto completado com sucesso!";

Percebi que se colocar algumas dessas variáveis em comentário eu consigo compilar normalmente, estou usando o 18F4550, qual o problema na declaração de tais variáveis? Não é possível que só com isso estoure a memória de dados do PIC.
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor andre_luis » 25 Mar 2012 15:23

declare as variáveis como constante.

Código: Selecionar todos
const unsigned char candidatoX[]=" Candidato nºX ";



+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor fabim » 25 Mar 2012 17:52

Minha nossa isto é blasfêmia !!! Até para um pic é blasfêmia!!!
LerdoFelipe.
Mesmo fazendo tudo na flash ou ram que seja, é de praxe quando criar strings onde indicativos de estados se repetem, você escreve apenas uma vez, e depois chama o candidato 1 ou 2 etc.
Faz assim.
const char candidato1[]={"filizbrino chipisquinho da silvéra"};

Igual nosso amigo indicou, mais num faz essa coisa feia ai não, tu participa do fórum a muito tempo pra ficar profanando a programação.
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 ÁgioFelipe » 26 Mar 2012 09:59

Valeu pessoal!
Alguém por favor deleta essa ruma de posts repetidos.

Ó Mestre Fabim, mil perdões pela blasfêmia... :D
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor ze » 26 Mar 2012 13:11

isso me fez lembrar. em determinado país europeu cujo idioma é quase igual ao nosso, a lista telefônica só tem uma letra.

T
"telefone do agio felipe 242424"
"telefone do antonio 242423"
"telefone do manuel 242324"
e por aí vai
(pode apagar isso também)
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Anterior

Voltar para PIC

Quem está online

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

x