AULA 8 - Microcontroladores - Técnico

De IFSC
Revisão de 19h49min de 29 de março de 2017 por imported>Fargoud (→‎Exemplo 2:)
Ir para navegação Ir para pesquisar

INTRODUÇÃO À LINGUAGEM C

Uma das linguagens mais utilizadas por técnicos e pesquisadores é a linguagem C. Isto ocorre principalmente pela versatilidade e pela complexidade da linguagem, que permitem a criação de programas muito sofisticados.

Histórico

A primeira versão da linguagem foi desenvolvida por dois pesquisadores da Bell Laboratories, Brian Kernighan e Dennis Ritchie.

Várias empresas criaram seus próprios compiladores e IDEs (ou “Integrated Development Environments”) C e assim apareceram o MS C (Microsoft), GCC, Dev C, o Turbo C, Borland C, Code Blocks, etc.

No nosso curso, utilizaremos o aplicativo IDE Code::Blocks, cujo manual vc pode acessar aqui: Manual do CB.

Obs: este material encontra-se mais detalhado na apostila do curso:[1]

Características da Linguagem

“C é uma linguagem compilada, estruturada e de baixo nível.”

Linguagem compilada porque, após ser escrita num editor de textos qualquer (que siga o padrão ASCII), precisa ser decodificada, compilada (cada módulo separadamente) e linkada para obter-se um programa executável. Certos softwares como o Turbo C e o Borland C permitem que se edite, compile e linke os programas em C dentro de uma mesma IDE, o que facilita muito a manipulação.

É uma linguagem estruturada porque segue o padrão de endentação, tal como em Pascal e Fortran por exemplo, com alinhamentos dos blocos lógicos cada vez mais à direita, quanto mais "interno" ao bloco for o comando, e com execução linear, sem utilização de goto's, break's, etc.

Finalmente é uma linguagem de baixo nível por permitir acesso às camadas lógicas mais baixas da máquina. Isto é, por aproximar-se bastante da linguagem de máquina, Assembler, que apesar de bastante rudimentar tem a capacidade de acessar diretamente a memória, o hardware do computador, como registradores, portas, posições da RAM, etc. Com isto, ganha-se muito em rapidez de execução e em poder para utilizar completamente os recursos do computador. É importante salientar que apesar de ser possível utilizar-se funções muito complexas de baixo nível em C, um programador não interessado nisto terá uma linguagem estruturada como qualquer outra de alto nível.

O programador não pode esquecer que o compilador C diferencia caracteres minúsculos de maiúsculos. Por exemplo, as variáveis "numero" e "Numero" são consideradas diferentes uma da outra na linguagem C.

Estrutura de um programa em C

EstruturaprogC.png


Observe atentamente o programa.

Este inicia com comentários sobre o nome do programa e o que ele faz.

Em C, comentários sempre estão entre os símbolos "/*" e "*/", ou após o símbolo "//". Ou seja, tudo que estiver entre "/* ... */" é completamente ignorado pelo compilador e tudo que estiver, na mesma linha, após o "//" também o é.

Em seguida, temos uma série de comandos, chamados "diretivas", que não pertencem à linguagem C propriamente, sempre começando com o símbolo "#".

Estes comandos fazem parte do que chamamos de "Pré-Processador". O pré-processador, como o nome diz, é um programa que examina o programa-fonte em C antes deste ser compilado e executa certas modificações nele, baseado nas diretivas.

As diretivas mais comuns são "#include" e "#define". A primeira, indica ao compilador quais arquivos de header (os "*.h") serão utilizados pelo programa. A segunda, define constantes e macros para facilitar a visualização do programa.


A área seguinte é a região de declaração dos "protótipos de funções". Isto é necessário, em alguns compiladores C, para indicar ao compilador quais e qual o formato das funções que existem no programa. Por exemplo, o protótipo "void circulo(int, int)" diz ao compilador que dentro deste código ele encontrará uma função chamada circulo, que recebe dois argumentos do tipo int (inteiros) e não retorna valor algum (void) à expressão chamadora.


As outras áreas são todas funções.

A primeira é a função principal do programa, main().

A função main() é sempre a primeira a ser executada num programa C, não importa onde esteja localizada no código. 

Neste programa foi colocada em primeiro lugar por convenção. Note que uma função inicia-se sempre com o nome desta (seu tipo e argumentos) e em seguida temos o seu "corpo", sempre delimitado pelos caracteres "{" e "}". Tudo que estiver entre os símbolos de abre e fecha-chaves faz parte do corpo de uma função.

Com exceção da função main(), que existe obrigariamente em qualquer programa C, todas as outras funções foram previamente declaradas em protótipos.


Não só as funções, mas também blocos de comandos são delimitados por "{" e "}". Note o corpo do comando "for" do programa.

As variáveis em C geralmente são declaradas no início dos blocos, em alguns compiladores por convenção e em outros por obrigação. Contudo, a rigor, as variáveis podem ser declaradas em qualquer ponto do programa (dentro do escopo necessário, claro) desde que antes de serem utilizadas.


Finalizando, note que a maioria dos comandos C terminam com o caractere "';" que é um análogo do "End" utilizado em outras linguagens, como Fortran e Pascal.


No caso de programas para microcontrolador Arduino, que utilizam uma versão da linguagem C como script, a Wiring, a estrutura básica é do tipo:

EstruturaprogArduino.png

VARIÁVEIS E CONSTANTES

Uma constante é um dado com valor fixo e inalterável no programa em C.

Uma constante caractere é escrita entre aspas simples (“ ' “ e “ ' “); uma cadeia de caracteres, entre aspas duplas (“ " “ e “ " “); e constantes numéricas como o número propriamente dito.

Exemplos de declarações de constantes:

const char const_caract ='c';  
#define NOME "meu primeiro programa  "
#define VALOR 8

Constantes podem ser dos tipos:

Constantes numéricas:

São os inteiros, octais, hexa, longas e ponto flutuante (reais).

Exemplo:

  • 45E-8 (exponencial)
  • 32 (inteiro)
  • 034 (octal)
  • 0xFE(hexa)
  • 2e3 (exponencial)
  • 32L (longa)
  • 567893 (longa implícito)
  • 2.3 (double)

Como podemos notar, constantes inteiras não possuem ponto decimal; constantes octais devem ser precedidas por um '0'; constantes hexa, por um '0x'; constantes longas devem ser seguidas por um 'L', mas quando se trata de um número muito grande o compilador já entende que é um inteiro longo; e constantes double ou float têm ponto decimal flutuante.

Constantes de Caractere:

Podem ser representadas por seu código ASCII, ou entre aspas, ' '.

Exemplo:

' A ' = 65    (em ASCII)

Sequências de Escape

São códigos de tarefas a serem executadas na compilação, representados por caracteres que não podem ser impressos.


Sequência de escape                                         Significado                                .
\a                                         	Caractere Bell  (ANSI C)
\b                                         	Caractere de retrocesso (backspace)
\n                                         	Caractere de  nova linha
\r                                         	Caractere de retorno de carro
\t                                          	Caractere de tabulação horizontal
\\                                          	Caractere de contra-barra
\'                                           	Caractere de aspas simples
\"                                          	Caractere de aspas duplas
\?                                          	Caractere de ponto-de-interrogação
\###                                       	Código ASCII em octal de caractere
\x###                                     	Código ASCII em hexadecimal de caractere
\0                                          	Caractere nulo


Exemplo:

A instrução

printf(“\n\t\t Hoje \202 dia da Can\x87\xc6o da \nAm\x82rica\?”);

vai imprimir:


      Hoje é dia da Canção da 
América?

Exemplo 2:

Teste o programinha:

#include  <stdio.h>
void main(void)
{
     printf("A\nB\nC");
     printf("\n");
     printf("A\tB\tC");
     printf("\n");
     printf("AB\rC");
     printf("\n");
     printf("AB\b\bC");
     printf("\n");
     printf("Beep\aBeep\aBeep\a");
     printf("\n");
     printf("\A\B\C");                          /* O que acontece aqui ????  */
     printf("\n");
     printf(" Os comandos do Dos estão no C:\\DOS ");
     printf("\n");
     printf("Can\x87\xc6o da Am\x82rica – Milton Nascimento\n");
     printf("\xc9\xcd\xcd\xcd\xbb\n\xc8\xcd\xcd\xcd\xbc");
     printf("\n");
     printf("\"Cuidado!\" n\xc6o fume ");
}


No arduino:

Arduinoprint1.png

Strings

Conjunto, série ou sequência de caracteres seguido do caractere ' \0 ' e delimitado por " ".

Exemplo:

char * texto= "ABC";       // ou char  texto[4]  ={ 'A' , 'B' , 'C' , '\0'};


As variáveis são o aspecto fundamental de qualquer linguagem de computador. Uma variável em C é um espaço de memória reservado para armazenar um certo tipo de dado e tendo um nome para referenciar seu conteúdo.

Ao contrário das constantes, uma variável tem seu valor mutável, daí o nome "variável".

Declaração de uma variável:

Ocorre quando a variável é "apresentada" ao compilador. O usuário declara que vai criar uma variável de um certo tipo para utilizá-la em seu programa. A sintaxe da declaração de uma variável é:

 tipo_var       nome_var  ; 

onde tipo_var é o tipo de variável criada e nome_var, o nome ou os nomes (separados por vírgulas) das próprias.

Exemplo:

 int num ;

e assim está declarada a variável "num" inteira.


Exemplo 2:

float  var1, var 2, var 3;

declara as variáveis "var1" , "var2" e "var3", ao mesmo tempo, como sendo do tipo float.

Definição de uma variável:

Ocorre quando a variável já declarada recebe um valor, uma atribuição.

A definição da variável pode ocorrer na mesma linha da declaração, mas sempre depois desta e denominamos isto de "inicialização da variável".

A sintaxe da definição de variáveis é:

    nome_var = valor ;

onde nome_var é o nome (ou nomes, separados por símbolos de igual) da variável e valor é o valor atribuído à mesma.

Exemplo:

 num = 5;      ou        num1 = num 2 = num3  = 0; 

e assim o valor 5 (inteiro) é atribuído à variável "num" e o mesmo valor, 0, é atribuído a três variáveis ao mesmo tempo.

Exemplo 2:

  char x = 'b';

neste caso a inicialização da variável "x" como tendo o valor do caractere 'b' ocorreu logo após a declaração.

Tipos de Variáveis:

O tipo de uma variável informa a quantidade de memória, em bytes que esta irá ocupar. São eles:

Tipo			Tamanho	       Escala (para word de 8 bits)                                            
unsigned char	1 word		0  a  4.294.967.296
char		1 word		-2.147.483.648  a  +2.147.483.647
unsigned int	4 words		0  a   3,4e+38 
int		4 words		-1,7e+38  a   1,7e+38
float		8 words		5,79e-76  a  5,79 . e+76 
double		16 words	6,70e-153  a   6,7e-153 
void             0               sem valor
ponteiro               1-2 words	endereço de memória

Os tipos básicos estão em negrito, os outros tipos são chamados de modificadores de tipos e servem para alterar o tamanho de um tipo básico.

Por exemplo, em alguns computadores, como o IBM-370, o modificador "short" faz com que o tipo "int" fique com a metade do tamanho, 8 bits.

O tamanho dos tipos varia bastante de máquina para máquina e de compilador, para compilador. Inteiros com e sem sinal são interpretados de maneira diferente pelo compilador.

O bit de ordem superior, bit 15, de um número inteiro com sinal é sempre '0', quando o inteiro é positivo e '1' quando o número é negativo.

Se usarmos o modificador "unsigned" o compilador vai ignorar o bit de sinal, tratando-o como um bit a mais para números positivos.

Exemplo:

  void main(void)
{ 
   unsigned int j = 3.4e+38;
   int i = j ;
   printf(" %d  % u \n", i, j);
}    

Variáveis também são modificadas por Classes de Armazenamento: auto, static, register e extern. Isto será visto mais tarde, quando estudarmos o escopo das variáveis.

Exercícios:

1) Identifique o tipo das seguintes constantes:

 a)'\r'	______	b) 2130	______	c) -123	______	d) 33.28______	e) 0x42	______	
 f) 0101	______	g) 2.0e30______h) '\xDC'______i) '\"'______	j) '\\'	______	
 k) 'F'	______	 l) 0	______	m) '\0'______	

2) O que é uma variável, na linguagem C?

3) Quais os 5 tipos básicos de variáveis em C?

4) O tipo float ocupa o mesmo espaço que ________ variáveis do tipo char.

5) Escreva um programa que contenha uma única instrução e imprima na tela:

            Esta é a linha um.
                    Esta é a linha dois.
                    	um
                              dois
                                    tres                             


Obs: para escrever a letra ‘é’ utilize o código \202, da tabela ASCII extendida.

Portal sobre aprendizado da Linguagem C:

[Portal CProgressivo http://www.cprogressivo.net/]




<< Página do curso AULA 8 - Introdução à Linguagem C Operadores >>