Variaveis

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Variaveis

Mensagempor veioloko » 01 Dez 2006 07:55

Olá pessoal

Estou com uma dúvida

É melhor eu utilizar variaveis locais ou globais?

Que diferença isso faz no programa ....

Obrigado
veioloko
Byte
 
Mensagens: 348
Registrado em: 10 Nov 2006 06:01
Localização: São Bernardo do Campo

Re: Variaveis

Mensagempor Rodrigo_P_A » 01 Dez 2006 08:00

veioloko escreveu:Olá pessoal

Estou com uma dúvida

É melhor eu utilizar variaveis locais ou globais?

Que diferença isso faz no programa ....

Obrigado



variáveis locais são destruidas ao sair da "função a qual ela pertence" , e não são acessíveis a outras funções

variáveis globais são acessíveis em qualquer parte do programa, e não perdem seu valor ao sairem ou entrarem em outra função.


espero que eu tenha conseguido explicar.
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Mensagempor psycoman » 01 Dez 2006 08:08

esse link tem uma explicação legal.

http://ead1.eee.ufmg.br/cursos/C/aulas/c760.html


Pra mim deve-se evitar variaveis globais pos estas permanecem na memoria ate o fim do programa. :roll:
psycoman
Bit
 
Mensagens: 35
Registrado em: 28 Nov 2006 07:56

Mensagempor Paulo » 01 Dez 2006 08:35

A questão de se utilizar um tipo ou outro depende muito do que vc irá armazenar nessa variável, pois existe os prós e contras de cada tipo, mas caso vc necessite de uma variável apenas dentro da função, ou seja, vc não utilizará ela em outra função ou outro ponto do programa, a variável local é mais recomendada para esse caso, mas tem o problema que quando vc voltar para essa função, essa mesma variável será criada novamente, ou seja, vc perderá o valor que vc tinha anteriormente, mas para esse problema de perder o conteúdo da variável local ao retornar para função a solução é vc criar uma variável local mas do tipo static, isso faz com que ela possua todas características de uma variável local, mas com a diferença de não perder o seu conteúdo e de não ser destruída toda vez que a função terminar, mas ela continua sendo vista apenas dentro da função a que ela pertence, ou seja, os outros pontos do programa não tem acesso a ela.
As variáveis globais são aquelas que podem ser acessadas e utilizadas por qualquer trecho do programa e que não perdem seu conteúdo.

Espero ter ajudado.
Qq dúvida posta aí que a gnt tenta te ajudar.

Até +...
Paulo D.
"Se o teu sonho for maior que ti, Alonga tuas asas, Esgarça os teus medos, Amplia o teu mundo, Dimensiona o infinito, E parte em busca da estrela... " (Trecho de Voa - Ivan Lins / Leda Selma)
Avatar do usuário
Paulo
Byte
 
Mensagens: 421
Registrado em: 07 Nov 2006 07:26

Mensagempor brasilma » 01 Dez 2006 09:23

Fazendo uma analogia com os registradores em assembler, em termos de uso de memória, uma variável Global significa que um registrador seria utilizado apenas para uma função - guardar o valor de uma soma, por exemplo - ou seja, em todo o programa ele serviria apenas para isso.

Já uma variavel Local, seria como um registrador de uso geral, ora ele armazena um valor lido de um port, em outro instante a parcela de uma operação, outro um valor para ser escrito na memória.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor andre_luis » 01 Dez 2006 09:46

As variáveis locais são a característica mais marcante do C, que é o gerenciamento automático da alocacao de memorias.

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor Paulo » 01 Dez 2006 12:53

Concordo com o Andre...
As variáveis locais do C é um grande diferencial da linguagem, pois permite "redução de consumo da memória" e outras coisas mais, mas apesar de ser uma grande vantagem muitas pessoas deixam de usar por falta de conhecimento sobre seu funcionamento ou outros fatores.

Até +...
Paulo D.
"Se o teu sonho for maior que ti, Alonga tuas asas, Esgarça os teus medos, Amplia o teu mundo, Dimensiona o infinito, E parte em busca da estrela... " (Trecho de Voa - Ivan Lins / Leda Selma)
Avatar do usuário
Paulo
Byte
 
Mensagens: 421
Registrado em: 07 Nov 2006 07:26

Mensagempor veioloko » 01 Dez 2006 14:58

Olá!

Creio eu então que se por exemplo eu usar 3 variaveis locais ao invez de 1 variavel global eu estaria tendo mais linhas de codigo certo?

Ok entendi o uso das variaveis, era mais ou menos o que eu tinha em mente.

Qual o limite de variaveis em um programa?

Aproveitando.....
Por exemplo tenho uma rotina de interrupção auxiliar a cada 8ms (usando texas msc1200).
Dentro desta rotina coloco por exemplo:

Código: Selecionar todos
void AUXinterrupts(void) interrupt 6 using 3
{
char tmp; // variavel somente p/ limpar registros
   tmp = MSINT ;
   AI=0 ; // limpa flag de interrupção auxiliar

  if (aux_int_ms<101){
      if(aux_int_ms<=porcentagem){
         saida = 0; // ativa saida
      } else {
         saida = 1;// desativa saida
      }
   aux_int_ms++;
   }else{
   aux_int_ms = 1;   
   }
}


Essa é uma rotina de um "pwm" que fiz.... de 0 a 100 em porcentagem....a cada 8ms.

Ao compilar no ride ele da um warning dizendo que estou modificando registro estando dentor de uma interrupção e pode causar erros e algo do tipo....como faço para tirar esse warning?

Pois gravei o microcontrolador e tem hora que funciona e tem hora que não...rs

Achei que era um problema com as variaveis locais e globais mas acho que não.

Esse foi o erro:
Código: Selecionar todos
WARNING C233 IN LINE 470 OF teste.c : using absolute registers together with in
            -terrupts can cause register corruptions (mixup of register banks)
veioloko
Byte
 
Mensagens: 348
Registrado em: 10 Nov 2006 06:01
Localização: São Bernardo do Campo

Mensagempor andre_luis » 01 Dez 2006 16:09

Retira o "using ___"
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor veioloko » 04 Dez 2006 06:06

Mas ao meu ver não posso tirar o using....pois ele determina qual interrupção auxiliar que é.....

Porque devo retirar? nao entendi...

o erro nao sumiu....mas o programa funcionou acho
veioloko
Byte
 
Mensagens: 348
Registrado em: 10 Nov 2006 06:01
Localização: São Bernardo do Campo


Voltar para 8051

Quem está online

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

x