variável> voláteis pedido - para os recursos

S

sivamit

Guest
Oi por favor alguém pode enviar ou fornecer alguns detalhes sobre sua chave volátil e aplicações ..?

Obrigado

 
Palavras-chave volátil é usada para especificar que um local de memória (variável) pode estar sujeito a alterações do seu valor devido a causas fora do controle da execução SW.
Um uso típico é o de definir as interfaces com a memória mapeada periféricos, onde você tem um conjunto de posições de memória usado para trocar dados com o HW.
Outro uso do especificador volátil é quando você quer evitar que o compilador realiza otimizações em algumas variáveis.Como exemplo definir uma variável, mas não usá-lo no SW: quando você compilar o arquivo o compilador reconhece que a variável não é usado e cortá-lo fora do executável, ao contrário, se você especificar a palavra-chave volatile o compilador não é capaz de fazer qualquer suposição sobre o seu uso (que poderia ser alterado por fatores externos) e deixá-lo no código.Normalmente você pode usar o especificador volátil para definir variáveis dummy para evitar a otimização do compilador em pequena porção do código (por exemplo, para colocar ponto de interrupção em um loop).

Atenciosamente
Mowgli

 
Outra razão para usar variáveis voláteis é quando você estiver usando uma interrupção para atualizar uma variável global que é utilizado fora da interrupção.Por exemplo, poderá ser uma variável usada para manter o segundo.Considere o seguinte:

X = segundo;
outro código;
outro código;
outro código;
y = segundos;

Segundo, se não é declarada como volatile o compilador provavelmente irá manter o valor de segundos no registo depois de definir o valor de x e ele vai usar o mesmo valor para definir y.Isso resultará em um erro se a interrupção atualizado em segundo entre as linhas de código.Definição segundo a volatilidade irá forçar o compilador para supor que segundo poderia ter sido mudado por algo externo para a secção de código atual.Será, portanto, ler o segundo variável novamente na fixação y.

Há maneiras melhores de curso para escrever este tipo de código

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Sorrir" border="0" />

isto é apenas para ilustrar o ponto

 
Esta chave é utilizada principalmente em fins de otimização.

A volatilidade é uma variável que pode mudar inesperadamente.Consequentemente, o compilador não pode fazer suposições sobre o valor da variável.Em particular, o otimizador deve ter cuidado para recarregar o tempo de cada variável que é utilizado em vez de realizar uma cópia de um registo.Exemplos de variáveis voláteis são os seguintes:

* Registros Hardware em periféricos (por exemplo, registros, status)
* Non-variáveis automáticas referenciados dentro de uma interrupção de serviço de rotina
* Variáveis partilhadas por várias tarefas em uma aplicação multi-threaded

Embedded lidar com sistemas de hardware, interrupções, SOTRs, e assim por diante.Todas estas exigem variáveis voláteis.Incapacidade de compreender o conceito de volatilidade vai levar ao desastre.

 
Melhor explicação para a volatilidade está disponível http://www.embedded.com/story/OEG20010615S0107 @

 
Em aplicações multi threaded também a palavra-chave volátil é usada para atualizar as variáveis golabal que são usados em ambos os segmentos.

Para ser claro threda Suponha que dois estão em execução.Se o primeiro segmento está usando variável X, mas durante a execução da fatia de tempo pode mudar para segunda discussão e ao valor X pode chage nessa discussão.Então, novamente, quando fatia de tempo está de volta ao primeiro segmento do Varible deve conter o valor mais recente.

Então se você declarar a variável volátil será referesh a localização de memória mais rápido possível com o valor mais recente.

Esta é a minha experiência prática.

 
Breve descrição:
Durante a execução de cada utilização do valor de uma variável voláteis, o titular do valor da variável é recarregado a partir da memória física real.

 
características de variáveis voláteis.

1.Volátil é uma variável global.
2.tem 1 byte de instrução
3.Compilador não pode optimizar a variável.
4.tipo de vazamento não é permitido.
5.Valor pode ser modificado pelos portos, Hardware, interrupções, portas seriais.
6.Sempre alocado na memória Heap.
7.Localização de memória permanente é atribuída por ele.

Seu tópico muito bom para discutir.Posso adicionar mais pontos para isso.Se você pode compreender os pontos acima corretamente.

 
ckshivaram escreveu:

características de variáveis voláteis.1.
Volátil é uma variável global.

2.
tem 1 byte de instrução

3.
Compilador não pode optimizar a variável.

4.
carcaça tipo não é permitido.

5.
Valor pode ser modificado pelos portos, Hardware, interrupções, portas seriais.

6.
Sempre alocado na memória Heap.

7.
Localização de memória permanente é atribuída por ele.Seu tópico muito bom para discutir.
Posso adicionar mais pontos para isso.
Se você pode compreender os pontos acima corretamente.
 
Quando usamos a palavra Optimize, queremos dizer que a variável na memória só pode ser alterada pelo compilador sempre que o código é executado.Modificadores voláteis não podem ser otimizadas pelo compilador, Durante o processo de ligação de que o código é atribuído a memória física na memória interna.assim durante o processo de ligação de geração (de. lnk durante a compilação), estas variáveis são colocadas na pilha em vez da memória principal.Compilador não pode modificar a variável de até menos que uma cópia é copiado para a RAM para execução.Assim, o compilador aloca uma localização de memória diferente para a variável.Estes são chamados de un localização optimizada.das variáveis de localização não são dependentes do compilador para alterar o valor.em vez de interrupção, portas seriais, hardware é dada permissão para acessar essas variáveis sempre quando eles levantam uma solicitação.
Quando uma memória é optimizada, então a vida dessa variável só é limitado até que a função executa então é destruído, mas volatilidade não são destruídas, mas mantê-la em valor até que não haja qualquer alteração feita por entidades externas.Sempre que essas variáveis são acessadas somente o valor atualizado é visto no registo.

Enviando um exemplo, após isso_O melhor exemplo é RTC (Real Time Clock).no PC.mesmo quando o PC é desligado, e depois reiniciado, o relógio as últimas atualizações de hora atual.Adicionado após 9 minutos:por exemplo:
char tempo volátil;
update (void)
(
tempo tempo = 1;
)

main ()
(
tempo = 0;
while (tempo <100);
)sem modificador volatile o compilador olha isso como 2 declarações diferentes.
1.tempo = 0;
2.while (tempo <100);

desde o tempo = 0; 0 <100, então o laço ficar sempre na mesma linha até que a condição seja verdadeira.
Time nunca atingem 100.Assim, quando a memória é optimizada, então ele pode ser alterado somente através da execução da declaração explícita que modificar o valor.no caso acima ele não muda.

Se usarmos modificador volátil, esta optimização desativa, forçando o programa para buscar um novo valor da variável variável cada vez que é acessada.

espero que isso responde sua pergunta.Se não, então eu ainda posso continuar minha explaination em meu próximo post.deixe-me saber se você tem alguma coisa com isso.

Lembre-se sempre que você não pode simular a condição de voláteis no C51 ou qualquer outro compilador como memória heap não pode ser simulado no Keil.ele pode ser visto apenas em hardware.

obrigado
Shivaram

 

Welcome to EDABoard.com

Sponsor

Back
Top