PONTEIRO C.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor fabim » 22 Out 2008 11:44

certo certo..

ex:
tem uma parte aqui que diz o seguinte.

fulano := função(); tal...

SE função esta ok fulano 0xFF se nok 0x00;

em outra parte eu digo que..

if fulano=true then
begin

end;..

Genericamente sem definir true e false, como ficaria em c.

Se eu entendi.

if (fulano){
// se fulano dif de 0 então true e faz
}

if( !fulano){
// se fulano = 0 então false e faz
}

aí eu posso usar a lógica de true la na função, simplesmente colocando qualquer valor dif de 0.
e lógica false simplesmente dizendo que fulano = 0x00;

é isso mesmo ?

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 ze » 22 Out 2008 11:59

estás correto. uma oportunidade pro else e economizar 1 byte (fulano)
no hitech c a função pode ser
bit funcao() //retorna bit

if (funcao()) {.......}
else {........}



tem uma taquigrafia que faz com ? : que nunca usei. mas pode economizar teclas digitadas
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor msamsoniuk » 22 Out 2008 12:11

nao existe um padrao, isso depende do programador!

existem casos em que zero indica uma falha:

Código: Selecionar todos
FILE *ret;

ret = fopen(arquivo,modo);

if(ret)
{
  tratamento de operacao valida
}
else
{
  tratamento de erro
}


e existem casos em que zero indica sucesso:

Código: Selecionar todos
int ret;

ret = ioctl(descriptor, request);

if(ret)
{
  tratamento de erro
}
else
{
  tratamento de operacao valida
}


no primeiro caso a funcao retorna sempre um descritor de arquivos valido valido ou zero, em caso de falha. no segundo caso a funcao normalmente nunca retorna nada, pq a passagem de parametros eh por referencia, entao ela retorna zero quando tem sucesso e um valor em caso de falha, que encodifica um erro.

mas perae, pq retornar zero como sucesso ?! eh facil achar justificativas!

o if em um sistema operacional normalmente avalia 0 como verdadeiro, por exemplo, o seguinte codigo de shell script:

Código: Selecionar todos
if grep $valor $arquivo
then
  echo achei $valor em $arquivo
fi


o main() de grep retorna 0 se ele encontra algo e um valor diferente se ele nao encontra ou se ocorre algum erro e isso eh padrao universal em todos os programas em C.

e agora ? nao tem regra universal. vc tem que ler a funcao e entender se ela retorna zero indicando sucesso ou falha.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor msamsoniuk » 22 Out 2008 12:19

economia meio sem logica, visto que nenhum processador endereca bits individualmente na memoria ou em registros... ele vai continuar gastando um byte na memoria ou um registro para armazenar o resultado do retorno! de quebra, ainda leva a punicao de nao tornar o codigo portavel hehehe :)

lellis escreveu:estás correto. uma oportunidade pro else e economizar 1 byte (fulano)
no hitech c a função pode ser
bit funcao() //retorna bit

if (funcao()) {.......}
else {........}

tem uma taquigrafia que faz com ? : que nunca usei. mas pode economizar teclas digitadas
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor fabim » 22 Out 2008 12:22

á tá, isto eu sei.rs tks
só queria confirmar os testes..

Ex este programa tem um trecho que eu faço um and em alguns bits..

Se tudo zerado = verdadeiro,
porque o wndow tem que estar em 0,

se algo dif 0 = falso
houve algum erro na transição de dados..

Bem lega a maleabilidade.

ficaria assim.

if(!comp){
//ok sem erros
}

if(comp){
nok houve algum erro inesperado
}

Caraca meu, essas minhas duvidas estão ajudando um monte de pessoas, rsrs
Eu tamém..srs

certo certo, agora eu entendi.
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 ze » 22 Out 2008 13:03

Marcelo Samsoniuk escreveu:economia meio sem logica, visto que nenhum processador endereca bits individualmente na memoria ou em registros...

até hoje de manhã o 8051 "endereçava" bits sim. Mas sei lá. tudo evolui tão rápido...
o resultado do retorno o compilador se vira. provavelmente ele vai compartilhar com um byte de outra função qualquer. eu é num vou comer um byte pra isso.rs . Amigo aqui no submundo dos pic10f o cada byte vale uma fortuna. Vale 8X mais que um bit. Aí na camada superior sei lá....que qué isso "tera byte" mesmo ??? rs

good boy....
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor msamsoniuk » 22 Out 2008 19:31

ohh desculpe! eu queria na verdade dizer "nenhum processador moderno endereca bits individualmente"! foi mal! hahaha :D

lellis escreveu:
Marcelo Samsoniuk escreveu:economia meio sem logica, visto que nenhum processador endereca bits individualmente na memoria ou em registros...

até hoje de manhã o 8051 "endereçava" bits sim. Mas sei lá. tudo evolui tão rápido...
o resultado do retorno o compilador se vira. provavelmente ele vai compartilhar com um byte de outra função qualquer. eu é num vou comer um byte pra isso.rs . Amigo aqui no submundo dos pic10f o cada byte vale uma fortuna. Vale 8X mais que um bit. Aí na camada superior sei lá....que qué isso "tera byte" mesmo ??? rs

good boy....
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor barboza » 22 Out 2008 22:17

Poxa Marcelo!! Os 8051 são guerreiros..... Não faz muito tempo que usei os Silabs C8051F040....... rs


Lelis!

Se você fizer a comparação diretamente com a função não ocupará RAM e se usar variaves locais nas funções, provavelmente o compilador (se for bom) irá usar registradores para isso. Ou se quiser, dependendo do compilador você pode forçar isso com a declaração register na variável. (lembro de usar isso no keil com 8015).
Código: Selecionar todos

int main()
{
   if ( funcao() )
   {
      // faça algo aqui
   }
   else
   {
     // faça outra coisa aqui
   }
}


ou


int main()
{
   u8 u8_ret;

   u8_ret = funcao();

   // faça algumas coisas se precisar
 
   if (u8_ret )
   {
      // faça algo aqui
   }
   else
   {
     // faça outra coisa aqui
   }
}


u8 funcao()
{
   return alguma_coisa;
}
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor fabim » 23 Out 2008 08:12

1° ponteiros, risorvidos..

2° definições de tipos, risorvidos..

3° função switch, risorvidos.

4° uso de ";" no C, risorvidos.

5° uso do ++ no C. risorvidos

6° tratamento de boolean no C. risorvidos

7° montagem da estrutura de um programa com includes ".C" e ".H" .



Com a ajuda dos amigos, que são excelentes prof´s e o melhor, explicam tudo de forma simplória sem rodeios e em um linguajar didático.
Acho que eu e o lellis estamos contagiando o pessoal, sinal que nossa forma é simples. Parei um pouco com a sacanagem de escrever 100% na putaria.
Pois bem, depois desta aula quase completa de algumas chatisses do C que agora não são mais chatisses e sim legalsisses.rsrs



Pois bem eu estou meio confuso sobre como montar a estrutura.
O cabra da peste do jean, me disse que o .H serve para organizar o fonte de forma a ficar mais simples as edições e implementações futuras.
Não é obrigatório a criação, mais deixa tudo mais bunitim e simples de outros entenderem se estiver separado ao invés de uma salada..

Question..
No include .H, eu posso, ou apenas posso inserir diretivas como constantes e var´s.??
Quando eu falo em Var´s eu falo no contexto geral da diretiva, sendo.
Struct´s.
union´s.
arrays.
simples var´s.
fazer referencia a constantes de var´s no hardware.
Exemplo:
unsigned char BDEP0OUTStat absolute 0x400; volatile;

Sobre constantes, devo ou posso definir apenas constantes simples no .H ou posso também definir estrutura de array de constantes.
EX:
unsigned char const USB_DTSEN = 0x08; <<
E

Código: Selecionar todos
 unsigned char const HID_Descriptor[9]{
       HIDLen,              // descriptor size (9 bytes)
       USB_HID_SET_REPORT,  // descriptor type (HID)
       0x00,
   0x01,                // HID class release number (1.00)
       0x00,                // Localized country code (none)
       0x01,                // # of HID class descriptor to follow (1)
       0x22,                // Report descriptor type (HID)
       ReportDescriptorLenLo,   // length of report descriptor (low)
       ReportDescriptorLenHi;  // length of report descriptor (high)
};


Estou perguntando, pois como uso apenas o mikoC, não sei se os ANSI entendem tudos iguais... Por causa da portabilidade.

Tks. {}´s

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 ze » 23 Out 2008 08:49

o marcelo sansung já passou do mundo da lua e está nas estrelas e galáxias e nóis aqui nos quarks e eletrons. ser uma grande estrela tem seu lado bom. um dia cai em si. lado ruim é que muito brilho não se enxerga e que pode se transformar num buraco negro engole tudo. meu quark quer distância disso.rs. well boa sorte com seus anusluz galáticos a frente enquanto vamos por trás com os quarks e bits. aê se precisar de uma força dou um múon no C. rs

barboza grato por corroborar

fabim até onde eu sabia o include é como tudo aquilo digitado dentro do fonte. então pode por tudo dentro (!). do tamanho tipo qualidade que quiser e couber no C. Não existem regras específicas. Apenas como seu amigo disse recomendações. Tô com pregui de ler as msgs anteriores mas não sei se já lhe indiquei http://www2.eletronica.org/artigos/elet ... s-praticas do meu amigo roberto.
devido a sua experiência, a introdução no C parece que num tá dificio. rs
tá pensando que é de graça?? tô precisando de um pisca led com usb & pic. aprende e me ensina!!!
abs & boa sorte

switch(link)
{
case coerente: return obrigado;break;
case incoerente: return NULL;break;
case inutil_pra_voce: util_proto(obrigado);break;
default: return obrigado;
}

link=#include //sem comentário
de nada
Editado pela última vez por ze em 23 Out 2008 10:40, em um total de 1 vez.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor fabim » 23 Out 2008 09:13

maninho, usb ja virou agua de batata pra mim.rs
CDC, HID, etc
neste caso, eu peguei um fonte super maneiro do dany que foi feito para o PASCAL.
E portei a estrutura lógica para C, só montar agora e começar a compilar e tirar os gatos..

Ou, nada de link´s...

De uma prévia do que eu perguntei aqui mesmo.
Estamos ajudando muito, alguns iniciantes em C para uControlador..

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 joao » 23 Out 2008 09:39

minha opiniao.

Vc pode fazer tudo em apenas 1 arquivo .c
Vc pode colocar apenas as funcoes no .c e colocar as declarações no .h
Vc pode colocar tambem funcoes em .h(pelo menos para o comp), mas vc precisa ter um .c para poder compilar.
Resumindo, dá para fazer da maneira que vc quiser! Ou quase!

Mas de modo geral é melhor colocar as funcoes no .c e as declarações das funcoes/variaveis globais no .h

Desta forma, vc poderá ter outro arquivo .c que irá chamar as funcoes de outro arquivo .c
para isso vc dá um
#include "arquivo.h"

Exemplo:
//main.c
Código: Selecionar todos
#include "main.h"
#include "soma.h"

void main()
{
    int a = multiplica(2,2);
    printf("%d",a);
}

int multiplica(int a, int b) //Note que a funcao está embaixo do main
{
    int resultado =0;
    while(b)
    {
         resultado = soma(resultado,a);
         b--;
    }
    return resultado;
}


//main.h
Código: Selecionar todos
int multiplica(int a, int b); //prototipo da funcao



-------------
//soma.c
Código: Selecionar todos
#include "soma.h"

int soma(int a,int b)
{
    return a+b;
}


//soma.h
Código: Selecionar todos
int soma(int a,int b);


Como vc pode ver, soma só é "conhecida" pelo main pq vc declarou o prototipo dela no .h e fez um include disto no main.c

Também vc pode ver que eu criei a funcao "multiplica" depois do main. Se não tivesse feito o prototipo no .h e nem no .c, teria dado erro, pq vc não criou antes do main. Como o header é lido antes do código, vc pode fazer isso que eu fiz, que é criar outras funcoes embaixo do main.

[]'s
Avatar do usuário
joao
Byte
 
Mensagens: 463
Registrado em: 17 Out 2006 08:21

Mensagempor fabim » 23 Out 2008 11:28

ou seja, para ficar mais legivél e facil de interpretar.

*.C = codigos de processamentos, funções em geral
*.H = definições de tipos, constantes, variaveis

No *.C eu chamo os *.H ...

Isso ?

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 Jorge_Francisco » 23 Out 2008 11:42

Isso mesmo. Mas eu prefiro colocar as funções no .h . Até porque fica mais reusável.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor msamsoniuk » 23 Out 2008 11:49

hmmmmm acho que entendi o "recado"... cada mcu no seu quadrado neh ? vou me restringir futuramente apenas ao topico "freescale", valeu pela dica e desculpe postar erroneamente aqui! :)

lellis escreveu:o marcelo sansung já passou do mundo da lua e está nas estrelas e galáxias e nóis aqui nos quarks e eletrons. ser uma grande estrela tem seu lado bom. um dia cai em si. lado ruim é que muito brilho não se enxerga e que pode se transformar num buraco negro engole tudo. meu quark quer distância disso.rs. well boa sorte com seus anusluz galáticos a frente enquanto vamos por trás com os quarks e bits. aê se precisar de uma força dou um múon no C. rs
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

AnteriorPróximo

Voltar para PIC

Quem está online

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

x