Static, Const and Volatile

108 views
Skip to first unread message

cralx2k

unread,
Nov 23, 2013, 4:45:15 PM11/23/13
to sis_emb...@googlegroups.com

Ola a todos, acabei de fazer um curso de revisao em C voltado para embedded. Foi discutido muito sobre o uso do volatile para nao deixar o compilador otimizar o codigo. Observei que mesmo que ja tinha uma certa experiencia....coisa que nao e o meu caso.......ficaram meio confusos sobre o uso de static, const e volatile.


Vejo muito exemplos que utilizacao nesse formato uint8_t, unit8_t ou somente unsigned char var, unsigned int var. Estou lendo esse livro que fala sobre a necessidade de padronizar o C para uso no embedded.


Minha duvida e a sequinte.....pq static, const e volatile sendo tao importante nao sao implementadas como deveriam? Sinceramente fico confuso quando estou analizando um codigo.


Alguem com experiencia poderia explicar quando e pq usa-los com exemplos.  Obrigados a todos



Livro - Embedded C Coding Standard.

The static keyword shall be used to declare all functions and variables that do not need to be visible outside of the module in which they are declared.


The const keyword shall be used whenever appropriate. Examples include:


1- To declare variable that should not be changed after initialization,

2- To declare call-by- reference function parameters that should not be modified (ex. char const *param),

3- To define fields in structs and unions that should not be modified (ex. In a struct overlay for memory-mapped I/O peripheral registers), and

4- As a strongly typed alternative to #define for numerical constants.


The volatile keyword shall be used whenever appropriate. Examples include:

1-To declare a global variable accessible (by current use or scope) by any interrupt service routine,

2- To declare a global variable accessible (by current use or scope) by two or more taskes,

3- To declare a pointer to a memory- I/O peripheral register set (ex. timer_t volatile *const p_timer),

4-To declare a delay loop counter.

Felipe de Andrade Neves Lavratti

unread,
Nov 23, 2013, 4:55:40 PM11/23/13
to sis_emb...@googlegroups.com
Variáveis voláteis não são só não otimizadas, elas nunca vão para memória cache (banco de registradores), uma operação sobre ela sempre usa a RAM. Por isso dados compartilhados entre threads devem ser voláteis, já que cada thread vai ter a sua cache.


2013/11/23 cralx2k <leao...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "sis_embarcados" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para sis_embarcado...@googlegroups.com.
Para postar neste grupo, envie um e-mail para sis_emb...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/sis_embarcados.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--
Skype: felipeanl

André Prado

unread,
Nov 23, 2013, 5:48:33 PM11/23/13
to sis_emb...@googlegroups.com
Não entendi, essa sua explicação está bem condizente, qual sua dúvida?


2013/11/23 Felipe de Andrade Neves Lavratti <feli...@gmail.com>



--
Att
André

cralx2k .

unread,
Nov 23, 2013, 5:58:56 PM11/23/13
to sis_emb...@googlegroups.com
Andre, eu nao vejo ser aplicado o que esta na teoria..... por isso a minha duvida de quando realmente utilizar static, const e volatile......


2013/11/23 André Prado <andrep...@gmail.com>

--
Você recebeu esta mensagem porque está inscrito em um tópico do grupo "sis_embarcados" dos Grupos do Google.
Para cancelar a inscrição neste tópico, acesse https://groups.google.com/d/topic/sis_embarcados/jjmx3wdqeVg/unsubscribe.
Para cancelar a inscrição neste grupo e todos os seus tópicos, envie um e-mail para sis_embarcado...@googlegroups.com.

André Prado

unread,
Nov 23, 2013, 6:21:29 PM11/23/13
to sis_emb...@googlegroups.com
Desculpa mas não te entendi, no teu próprio texto estão situações onde você vai aplicar.


Livro - Embedded C Coding Standard.

The static keyword shall be used to declare all functions and variables that do not need to be visible outside of the module in which they are declared.


The const keyword shall be used whenever appropriate. Examples include:


1- To declare variable that should not be changed after initialization,

2- To declare call-by- reference function parameters that should not be modified (ex. char const *param),

3- To define fields in structs and unions that should not be modified (ex. In a struct overlay for memory-mapped I/O peripheral registers), and

4- As a strongly typed alternative to #define for numerical constants.


The volatile keyword shall be used whenever appropriate. Examples include:

1-To declare a global variable accessible (by current use or scope) by any interrupt service routine,

2- To declare a global variable accessible (by current use or scope) by two or more taskes,

3- To declare a pointer to a memory- I/O peripheral register set (ex. timer_t volatile *const p_timer),

4-To declare a delay loop counter.


Você vai aplicar nestas condições.



2013/11/23 cralx2k . <leao...@gmail.com>



--
Att
André

cralx2k .

unread,
Nov 23, 2013, 6:44:07 PM11/23/13
to sis_emb...@googlegroups.com
A minha curiosidade e pq nao vejo isso sempre nos codigos. Teoricamente parece que esta bem explicado, mas nao vejo sendo aplicado nos exemplos que vejo pela internet.


2013/11/23 André Prado <andrep...@gmail.com>

Prof. Alessandro Cunha

unread,
Nov 23, 2013, 6:47:17 PM11/23/13
to sis_emb...@googlegroups.com

Hehehehehe....

 

Você nunca ouviu seu professor falar que na prática a teoria é outra?

 

Abraços.

 

Alessandro Ferreira da Cunha
TECHtraininG - ENGENHARIA E TREINAMENTOS
aless...@techtraining.eng.br
SKYPE --> alessandroferreiradacunha
twitter --> @prof_afcunha
(11) 995–363-828
www.techtraining.eng.br

Enviado por uma Beagle Bone Black

cralx2k .

unread,
Nov 23, 2013, 7:06:19 PM11/23/13
to sis_emb...@googlegroups.com
hehehehehe estou comecando a ver isso......achei que somente acontecia isso no hardware...:)


2013/11/23 Prof. Alessandro Cunha <afcu...@gmail.com>

Henrique Rossi

unread,
Nov 24, 2013, 7:18:22 AM11/24/13
to sis_emb...@googlegroups.com
Olá cralx2k!

Acho que alguns dos motivos para que essas keywords não sejam usadas com frequência são, além da falta de conhecimento, o excesso de verbosidade que elas trazem e a consequente complexidade do seu uso. Se for aplicado o uso delas num código legado, começa a aparecer um warning de compilação aqui e ali, e o cara começa a ficar com medo de usar. :)

Marcelo Jo

unread,
Nov 24, 2013, 10:07:59 AM11/24/13
to sis_emb...@googlegroups.com
  Na minha opinião, vc não encontra muito isso na net pq a maioria das pessoas não sabem pra que elas servem! =D hehehehe

  Segue as boas práticas que vc não terá problemas...

  Qdo se usa otimização nos compiladores, fatalmente vc irá usar volatile.

  Marcelo


2013/11/24 Henrique Rossi <henriqu...@gmail.com>

Felipe de Andrade Neves Lavratti

unread,
Nov 24, 2013, 11:35:22 AM11/24/13
to sis_emb...@googlegroups.com
Que fique claro que saber o significado e como usar esses qualificadores é fundamental para um bom programador.
--
Skype: felipeanl


cralx2k

unread,
Nov 24, 2013, 2:23:55 PM11/24/13
to sis_emb...@googlegroups.com
E isso mesmo. Na classe o professor explicou que deveriamos deixar o compilador configurado de maneira mais exigente possivel justamente para mostrar esses warnings. Assim poderiamos analiza-los e resolve-los.....

cralx2k

unread,
Nov 24, 2013, 2:26:57 PM11/24/13
to sis_emb...@googlegroups.com
E justamente isso que estou buscando...com relacao a volatile nao tenho duvida....mas ainda estou confuso sobre static e const.

cralx2k

unread,
Nov 24, 2013, 2:30:12 PM11/24/13
to sis_emb...@googlegroups.com
entao com relacao a volatile vc "pega" o problema na hora.......ja usando const e static nao.......por isso ainda nao estou conseguindo entender na pratica quando e quando usar ou melhor como testar.

André Prado

unread,
Nov 24, 2013, 2:41:50 PM11/24/13
to sis_emb...@googlegroups.com
static é um limitador de escopo, uma variavel/função static só é vista dentro do seu módulo.
Você também pode usar STATIC em uma variavel interna de uma função e ela vai ficar "global", ela não vai perder o conteúdo quando sair da função. (Isto era válido em Java, mas acho que em C também é)


2013/11/24 cralx2k <leao...@gmail.com>



--
Att
André

André Prado

unread,
Nov 24, 2013, 2:42:40 PM11/24/13
to sis_emb...@googlegroups.com
módulo = o arquivo .c/.h


2013/11/24 André Prado <andrep...@gmail.com>



--
Att
André

Marcelo Jo

unread,
Nov 25, 2013, 9:13:33 PM11/25/13
to sis_emb...@googlegroups.com
  É.. o static depende do escopo. Se for declarado numa variável dentro de uma função, ela é global dentro daquela função e não perderá seu valor na saída dela. Se for declarada uma variável global dentro do teu arquivo.c, essa variável é vista apenas dentro desse arquivo (visto que por padrão as variáveis e funções são públicas)

  E const, normalmente é pra definir constantes e o compilador não permite q vc altere ela pela própria variável. É muito usado em funções onde vc não quer que mude o valor de um parâmetro q vc manda pra ela. Ou também pra criar tabelas na flash.

  Acho que é por aí! =D Esqueci algo?

  Marcelo


2013/11/24 André Prado <andrep...@gmail.com>

Simao

unread,
Apr 26, 2014, 2:50:39 PM4/26/14
to sis_emb...@googlegroups.com

	Alguém saberia informar se o kit abaixo é atrativo na promoção de thanksgiving????


In case anyone is interested, we have another Thanksgiving promo this year 

This week only - grab a Mercury 50K FPGA board for just $39.99!
Use coupon code "FARADAY". While supplies last! Limit one per customer. 

http://micro-nova.com/mercury
mark2112 wrote

Cristiano Werner Araújo

unread,
Nov 26, 2013, 12:59:03 PM11/26/13
to sis_emb...@googlegroups.com
oi Simao,

eu acho que não vale a pena ! :P

o Papilio One com 250k está U$ 37 aqui :
Não sei como fica o frete ... 
mas o FPGA é 5 vezes maior e por U$ 2 a menos ...

não comparei o número de pinos que cada um tem ...

abraço !

Cristiano



2014/4/26 Simao <simao...@yahoo.com.br>

--

cralx2k .

unread,
Nov 26, 2013, 1:02:10 PM11/26/13
to sis_emb...@googlegroups.com


2013/11/26 Cristiano Werner Araújo <cristianow...@gmail.com>

--
Você recebeu esta mensagem porque está inscrito em um tópico do grupo "sis_embarcados" dos Grupos do Google.
Para cancelar a inscrição neste tópico, acesse https://groups.google.com/d/topic/sis_embarcados/jjmx3wdqeVg/unsubscribe.
Para cancelar a inscrição neste grupo e todos os seus tópicos, envie um e-mail para sis_embarcado...@googlegroups.com.

André Prado

unread,
Nov 26, 2013, 1:27:27 PM11/26/13
to sis_emb...@googlegroups.com
Bem interessante o formato do Mercurio para conectar em um protoboard mas também acho o Papilio one mais negócio

abs


2013/11/26 cralx2k . <leao...@gmail.com>



--
Att
André

Simao

unread,
Apr 27, 2014, 9:22:26 AM4/27/14
to sis_emb...@googlegroups.com


    Obrigado a todos pelas respostas, acho que existe certa unanimidade a respeito da comparação com a Papilio One.

Simão
Reply all
Reply to author
Forward
0 new messages