Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
rodrigomax@unifei.edu.br
ELT024
Dados Importantes
Terica: Local Sala X.1.1.03 Horrio 15:45-17:35 Laboratrio: Local Sala LEC I Horrio P1: 8:00-9:45, P2-10:15-12:00 Levar a placa + adaptador de tomada Datas Importantes *: Prova 01 25/09 Prova 02 11/12 Sub 18/12
* Datas
Todas as datas esto sujeitas a alteraes
ELT024
Referncias Bibliogrcas
Notas de Aula de Programao de Sistemas Embarcados
and HCS12. BARRETT,Steven F; PACK, Daniel J., Prentice Hall, 2005 C completo e total. Herbert Schildt. Makron Books. 3a Edio. 1997. The art of Programming Embedded Systems, Ganssle, J. Academic Press, 1991 *Erros na apostila
Cada erro vale 1 (um) ponto na mdia, saturado em 10 pontos. Os erros encontrados devem ser enviados via e-mail:
rodrigomax@unifei.edu.br/rmaalmeida@gmail.com indicando lugar do erro e nmero de matrcula do aluno.
Sistemas Embarcados
ELT024
Tpicos da Disciplina
Linguagem C Hardware utilizado Ambiente de programao Programao em C para sistemas embarcados Indentao e padro de escrita Comentrios Arquivos .c e .h Diretivas de compilao
ELT024
Introduo
Linguagem C
Lgica de Programao
necessria para as pessoas que desejam trabalhar com
inteno de atingir um objetivo Lgica de Programao a tcnica de encadear pensamentos em uma sequncia lgica para atingir um determinado objetivo.
ELT024
Introduo
Linguagem C
ELT024
Introduo
Linguagem C
Fonte: http://www.embedded.com/design/218600142
ELT024 Programao de sistemas embarcados: Introduo
Introduo
Hardware Utilizado
ELT024
Introduo
Ambiente de Programao
ELT024
Linguagem C
Indentao e padro de escrita
emacs) ou ANSI.
Todos os documentos do padro ANSI C utilizam este estilo. Apesar disto o padro ANSI C no especica um estilo para
ELT024
Linguagem C
Comentrios
#include <stdio.h> #define DIST 260 // distncia entre SP e Ita int main(int argc, char* argv[]) { /* esse programa serve para mostrar como se insere comentrios */ printf ("So Paulo est %d Km de Itajub", return 0; }
DIST);
ELT024
Linguagem C
Arquivos .c e .h
Arquivo de cdigo (code) terminado com a extenso .c contm a implementao do cdigo compilado gerando um arquivo .o Arquivo de cabealho (header) terminado com a extenso .h contm apenas denes e prottipos no compilado
ELT024
Linguagem C
Arquivos .c e .h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
//varivel usada apenas dentro deste arquivo static char temp; //varivel que ser usada tambm fora do arquivo static char valor; //funes usadas dentro e fora do arquivo void MudaDigito(char val) { valor = val; } char LerDigito(void) { return valor; } void InicializaDisplays(void) { //cdigo da funo } //funo usada apenas dentro deste arquivo void AtualizaDisplay(void) { //cdigo da funo }
ELT024 Programao de sistemas embarcados: Introduo
Linguagem C
Arquivos .c e .h
1 2 3 4 5 6
#ifndef VAR_H #define VAR_H void MudaDigito(char val); char LerDigito(void); void InicializaDisplays(void); #endif //VAR_H
Ateno
No existe a funo AtualizaDisplay() A varivel digito s pode ser lida ou gravada pelas funes
MudarDigito() e LerDigito()
Cuidado com o overhead de funes
ELT024
Linguagem C
Diretivas de compilao
ELT024
Linguagem C
Diretivas de compilao
As diretivas de compilao so instrues dadas ao compilador. Elas no so executadas. As diretivas de compilao comeam com um sinal #,
ELT024
Linguagem C
#dene
A diretiva #dene utilizada para que o cdigo fonte seja modicado antes de ser compilado.
1 2 3 4 5 6 7 8 9 10 11 12 13
#define CONST 15 void main(void) { printf("%d", CONST * 3); } //depois de compilado void main(void) { printf("%d", 15 * 3); // possvel: printf("%d", 45); }
ELT024
Linguagem C
#dene
Funo Original
1 2 3 4 5 6 7 8 9
Resultado na Tela
void MostraSaidaPadrao() { #ifdef PADRAO Serial char * msg = "SERIAL"; #else char * msg = "LCD"; #endif printf(msg); }
1 2 3 4 5 6
SERIAL
1 2 3 4 5 6
LCD
ELT024
Linguagem C
#ifdef, #ifndef, #else e #endif
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
void ImprimirTemp(char valor) { #ifdef LCD Imprime_LCD(valor) #else if (valor > 30) { led = 1; } else { led = 0; } #endif //LCD }
Funcionamento
No momento da compilao o pr-compilador ir vericar se a tag LCD foi denida em algum lugar. Em caso positivo o pr-compilador ir deixar tudo que estiver entre o #ifdef e o #else e retirar tudo que est entre o #else e o #endif.
ELT024 Programao de sistemas embarcados: Introduo
Linguagem C
Referncia circular
A funo LerTemperatura() faz um teste: se o valor for maior que um patamar chama a funo EnviaSerial() com o cdigo 0x30.
1 2 3
ELT024
Linguagem C
Referncia circular
temp.h
#include serial.h char LerTemperatura(void); void AjustaCalor(char val);
serial.h
#include temp.h
temp.h
#include serial.h char LerTemperatura(void); void AjustaCalor(char val);
ELT024
Linguagem C
Referncia circular
#ifndef TAG_CONTROLE #define TAG_CONTROLE //todo o contedo do arquivo vem aqui. #endif //TAG_CONTROLE
ELT024
Linguagem C
Referncia circular
serial.h
#infdef SERIAL_H #define SERIAL_H #include temp.h char LerSerial(void); void EnviaSerial(char val); #endif
temp.h
#infdef TEMP_H //tag j definida, //pula o contedo #endif
ELT024