AULA 8 - Microcontroladores - Técnico: mudanças entre as edições
imported>Fargoud |
imported>Fargoud |
||
| (3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
| Linha 232: | Linha 232: | ||
O tipo de uma variável informa a quantidade de memória, em bytes que esta irá ocupar. São eles: | O tipo de uma variável informa a quantidade de memória, em bytes que esta irá ocupar. São eles: | ||
Tipo | Tipo Tamanho Escala (para word de 32 bits) | ||
unsigned '''char''' 1 word 0 a 4.294.967.296 | unsigned '''char''' 1 word 0 a 4.294.967.296 | ||
'''char''' 1 word -2.147.483.648 a +2.147.483.647 | '''char''' 1 word -2.147.483.648 a +2.147.483.647 | ||
| Linha 238: | Linha 238: | ||
'''int''' 4 words -1,7e+38 a 1,7e+38 | '''int''' 4 words -1,7e+38 a 1,7e+38 | ||
'''float''' 8 words 5,79e-76 a 5,79 . e+76 | '''float''' 8 words 5,79e-76 a 5,79 . e+76 | ||
'''double''' 16 words 6,70e-153 a 6,7e | '''double''' 16 words 6,70e-153 a 6,7e+153 | ||
'''void''' 0 sem valor | '''void''' 0 sem valor | ||
ponteiro 1-2 words endereço de memória | ponteiro 1-2 words endereço de memória | ||
| Linha 267: | Linha 267: | ||
1) Identifique o tipo das seguintes constantes: | 1) Identifique o tipo das seguintes constantes: | ||
a)'\r' ______ | a)'\r' ______ | ||
| Linha 319: | Linha 321: | ||
----------------------- | ----------------------- | ||
{| border="1" cellpadding="5" cellspacing="0" | {| border="1" cellpadding="5" cellspacing="0" | ||
! style="background: #cdc5bf;" | [[ | ! style="background: #cdc5bf;" | [[AULA 5 - Introdução à Linguagem C - FIC | Introdução à Linguagem C <]] | ||
! style="background: #cdc5bf;" | AULA 8 - | ! style="background: #cdc5bf;" | AULA 8 - Estrutura de um programa em C | ||
! style="background: #cdc5bf;" | [[AULA 9 - Microcontroladores - Técnico| Operadores | ! style="background: #cdc5bf;" | [[AULA 9 - Microcontroladores - Técnico | Operadores >]] | ||
|} | |} | ||
-------------- | |||
[https://wiki.ifsc.edu.br/mediawiki/index.php/LPC Voltar para Página da disciplina <<] | |||
Edição atual tal como às 11h29min de 18 de outubro de 2019
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
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:
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:
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, var2, var3;
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 32 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/]
| Introdução à Linguagem C < | AULA 8 - Estrutura de um programa em C | Operadores > |
|---|


