Linguagem C - Static, Volatile, Constant, Register

387 views
Skip to first unread message

agaelema .

unread,
Oct 9, 2013, 11:36:22 AM10/9/13
to sis_emb...@googlegroups.com, Texas Instruments Info para Designers e Projetistas
Estou estudando alguns materiais e surgiram algumas dúvidas.

No artigo "C for Embedded Systems Programming - AMF-ENT-T0001 - Derrick Klotz" encontrei as seguintes colocações sobre os tipos de variáveis:

► Global
• Global storage and global scope
► Static
• Global storage and local scope
► Local
• Local storage and local scope

Me corrijam caso estiver errado por favor. 

- variáveis "global" são aquelas que declaramos antes do "main" e que podem ser acessadas de qualquer parte do código.
- "static" são variáveis que apesar de armazenadas de maneira global são acessíveis somente a algumas funções.
- "local" são as variáveis declaradas dentro de funções ou trechos do código. Correto?

Quais os benefícios e utilizações de variáveis "Static"?



Variáveis "volatile" impedem a otimização pelo compilador correto?

"register" auxilia compilador de que a varável e acessada constantemente e deve ser armazenada nos registradores disponíveis?

"const" leva o compilador a salvar os valores da variável da memória de programa e não na RAM, correto?


Qual a aplicação prática de uma variável "const volatile"?

Grato.

--
Haroldo L. M. Amaral
Mestrando em Eng. Elétrica - UNESP Bauru
Tecnólogo em Sistemas Biomédicos - FATEC Bauru
Técnico em Eletrônica - CTI/UNESP Bauru

André Prado

unread,
Oct 9, 2013, 12:09:15 PM10/9/13
to agaelema ., sis_emb...@googlegroups.com, Texas Instruments Info para Designers e Projetistas
Static só é visto dentro do proprio arquivo .c, é uma global dentro de um escopo


2013/10/9 agaelema . <agae...@gmail.com>

--
--
Você recebeu esta mensagem porque está inscrito no Grupo Google "Texas Instruments Info para Designers e Projetistas".
Para postar uma mensagem neste grupo, mande um email para texa...@googlegroups.com
Para deixar o grupo, mande um email para texas-sc+u...@googlegroups.com
Para mais opções, visite este grupo no endereço:
http://groups.google.com/group/texas-sc?hl=pt-BR
 
---
You received this message because you are subscribed to the Google Groups "Texas Instruments Info para Designers e Projetistas" group.
To unsubscribe from this group and stop receiving emails from it, send an email to texas-sc+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.



--
Att
André

André Prado

unread,
Oct 9, 2013, 12:10:37 PM10/9/13
to agaelema ., sis_emb...@googlegroups.com, Texas Instruments Info para Designers e Projetistas
Const volatile eu nunca vi.
Volatile você declara para uma variavel que pode ser atualizada fora do seu programa .c, por exemplo, quando tem uma interrupção da serial a variavel "ABC" recebe o valor de um registrador, mas não é seu código .c que da valor a variavel "ABC", então se você não declarar volatile o compilador não vai saber isto e vai otimizar pra fora.


2013/10/9 André Prado <andrep...@gmail.com>



--
Att
André

Paulo Ricardo Pabst

unread,
Oct 9, 2013, 1:16:50 PM10/9/13
to andrep...@gmail.com, agaelema ., sis_emb...@googlegroups.com, Texas Instruments Info para Designers e Projetistas
Haroldo,

*  Se você declarar variáveis (sem qualquer modificador), fora de qualquer função, elas serão variáveis globais naquele arquivo.

*  Se você declarar variáveis (sem qualquer modificador), dentro de uma função, elas serão variáveis locais, acessíveis somente pela função. Vale lembrar que seus conteúdos serão perdidos assim que a função retornar e possivelmente elas serão alocadas no heap.

*  Se você declarar variáveis com o modificador static, dentro de uma função, elas serão variáveis locais, acessíveis somente pela função. Mas seus conteúdos não serão perdidos assim que a função retornar e possivelmente elas serão alocadas na memória principal (nem no heap, nem na stack).

const volatile não faz sentido. Posso estar errado... mas, const instrui ao compilador que a variável será armazenada em memória não volátil. volatile instrui ao compilador sempre ler o conteúdo da memória, mesmo que ele já esteja armazenado em algum outro registrador (porque, como já disseram, o valor dessa variável pode mudar sem o compilador ficar sabendo). Logo, as duas juntas não fazem sentido algum, a não ser que se trata de um registrador de leitura apenas, onde o conteúdo é alterado pela CPU, mas ainda assim é estranho....

-- Paulo Ricardo.

Fernando Almeida Stock

unread,
Oct 10, 2013, 6:48:02 PM10/10/13
to texa...@googlegroups.com, andrep...@gmail.com, agaelema ., sis_emb...@googlegroups.com
Aproveitando o gancho,
Alguma recomendação de conteúdo para aprender e aperfeiçoar em linguagem C para sistemas embarcados?
Conheço C, trabalho com programação, mas muitas vezes recorro a internet para entender um código ou elaborar um, gostaria de estudar mais. Gostaria também de conhecer outras linguagens aplicadas com frequência em sistemas embarcados, referências?

Obrigado a todos.

Atenciosamente,

Fernando Almeida Stock
Reply all
Reply to author
Forward
0 new messages