AULA – Linguagem C – Campos de Bits e Unions

18
AULA AULA Linguagem C – Campos de Bits Linguagem C – Campos de Bits e Unions e Unions Disciplina: Aplicações Avançadas de Disciplina: Aplicações Avançadas de Microprocessadores (AAM) Microprocessadores (AAM) Profa. Ana T. Y. Watanabe Profa. Ana T. Y. Watanabe [email protected]

description

AULA – Linguagem C – Campos de Bits e Unions. Disciplina: Aplicações Avançadas de Microprocessadores (AAM) Profa. Ana T. Y. Watanabe [email protected]. - PowerPoint PPT Presentation

Transcript of AULA – Linguagem C – Campos de Bits e Unions

Page 1: AULA  –  Linguagem C – Campos de Bits e Unions

AULA – AULA – Linguagem C – Campos de Bits e Linguagem C – Campos de Bits e

Unions Unions

Disciplina: Aplicações Avançadas de Disciplina: Aplicações Avançadas de Microprocessadores (AAM)Microprocessadores (AAM)

Profa. Ana T. Y. WatanabeProfa. Ana T. Y. [email protected]

Page 2: AULA  –  Linguagem C – Campos de Bits e Unions

“E sabemos que todas as coisas concorrem para o bem daqueles que amam a Deus, daqueles que são chamados segundo o seu

propósito.” Romanos 8:28

Page 3: AULA  –  Linguagem C – Campos de Bits e Unions

Objetivos da Aula:• Typedefs

• Campos de Bits

• Unions

• Extern

• Exemplos

• Exercício

Page 4: AULA  –  Linguagem C – Campos de Bits e Unions

Typedef C permite que sejam definidos

explicitamente novos tipos de dados

usando a palavra reservada typedef. typedef não cria realmente uma nova

classe de dados, mas sim define um

novo nome para uma tipo já existente.

Page 5: AULA  –  Linguagem C – Campos de Bits e Unions

Typedef

O uso do typedef torna os programas

em C mais legíveis e mais portáteis,

pois bastará alterar a definição do

typedef quando trocar de ambiente.

Ex.: typedef unsigned char byte;

Page 6: AULA  –  Linguagem C – Campos de Bits e Unions

Campos de Bits

São os operadores bit a bit:

Como C foi projetada para substituir a

Linguagem Assembly na maioria das

tarefas de programação, ela acessa os bits individuais de uma variável, ou registrador do microcontrolador.

Page 7: AULA  –  Linguagem C – Campos de Bits e Unions

Campos de Bits

A declaração de um campo de bit é feita da mesma forma que a declaração de um campo qualquer de estrutura, com a diferença de que após o nome do campo, o programador deve inserir um sinal “:” e em seguida o número de bits utilizado pelo campo.

Page 8: AULA  –  Linguagem C – Campos de Bits e Unions

Campos de BitsExemplo:

struct dispositivo { unsigned ativo : 1; unsigned pronto : 1; unsignet erro : 1; unsigned : 2; unsigned ultimo_erro : 3; }

Page 9: AULA  –  Linguagem C – Campos de Bits e Unions

Uniões São um tipo especial de dado no qual as

variáveis declaradas residem num mesmo endereço da memória.

O compilador aloca memória para a variável cujo tipo ocupe o maior espaço na memória e sem seguida, as demais variáveis pertencentes à união são alocados no mesmo espaço.

Page 10: AULA  –  Linguagem C – Campos de Bits e Unions

/*** PTCDD - Port C Data Direction Register; 0x00000005 ***/

typedef union {

byte Byte;

struct {

byte PTCDD0 :1; /* Data Direction for Port C Bit 0 */

byte PTCDD1 :1; /* Data Direction for Port C Bit 1 */

byte PTCDD2 :1; /* Data Direction for Port C Bit 2 */

byte PTCDD3 :1; /* Data Direction for Port C Bit 3 */

byte PTCDD4 :1; /* Data Direction for Port C Bit 4 */

byte PTCDD5 :1; /* Data Direction for Port C Bit 5 */

byte PTCDD6 :1; /* Data Direction for Port C Bit 6 */

byte :1;

} Bits;

struct {

byte grpPTCDD :7;

byte :1;

} MergedBits;

} PTCDDSTR;

Page 11: AULA  –  Linguagem C – Campos de Bits e Unions

Extern - classe de armazenamento

As classes de armazenamento são utilizados para definir o escopo e tempo de vida das variáveis dentro do programa.

auto

extern

static

register

Page 12: AULA  –  Linguagem C – Campos de Bits e Unions

Extern - classe de armazenamento

A classe de armazenamento extern permite definir variáveis globais que serão visíveis em mais de um arquivo do programa.

Assim, os programas podem ser divididos em vários arquivos, os quais podem ser compilados separadamente.

Page 13: AULA  –  Linguagem C – Campos de Bits e Unions

Extern - classe de armazenamento 1º. ARQUIVO

int soma = 0; / global

int main()

{ escreve();

return 0;

}

2º. ARQUIVO

extern int soma; // extern

void escreve();

printf(“Soma = %d ”,soma);

Page 14: AULA  –  Linguagem C – Campos de Bits e Unions

Extern - classe de armazenamento

Ao colocar a palavra extern antes da declaracão da variável soma, não estamos declarando uma nova variável, mas apenas informando ao compilador que ela existe em outro local de armazenamento previamente definido. Por esse motivo, ela NÃO pode ser inicializada.

Page 15: AULA  –  Linguagem C – Campos de Bits e Unions

/*** PTCDD - Port C Data Direction Register; 0x00000005 ***/

extern volatile PTCDDSTR _PTCDD @0x00000005;

#define PTCDD _PTCDD.Byte

#define PTCDD_PTCDD0 _PTCDD.Bits.PTCDD0

#define PTCDD_PTCDD1 _PTCDD.Bits.PTCDD1

#define PTCDD_PTCDD2 _PTCDD.Bits.PTCDD2

#define PTCDD_PTCDD3 _PTCDD.Bits.PTCDD3

#define PTCDD_PTCDD4 _PTCDD.Bits.PTCDD4

#define PTCDD_PTCDD5 _PTCDD.Bits.PTCDD5

#define PTCDD_PTCDD6 _PTCDD.Bits.PTCDD6

#define PTCDD_PTCDD _PTCDD.MergedBits.grpPTCDD

Volatile => O modificador volatile diz ao compilador para não otimizarqualquer coisa relacionada àquela variável.

Page 16: AULA  –  Linguagem C – Campos de Bits e Unions

/*** ADCSC1 - Status and Control Register 1; 0x00000010 ***/

typedef union {

byte Byte;

struct {

byte ADCH0 :1; /* Input Channel Select Bit 0 */

byte ADCH1 :1; /* Input Channel Select Bit 1 */

byte ADCH2 :1; /* Input Channel Select Bit 2 */

byte ADCH3 :1; /* Input Channel Select Bit 3 */

byte ADCH4 :1; /* Input Channel Select Bit 4 */

byte ADCO :1; /* Continuous Conversion Enable - ADCO */

byte AIEN :1; /* Interrupt Enable -

byte COCO :1; /* Conversion Complete Flag - The COCO flag

} Bits;

struct {

byte grpADCH :5;

byte :1;

byte :1;

byte :1;

} MergedBits;

} ADCSC1STR;

Page 17: AULA  –  Linguagem C – Campos de Bits e Unions

/*** ADCSC1 - Status and Control Register 1; 0x00000010 ***/

extern volatile ADCSC1STR _ADCSC1 @0x00000010;

#define ADCSC1 _ADCSC1.Byte

#define ADCSC1_ADCH0 _ADCSC1.Bits.ADCH0

#define ADCSC1_ADCH1 _ADCSC1.Bits.ADCH1

#define ADCSC1_ADCH2 _ADCSC1.Bits.ADCH2

#define ADCSC1_ADCH3 _ADCSC1.Bits.ADCH3

#define ADCSC1_ADCH4 _ADCSC1.Bits.ADCH4

#define ADCSC1_ADCO _ADCSC1.Bits.ADCO

#define ADCSC1_AIEN _ADCSC1.Bits.AIEN

#define ADCSC1_COCO _ADCSC1.Bits.COCO

#define ADCSC1_ADCH _ADCSC1.MergedBits.grpADCH

Page 18: AULA  –  Linguagem C – Campos de Bits e Unions

Exercício de Aplicação

Montar uma struct do LCD no projeto do LCD