Vous êtes sur la page 1sur 48

TECH TRAINING ENGENHARIA E TREINAMENTOS Prof. Alessandro Ferreira da Cunha msn: afcunha01@gmail.

.com skype: alessandroferreiradacunha CURSO AVAADO I MICROCONTROLADOR MSP430


PROGRAMAO DO TREINAMENTO:

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

1. Arquiteturas von-Neumann X Arquiteturas Harvard 1.1. von-Neumann

Algoritmos para computadores se baseiam em alguns conceitos bsicos e em um modelo de computador, os quais devem ser bem entendidos para que se possa criar algoritmos eficientes. Este modelo foi proposto pelo matemtico hngaro Neumann Jnos Lajos Margittai. Em hngaro o nome de famlia aparece antes. Assim em portugus o seu nome seria Jnos Lajos Margittai Neumann. O seu pai, que era rico, comprou um ttulo de nobreza e ele passou a se chamar Jnos Lajos Margittai von Neumann. No modelo de computador proposto por von Neumann as instrues e os dados ficam juntos na memria. O processador busca na memria e executa uma instruo de cada vez. Portanto, as transferncias entre a memria e o processador so feitas passo a passo. O ciclo normal da execuo de um programa ento: 1. Busca instruo; 2. Decodifica instruo; 3. Executa instruo; 4. Volta para o passo 1 buscando a instruo seguinte na memria. Dados e programas compartilham um meio de armazenamento nico. Mais simples, menos restritivo, menos eficiente dados e programas misturados permitem ao programador intercambiar a semntica de dados e programas ao longo do tempo

Pgina 2 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

1.2.

Harvard

Dados e programas estocados em meios de armazenamento distintos Mais propenso a fomentar paralelismo, mais caro, mais complexo dados e programas separados permitem que ambos sejam facilmente tratados em paralelo. Harvard permite duas leituras de memria simultneas (dado e instruo). A maioria dos processadores DSP (celulares, telecom, cmeras digitais,) usam organizao Harvard, pois isto permite maior largura de banda de memria e tempo de acesso a dados mais previsvel.

Pgina 3 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

1.3.

Qual a escolha da Texas para o MSP430?

Veja o que dizem os manuais das famlias MSP430x4xx e MSP430x2xx: Architecture The MSP430 incorporates a 16-bit RISC CPU, peripherals, and a flexible clock system that interconnect using a von-Neumann common memory address bus (MAB) and memory data bus (MDB). Partnering a modern CPU with modular memory-mapped analog and digital peripherals, the MSP430 offers solutions for demanding mixed-signal applications. Isso significa que a Texas optou por uma arquitetura von-Neumann modificada, tendo dois barramentos separados (como na arquitetura Harvard) mas fazendo acesso a apenas um barramento por vez (como na arquitetura von-Neumann). Como ser visto ao longo deste treinamento, isto acaba tirando proveito das vantagens de cada uma das arquiteturas em um nico chip.

1.4.

Mquina von-Newmann

Pgina 4 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha Exemplo de funcionamento de uma arquitetura Von Newmann: SOMAR DOIS NMEROS QUE SO INSERIDOS NA ENTRADA E COLOCAR O RESULTADO NA SADA. 1. Colocar o primeiro nmero a ser somando na porta de entrada do C. 2. Dar um pulso de clock no BUFFER. 2.1. O primeiro nmero passa a ocupar o barramento de dados e fica armazenado no BUFFER. 3. Dar um pulso de clock no Registrador A. 3.1. O primeiro nmero passa a ocupar o barramento interno, fica armazenado no Registrador A e est na entrada da ULA. 4. Colocar o segundo nmero a ser somado na porta de entrada do C. 4.1. Enquanto no for aplicado no BUFFER um pulso de clock, em sua entrada ter o segundo nmero e em sua sada ter o primeiro nmero. 5. Dar um pulso de clock no BUFFER. 5.1. Ao fazer isso, o primeiro nmero apagado da sada do BUFFER, que passa a ser ocupado pelo segundo nmero. Caso o primeiro nmero no tenha sido armazenado em algum Registrador, ele ser perdido. 6. Dar um pulso de clock no Registrador B. 6.1. O segundo nmero passa a ocupar o barramento interno, fica armazenado no Registrador B e est na entrada da ULA. 7. Colocar nos bits de comando da ULA a informao X0 = 0 e X1 = 0. 7.1. Ao fazer isso, a ULA calcular a soma dos dados que estejam presentes em suas entradas. Se no houver dados na entrada, ela somar zero com zero. Automaticamente, o resultado colocado na sada da ULA. 8. Dar um pulso de clock no Gate da ULA (GULA). 8.1. Ao fazer isso o segundo nmero apagado do barramento de dados, que passa a ser ocupado pelo resultado da soma dos dois nmeros. 9. Dar um pulso de clock no LATCH. 9.1. O resultado da soma colocado na porta de sada.

Pgina 5 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

1.5.

Mquina von-Neumann modificada

1.6.

CISC x RISC

A principal funo de um microcontrolador executar uma srie de ordens (comandos ou instrues), armazenados em um programa, na sua memria. Cada uma destas instrues interpretada pela CPU e, ento, executada. Assim, cada tipo de computador digital, deve ter um conjunto de instrues (ou set de instrues) definidas, de modo que sua CPU possa interpret-las e execut-las. Em funo deste conjunto de instrues, existem duas classes de computadores digitais:

1.6.1. CISC

Complex Instruction Set Computer

Conjunto de instrues ampliado, ou seja, a CPU capaz de executar um grande nmero de instrues (ex.: microcontrolador 8051, da Intel, com 256 instrues); geralmente associada a computadores com arquitetura von-Neumann.

1.6.2. RISC

Reduced Instruction Set Computer

Conjunto de instrues reduzido (ex.: famlia PIC, da Microchip, com 35 instrues, e famlia MSP430, da Texas, com 24 instrues emuladas e 27 instrues fsicas); geralmente associada a computadores com arquitetura Harvard.

Pgina 6 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

2. Famlias MSP430 e detalhamento do hardware


Arquitetura do MSP430F2013.

Arquitetura do MSP430FG4618.

Pgina 7 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

3. Clocks e LPM

FAMLIA 4 - 16-Bit RISC Architecture, 125-ns Instruction Cycle Time FAMLIA 2 - 16-Bit RISC Architecture, 62.5 ns Instruction Cycle Time Quanto tempo demora a ser executada cada uma das instrues no MSP430? Como acontece no 8051, a quantidade de ciclos de mquina necessria para executar uma instruo varia de acordo com o modo de endereamento utilizado e com o formato da instruo. Sempre as instrues so referenciadas ao sinal de clock chamado de MCLK. Os chips MSP430 se caracterizam pelo baixo consumo de energia. Um dos mtodos utilizados para obter estas funcionalidades o gerenciamento de clock e os modos de operao em baixa potncia (LPM Low Power Mode). Tanto a famlia 2 quanto a famlia 4 tem vrias opes de clock que podem ser conectadas ao chip.

3.1.

Sinais de clock externo

Na famlia 2 o funcionamento do clock gerenciado pelo Basic Clock Module+. Ele permite que at 4 tipos de clock diferentes sejam utilizados: LFXT1CLK (Low-frequency/high-frequency oscillator): Funciona com o uso de um cristal externo. Este cristal pode ser desde um modelo de baixa velocidade, fixado

Pgina 8 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha em 32.768 Hz, at cristais de quartzo ou ressonadores, com valores entre 400 khz e 16 Mhz. Sinais de clock criados por geradores externos tambm so aceitos. XT2CLK (Optional high-frequency oscillator): Funciona com o uso de um cristal externo de alta velocidade. Isto pode ser feito atravs de cristais de quartzo, ressonadores ou fontes de clock externa (entre 400 khz e 16 Mhz). DCOCLK (Internal digitally controlled oscillator (DCO)). VLOCLK (Internal very low power, low frequency oscillator): com 12-kHz de frequencia tpica. J na famlia 4 o funcionamento do clock bem similar ao da famlia 2, mas o gerenciamento feito por um mdulo que leva o nome de FLL+ Clock Module. Ele permite que somente 3 primeiros tipos de clock mostrados na famlia 2 possam ser gerados, sendo que a opo VLOCLK no est disponvel. As velocidades de clock externo admissveis para a famlia 4 vo de 450 khz a 8 Mhz. Apenas os dispositivos MSP430F47x admitem velocidades at 16 Mhz.

3.2.

Sinais de clock internos

Independente de qual fonte de clock foi utilizada pelo chip, sempre sero gerados trs sinais de clock internamente: ACLK (Auxiliary clock): esta fonte de clock selecionvel por software quando as fontes so o LFXT1CLK ou o VLOCLK. ACLK pode ser dividido por 1, 2, 4, or 8. Esta a fonte de clock utilizada por todos os mdulos de perifricos. MCLK (Master clock): esta fonte de clock tambm selecionvel por software, para qualquer uma das quatro fontes de clock possveis: LFXT1CLK, VLOCLK, XT2CLK ou DCOCLK. MCLK pode ser dividido por 1, 2, 4, ou 8. utilizado para alimentar a CPU. SMCLK (Sub-main clock): tambm selecionvel por software para qualquer uma das quarto fontes de clock possveis, divisvel por 1, 2, 4, or 8. utilizado individualmente para alimentar alguns perifricos. Apenas na famlia 4, um quarto sinal de clock interno pode ser gerado, mas que complementar aos j mostrados anteriormente: ACLK/n (Auxiliary clock buffed output): faz um buffer de sada do sinal gerado pelo ACLK. Dedica-se apenas ao uso externo ao chip, para gerar um sinal de sincronismo, por exemplo. Na figura a seguir possvel visualizar o mdulo que controla o clock do MSP430, para as famlias 43, 44 e 46. Depois mostrado o mdulo para a famlia 2.

Pgina 9 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

Pgina 10 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

Pgina 11 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

3.3.
FAMLIA 2

Os registradores que controlam os clocks

FAMLIA 4

3.4.
FAMLIA 2

As freqncias possveis no DCO

Pgina 12 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

FAMLIA 4

Pgina 13 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

Pgina 14 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

3.5.

LPMs

LOW POWER MODES

A existncia de sinais de clock diferentes internamente permite que modos de consumo diferentes sejam utilizados de acordo com cada aplicao do usurio. Isto permite uma grande economia da energia consumida pelo chip. Isto pode ser visualizado na figura a seguir.

A entrada ou sada em cada um dos modos de operao em baixo consumo feito atravs de bits localizados no registrador especial R2, como ser descrito em detalhes ao longo deste treinamento.

Pgina 15 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha So ao todo cinco modos de operao em baixa potncia, alm do modo ativo, como pode ser visto nas tabelas das famlias 2 e 4, logo abaixo: FAMLIA 2

FAMLIA 4

A entrada ou sada de qualquer um destes modos pode ser feita atravs de mudanas nos bits do registrador R2, como pode ser visto nos exemplos abaixo:

; Enter LPM0 Example BIS #GIE+CPUOFF,SR ; Enter LPM0 ; Program stops here ; Exit LPM0 Interrupt Service Routine BIC #CPUOFF,0(SP) ; Exit LPM0 on RETI RETI
Pgina 16 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

; Enter LPM3 Example BIS #GIE+CPUOFF+SCG1+SCG0,SR ; Enter LPM3 ; Program stops here ; Exit LPM3 Interrupt Service Routine BIC #CPUOFF+SCG1+SCG0,0(SP) ; Exit LPM3 on RETI RETI
Como em cada modo de potncia apenas alguns clocks so desligados, pode-se deixar a CPU desligada e manter perifricos funcionando, o que comprova o baixo consumo do dispositivo.

Pgina 17 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

4. Os registradores de trabalho, ou registradores especiais


Diferente de outros fabricantes de microcontroladores, a Texas colocou nas famlias MSP430 16 registradores de trabalho com acesso direto a CPU e aos barramentos de dados e memria, como pode ser visto na figura abaixo. Isto gera uma grande praticidade de uso do chip, com facilidades que sero discutidas ao longo deste treinamento.

Vamos analisar cada um destes registradores em detalhes.

Pgina 18 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

4.1.

Program counter (contador de programa)

Aponta qual ser a prxima instruo dentro do programa a ser executada pela CPU.

Ele pode ser endereado por qualquer um dos sete modos existentes no MSP430. Alguns exemplos so mostrados a seguir. MOV MOV MOV #LABEL,PC ;desvio para o endereo do LABEL LABEL,PC ;desvio para o endereo indicado pelo LABEL @R14,PC ;desvio indireto indicado pelo R4

4.2.

Stack Pointer (ponteiro da pilha)

A pilha um recurso utilizado para armazenar informaes enquanto so executadas rotinas de interrupo ou chamadas de sub-rotinas. Para tanto necessrio apontar qual posio da pilha ser utilizada. Isto feito atravs do registrador Stack Pointer.

MOV MOV PUSH POP

2(SP),R6 R7,0(SP) #0123h R8

; ; ; ;

Item I2 > R6 Overwrite TOS with R7 Put 0123h onto TOS R8 = 0123h

Pgina 19 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

4.3.

Status Register (R2)

O registrador de status contm os bits de controle aritmtico, atualizados a cada operao realizada pela CPU. Alm disto nele que so ajustados os bits de controlam os modos de operao em baixa potncia, como pode ser visto abaixo.

A descrio bit a bit de funcionamento e suas respectivas configuraes so mostradas na tabela a seguir.

4.4.

Constant Generator (R3)

As seis constantes mais utilizadas durante toda a operao da CPU so geradas de modo automaticamente pelo gerador de constantes, que composto pelos registradores R2 e R3, sem a necessidade de qualquer cdigo adicional de programa. As constantes so selecionadas de acordo com o endereamento do registrador fonte, como mostrado na tabela a seguir.

Pgina 20 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha BITS DO STATUS REGISTER

CONSTANTES GERADAS AUTOMATICAMENTE

Pgina 21 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha So estas constantes que permitem que o set de instrues do MSP430, que tem originalmente apenas 27 instrues (RISC) possa ser expandido em mais 24, totalizando 51 instrues. Tudo isto sem a necessidade de acrescentar nenhuma outra linha de cdigo. Alguns exemplos de como isto funciona so mostrados abaixo: INSTRUO PARA LIMPAR UM REGISTRADOR (CLR) CLR dst Isto emulado em uma instruo de duplo operando, com o mesmo comprimento, fazendo: MOV R3,dst ;onde R3 recebe o valor de #00 INSTRUO INCREMENTAR UM REGISTRADOR (CLR) INC dst Isto emulado em uma instruo de duplo operando, com o mesmo comprimento, fazendo: ADD 0(R3),dst ;onde R3 recebe o valor #01

4.5.

General Purpouse Registers (R4 R15)

Os demais registradores conectados diretamente a CPU (R4 a R15) so de propsito geral, podendo ser utilizados para qualquer funo desejada pelo usurio, como armazenamento de constantes ou valores, ponteiros de endereamento, indexadores de valores, etc. Alguns exemplos das operaes que podem ser realizadas com estes registradores so mostradas na figura a seguir.

Pgina 22 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

5. Estrutura de memrias: RAM, ROM (Flash)


Como pode ser visto no item 2 deste material, as memrias RAM, ROM (Flash) so dois trechos distintos dentro do hardware. Porm seu mapeamento contnuo, incluindo os vetores de interrupo, de reset, perifricos e registradores com funes especiais.

5.1.

Memrias no MSP430

O mapeamento de memria no MSP430 igual para as famlias 2 e 4 e seguem a estrutura mostrada na figura a seguir.

Pgina 23 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

A quantidade de dados armazenada em cada espao do mapa de memria de 8 bits. Porm o MSP430 um microcontrolador de 16 bits. Como resolver isto? O acesso ao mapa memria pode ser feito em Word (16 bits), byte (8 bits) ou em bit, como pode ser visto na figura a seguir.

Pgina 24 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

5.1.1. Memrias de programa (ROM FLASH)


O microcontrolador MSP430 armazena todo o programa que ser executado em sua memria ROM/FLASH. Perceba que na arquitetura destes processadores no h memria do tipo EEPROM. Deste modo, dados permanentes, que no podem ser perdidos em caso de falta de energia eltrica, devem tambm ser armazenados na memria FLASH. O Hardware onde est a memria FLASH mostrada na figura a seguir.

Pgina 25 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

Toda a memria FLASH do MSP430 particionada em segmentos. O processo de gravao pode acontecer em trechos de Words, Bytes ou mesmo bits. Mas para apagamento isto s pode ocorrer por segmentos completos. O particionamento para uma memria de 4 Kbytes mostrado na figura abaixo. Isto sempre ocorre em segmentos, sendo que cada segmento sub dividido em 4 blocos.

Pgina 26 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

6. Reduced Instruction Set Code RISC


O MSP430, apesar de ter uma arquitetura do tipo von-Neumann, trabalha com um set de instrues reduzido (RISC). So apenas 27 instrues fsicas (core instructions). Com o uso dos registradores que geram constantes (R2 e R3) possvel emular mais 24 instrues, totalizando 51 instrues. Basicamente as instrues so de trs tipos: Dual-operand: dois operandos fonte e destino; Single-operand: apenas um operando, que pode ser uma fonte ou um destino; Jump: instrues de salto no programa. Todas as instrues de operando simples ou duplo podem ser escritas em bytes (8 bits) ou words (16 bits). Na construo das instrues sempre seguida a seguinte nomenclatura: src: o operador fonte definido por As e S-reg; dst: o operador destino definido por Ad e D-reg; As: determina qual modo de endereamento utilizado pela instruo, especificando quem o registrador fonte; S-reg: quem, dos 16 registradores diretos CPU, utilizado como fonte; Ad: determina qual modo de endereamento utilizado pela instruo, especificando quem o registrador destino; D-reg: quem, dos 16 registradores diretos CPU, utilizado como destino; B/W: indica se a instruo orientada a byte (1) ou a word (0);

Pgina 27 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

6.1.

Modos de endereamento

Pgina 28 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

6.2.

Formatos das instrues

6.3.

As 51 instrues

SOURCE AND DESTINATION INSTRUCTIONS

Pgina 29 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha DESTINATION ONLY INSTRUCTIONS

JUMPS INSTRUCTIONS

Pgina 30 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

Pgina 31 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

6.4.

Ciclos de mquina e tamanho das instrues

INTERRUPES E RESET

INSTRUES DE FORMATO II (DESTINATION ONLY)

INSTRUES DE FORMATO III (JUMP) Todas as instrues desta categoria necessitam de um Word de comprimento e dois ciclos de mquina para serem executadas, independente da ao de salto acontecer ou no.

Pgina 32 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha INSTRUES DE FORMATO I (SOURCE AND DESTINATION)

Pgina 33 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

7. AMBIENTE IAR
Como feita a criao de projetos no IAR Como editar arquivos de programa assembly (.ASM) A importncia do uso de comentrios durante a programao Estrutura de um programa .ASM Vetores de Reset e de interrupo Diretivas do IAR O que o arquivo include

Pgina 34 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

8. COMO ESTRUTURAR UM PROGRAMA EM C PARA MSP430?


E-0-0

//****************************************************************************** // MSP430xG46x Demo - Software Toggle P5.1 // // Description: Toggle P5.1 by xor'ing P5.1 inside of a software loop. // ACLK = 32.768kHz, MCLK = SMCLK = default DCO // // MSP430xG461x // |-----------------| // /|\| | // | | | // --|RST | // | | // | P5.1|-->LED // // K. Quiring/M. Mitchell // Texas Instruments Inc. // October 2006 // Built with IAR Embedded Workbench Version: 3.41A //****************************************************************************** #include <msp430xG46x.h>

void main(void) { volatile unsigned int i; WDTCTL = WDTPW+WDTHOLD; P5DIR |= 0x02; while(1) { P5OUT ^= 0x02; for(i=50000;i>0;i--); } } // Stop WDT // P5.1 output

// Delay

Pgina 35 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

9. A PLACA DE EXERCCIOS: EXPERIMENTER BOARD

Pgina 36 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

Pgina 37 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

Pgina 38 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

Pgina 39 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

10.

BREVE INTRODUO A LINGUAGEM C

(http://pt.wikipedia.org/wiki/c_(linguagem_de_programaao)) C uma linguagem de programao compilada de propsito geral, estruturada, imperativa, procedural, de alto nvel, e padronizada, criada em 1972, por Dennis Ritchie, no AT&T Bell Labs, para desenvolver o sistema operacional UNIX (que foi originalmente escrito em Assembly). A linguagem C classificada de alto nvel pela prpria definio desse tipo de linguagem. A programao em linguagens de alto nvel tem como caracterstica no ser necessrio conhecer o processador, ao contrrio das linguagens de baixo nvel. As linguagens de baixo nvel esto fortemente ligadas ao processador. A linguagem C permite acesso de baixo nvel com a utilizao de cdigo Assembly no meio do cdigo fonte. Assim, o baixo nvel realizado por Assembly e no C. Desde ento, espalhou-se por muitos outros sistemas, e tornou-se uma das linguagens de programao mais usadas, e influenciou muitas outras linguagens, especialmente C++, que foi originalmente desenvolvida como uma extenso para C.

10.1.

Histria

Ken Thompson e Dennis Ritchie (da esquerda pra direita), os criadores das linguagens B e C, respectivamente. O desenvolvimento inicial de C, ocorreu no AT&T Bell Labs, entre 1969 e 1973. Deu-se o nome C linguagem, porque muitas de suas caractersticas derivaram da linguagem B. C foi originalmente desenvolvido, para a implementao do sistema UNIX (originalmente escrito em PDP-7 Assembly, por Dennis Ritchie e Ken Thompson). Em 1973, com a adio do tipo struct, C tornou-se poderoso o bastante para a maioria das partes do Kernel do UNIX, serem reescritas em C. Este foi um dos primeiros sistemas que foram implementados em uma linguagem, que no o Assembly, sendo exemplos anteriores, os sistemas: Multics (escrito em PL/I) e TRIPOS (escrito em BCPL). Segundo Ritchie, o perodo mais criativo ocorreu em 1972.

Pgina 40 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

10.2.

K&R C

Em 1978, Brian Kernighan e Dennis Ritchie publicaram a primeira edio do livro The C Programming Language. Esse livro, conhecido pelos programadores de C, como K&R, serviu durante muitos anos como uma especificao informal da linguagem. A verso da linguagem C que ele descreve usualmente referida como K&R C. A segunda edio do livro, cobriu o padro posterior, o ANSI C. K&R C introduziu as seguintes caractersticas na linguagem:

Biblioteca padro de E/S; Tipos de dado struct; Tipos de dado long int; Tipos de dado unsigned int; O operador =+ foi alterado para +=, e =- para -= (o analisador lxico do compilador fazia confuso entre i =+ 10 e i = +10. O mesmo acontecia com =-).

K&R C freqentemente considerado a parte mais bsica da linguagem, cujo suporte deve ser assegurado por um compilador C. Durante muitos anos, mesmo aps a introduo do padro ANSI C, K&R C foi considerado o menor denominador comum, em que programadores de C se apoiavam quando uma portabilidade mxima era desejada, j que nem todos os compiladores eram atualizados o bastante para suportar o padro ANSI C. Nos anos que se seguiram publicao do K&R C, algumas caractersticas no-oficiais foram adicionadas linguagem, suportadas por compiladores da AT&T e de outros vendedores. Estas incluam:

Funes void e tipos de dados void *; Funes que retornam tipos struct ou union; Campos de nome struct num espao de nome separado para cada tipo struct; Atribuio a tipos de dados struct; Qualificadores const para criar um objecto s de leitura; Biblioteca padro, que incorpora grande parte da funcionalidade implementada por vrios vendedores; Enumeraes; Clculos de ponto-flutuante em preciso simples (no K&R C, os clculos intermedirios eram feitos sempre em double, porque era mais eficiente na mquina onde a primeira implementao do C foi feita).

Pgina 41 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha

10.3.

ANSI C e ISO C

Durante os finais da dcada de 1970, a linguagem C comeou a substituir a linguagem BASIC como a linguagem de programao de microcomputadores mais usada. Durante a dcada de 1980, foi adaptada para uso no PC IBM, e a sua popularidade comeou a aumentar significativamente. Ao mesmo tempo, Bjarne Stroustrup, juntamente com outros nos laboratrios Bell, comeou a trabalhar num projecto onde se adicionavam construes de linguagens de programao orientada por objectos linguagem C. A linguagem que eles produziram, chamada C++, nos dias de hoje a linguagem de programao de aplicaes mais comum no sistema operativo Windows da companhia Microsoft; C permanece mais popular no mundo UNIX. Em 1983, o instituto norte-americano de padres (ANSI) formou um comit, X3J11, para estabelecer uma especificao do padro da linguagem C. Aps um processo longo e rduo, o padro foi completo em 1989 e ratificado como ANSI X3.159-1989 Programming Language C. Esta verso da linguagem freqentemente referida como ANSI C. Em 1990, o padro ANSI C, aps sofrer umas modificaes menores, foi adotado pela Organizao Internacional de Padres (ISO) como ISO/IEC 9899:1990, tambm conhecido como C89 ou C90. Um dos objetivos do processo de padronizao ANSI C foi o de produzir um sobreconjunto do K&R C, incorporando muitas das caractersticas no-oficiais subseqentemente introduzidas. Entretanto, muitos programas tinham sido escritos e que no compilavam em certas plataformas, ou com um certo compilador, devido ao uso de bibliotecas de funes no-padro e ao fato de alguns compiladores no aderirem ao ANSI C.

10.4.

C99

Aps o processo da padronizao ANSI, as especificaes da linguagem C permaneceram relativamente estticas por algum tempo, enquanto que a linguagem C++ continuou a evoluir. (em 1995, a Normative Amendment 1 criou uma verso nova da linguagem C mas esta verso raramente tida em conta.) Contudo, o padro foi submetido a uma reviso nos finais da dcada de 1990, levando publicao da norma ISO 9899:1999 em 1999. Este padro geralmente referido como C99. O padro foi adoptado como um padro ANSI em Maro de 2000. As novas caractersticas do C99 incluem:

funes em linha remoo de restries sobre a localizao da declarao de variveis (como em C++) adio de vrios tipos de dados novos, incluindo o long long int (para minimizar problemas na transio de 32-bits para 64-bits), um tipo de dados boolean explicito (chamado _Bool) e um tipo complex que representa nmeros complexos Pgina 42 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha


vetores de dados de comprimento varivel (o vetor pode ter um tamanho diferente a cada execuo de uma funo, mas no cresce depois de criado) suporte oficial para comentrios de uma linha iniciados por //, emprestados da linguagem C++ vrias funes de biblioteca novas, tais como snprintf() vrios ficheiros-cabealho novos, tais como stdint.h

O interesse em suportar as caractersticas novas de C99 parece depender muito das entidades. Apesar do GCC e vrios outros compiladores suportarem grande parte das novas caractersticas do C99, os compiladores mantidos pela Microsoft e pela Borland suportam pouqussimos recursos do C99, e estas duas companhias no parecem estar muito interessadas em adicionar tais funcionalidades, ignorando por completo as normas internacionais. A Microsoft parece preferir dar mais nfase ao C++.

10.5.

Viso Geral

C uma linguagem imperativa e procedural, para implementao de sistemas. Seus pontos de design foram para ele ser compilado, fornecendo acesso de baixo nvel memria e baixos requerimentos do hardware. Tambm foi desenvolvido para ser uma linguagem de alto nvel, para maior reaproveitamento do cdigo. C foi til para muitas aplicaes que foram codificadas originalmente em Assembly. Essa propriedade no foi acidental; a linguagem C foi criada com o objetivo principal em mente: facilitar a criao de programas extensos com menos erros, recorrendo ao paradigma da programao algortmica ou procedimental, mas sobrecarregando menos o autor do compilador, cujo trabalho complica-se ao ter de realizar as caractersticas complexas da linguagem. Para este fim, a linguagem C possui as seguintes caractersticas:

Uma linguagem nuclear extremamente simples, com funcionalidades no-essenciais, tais como funes matemticas ou manuseamento de arquivos, fornecida por um conjunto de bibliotecas de rotinas padronizada; A focalizao no paradigma de programao procedimental; Um sistema de tipos simples que evita vrias operaes que no fazem sentido Uso de uma linguagem de pr-processamento, o pr-processador de C, para tarefas tais como a definio de macros e a incluso de mltiplos ficheiros de cdigo fonte; Ponteiros do maior flexibilidade linguagem; Acesso de baixo-nvel, atravs de incluses de cdigo Assembly no meio do programa C;

Pgina 43 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha


Parmetros que so sempre passados por valor para as funes e nunca por referncia ( possvel simular a passagem por referncia com o uso de ponteiros); Definio do alcance lexical de variveis; Estruturas de variveis, (structs), que permitem que dados relacionados sejam combinados e manipulados como um todo.

Algumas caractersticas teis, que faltam em C, podem ser encontradas em outras linguagens, que incluem:

Segurana de tipo; Coletor de lixo (mais comum em linguagens interpretadas); Vetores que crescem automaticamete; Classes ou objectos com comportamento (ver orientao a objetos); Closures (a closure is a function that is evaluated in an environment containing one or more bound variables. When called, the function can access these variables); Funes aninhadas; Programao genrica; Sobrecarga de operadores; Meta-programao; Apoio nativo de multithreading e comunicao por rede.

Apesar da lista de caractersticas teis que C no possui, ser longa, isso no tem sido um impedimento sua aceitao, pois isso permite que novos compiladores de C sejam escritos rapidamente para novas plataformas, e tambm permite que o programador permanea sempre em controle do que o programa est a fazer. Isto o que por vrias vezes permite o cdigo de C correr de uma forma mais eficiente que muitas outras linguagens. Tipicamente, s cdigo de assembly afinado mo que corre mais rapidamente, pois possui um controle completo da mquina, mas avanos na rea de compiladores juntamente com uma nova complexidade nos processadores modernos permitiram que a diferena tenha sido rapidamente eliminada. Uma consequncia da aceitao geral da linguagem C que freqentemente os compiladores, bibliotecas e at intrpretes de outras linguagens de nvel maior sejam eles prprios implementados em C. C tem como ponto forte, a sua eficincia, e a linguagem de programao preferida para o desenvolvimento de sistemas e softwares de base, apesar de tambm ser usada para desenvolver programas de computador. tambm muito usada no ensino de cincia da computao, mesmo no tendo sido projetada para estudantes e apresentando algumas dificuldades no seu uso. Outra caracterstica importante de C, sua proximidade do cdigo de mquina, que permite que um projetista seja capaz de fazer algumas previses de como o software ir se comportar, ao ser executado. Pgina 44 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha C tem como ponto fraco, a falta de proteo que d ao programador. Praticamente tudo que se expressa em um programa em C, pode ser executado, como por exemplo, pedir o vigsimo membro de um vetor com apenas dez membros. Os resultados so muitas vezes totalmente inesperados, e os erros, difceis de encontrar.

10.6.

Palavras reservadas na Linguagem C

A linguagem C do tipo case sensitive. E alm disto, algumas palavras so reservadas, sendo seu uso limitado apenas as funes ou comandos que elas executam:

O compilador IAR tem tambm algumas palavras reservadas, o que veremos ao longo deste treinamento.

11.

VARIVEIS, TIPOS DE DADOS E OPERADORES EM C Tipos de dados

11.1.

Basicamente apenas 5 tipos de dados que so utilizadas em linguagem C: char caractere 8 bits, 1 byte; int inteiro 16 bits, 2 bytes; float ponto flutuante 32 bits, 4 bytes; double ponto flutuante de preciso dupla 64 bits, 8 bytes; void sem valor.

Cada uma destes tipos pode ainda ter os seguintes modificadores:

Pgina 45 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha signed utilizar o ltimo bit para sinalizar se um dado positivo ou negativo. Com isto, o dado sempre estar com um tamanho menor em um bit. unsigned no informa se o dado tem valor positivo ou negativo. Por conseqncia todos os bits do dado podem ser utilizados como informao; short faz com que o dado passe a ter um tamanho menor do que especificado em sua definio. Por exemplo: utilizar o shot int pode faz-lo assumir o valor de apenas um bit, dependendo do compilador utilizado; long faz com que o dado passe a ter um tamanho maior do que especificado em sua definio. Por exemplo: utilizar o long int pode faz-lo assumir o valor de 65536 bits, dependendo do compilador utilizado

11.2.

Declarando variveis

necessrio, durante o fluxo do programa, declarar as variveis que sero utilizadas de acordo com os tipos de dados mostrados anterioremente. Isto pode ser feito das seguintes maneiras: TIPO nome_da_varivel {,outras_variveis}; unsigned int tempo; Pgina 46 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha As variveis podem ser inicializadas com um determinado valor durante a sua declarao: unsigned int tempo = 100;

11.2.1.

Variveis locais e globais

Dependendo do local onde declarada a varivel, esta pode assumir uma funo global ou local: Variveis globais so acessveis de qualquer ponto do programa, por qualquer funo, e devem ser declaradas no corpo principal do programa, fora de qualquer funo, inclusive da main; Variveis locais s podem ser acessadas dentro das funes onde foram criadas. Ao sair desta funo, a linguagem C destri uma varivel local e, portanto ela no ser acessvel por outras funes. O programa a seguir (E-0-1) d uma demonstrao de como as variveis podem ser declaradas localmente ou globalmente:
//****************************************************************************** // // // // // Exemplo de variveis globais e locais Alessandro Ferreira da Cunha Tech Training - Engenharia e Treinamentos Dezembro 2008 Extrado do Livro PIC Programao em C, do Fbio Pereira Built with IAR Embedded Workbench Version: 4.11.2.9 <msp430xG46x.h> <stdio.h>

//****************************************************************************** #include #include

int somatorio; // VARIVEL GLOBAL! SER ACESSADA POR TODAS AS FUNES void soma (int valor) //AO ACESSAR ESTA FUNO, O PARMETRO VALOR RECEBE DADOS DE QUEM O CHAMOU { int conta; // VARIVEL LOCAL! SER ACESSADA APENAS PELA FUNO SOMA somatorio = somatorio + valor; printf("0"); for (conta = 1;(conta<(valor+1));conta++) { printf("+%u",conta); } printf(" = %u\r\n",somatorio); } void main() { WDTCTL = WDTPW+WDTHOLD; // Stop WDT int conta; // VARIVEL LOCAL! SER ACESSADA APENAS PELA FUNO MAIN somatorio = 0; // A VARIVEL GLOBAL INICIALIZADA for (conta=1;conta<20;conta++) { soma(conta); // CHAMADA A FUNO SOMA, ONDE PASSADO O VALOR DE CONTA } }

Pgina 47 de 110

Material auxiliar para curso Avanado I de MSP430 Prof. Alessandro F. Cunha Alguns comentrios importantes sobre o programa E-0-1: O comando printf chama uma biblioteca que far o envio de dados pela porta serial do MSP430. No IAR ser possvel visualizar estes dados atravs do Terminal I/O, acessvel em: View Terminal I/O, onde ser aberta a janela mostrada ao lado. Para que ele funcione necessrio incluir a biblioteca padro stdio.h O formato do comando printf : printf (string, varivel); printf (O nmero de tentativas foi %d, contador); Onde: string: uma constate de caracteres, sempre declarado entre aspas; varivel: a declarao de uma ou mais variveis que devem ser impressas juntamente com os caracteres. Para tanto necessrio seguir a formatao %wt, onde w o nmero de caracteres que se deseja imprimir e t uma das seguintes opes: c = caractere; s = string ou caractere; u = inteiro sem sinal; x = inteiro em formato hexadecimal com letras minsculas; X = inteiro em formato hexadecimal com letras maisculas; d = inteiro decimal com sinal; i = inteiro decimal com sinal; o = octal sem sinal; e = ponto flutuante em formato exponencial; f = ponto flutuante em formado decimal; Lx = hexadecimal longo (16 ou 32 bits) com letras minsculas; LX = hexadecimal longo (16 ou 32 bits) com letras maisculas; Lu = decimal longo (16 ou 32 bits) sem sinal; Ld = decimal longo (16 ou 32 bits) com sinal; % = smbolo de porcentagem; Para que todos os caracteres a serem impressos na janela Terminal I/O no fiquem na mesma linha, so utilizados os caracteres especiais de barra invertida, que so: Pgina 48 de 110