Cursos / Eletrônica / Projeto de Sistemas Microcontrolados / Aula

arrow_back Aula 06 - Fundamentos de Linguagem C - Parte I

Diretivas de compilação

As diretivas de compilação são simples comandos de orientação ao compilador. Esses comandos são, na realidade, utilizados para especificar determinados parâmetros internos utilizados pelo compilador no momento de compilar o código-fonte. Todas as diretivas de compilação são iniciadas pelo caractere # e somente caracteres de espaço em branco podem aparecer antes delas em uma linha.

Os compiladores CCS e C18 possuem uma grande quantidade de diretivas, que podem ser utilizadas para incluir arquivos, definir macros e controlar diversos parâmetros. Porém, esse material não visa esgotar todo o assunto pertinente a essas diretivas de compilação, assim, veremos apenas as mais comuns aos compiladores abordados. Caso necessite, acesse o help ou seus respectivos guias de usuário. (Para o CCS, acesse http://www.ccsinfo.com/downloads/ccs_c_manual.pdf e para o C18 acesse http://ww1.microchip.com/downloads/en/devicedoc/51288f.pdf).

  Diretivas #asm e #endasm

São utilizadas para inserir código em assembly diretamente no programa em C. Os mnemônicos são inseridos entre a diretiva #asm e a diretiva #endasm. Para o C18, essas diretivas são definidas com os símbolos _asm e _endasm.

Sintaxe

Exemplo

Diretiva #include

A diretiva #include diz ao compilador para incluir, no momento da compilação, o arquivo externo especificado.

Sintaxe

Exemplos

Obs.: A diferença entre se usar " " e <> é somente a ordem de procura do diretório do arquivo especificado. Se usado as aspas, o arquivo encontra-se no diretório corrente.

Diretivas #define e #undef

A diretiva #define informa ao compilador que substitua todas as ocorrências de um nome usado no programa, pela sequência de caracteres ou comandos fornecida. Já a diretiva #undef elimina a macro que a segue, apagando-a da tabela interna que guarda a macro.

Sintaxe

Exemplo

Diretiva #error

Essa diretiva força o compilador a gerar um código de erro (mensagem) no local onde se encontra sua designação.

Sintaxe

Exemplo

Diretivas #if, #elif, #else e #endif

A diretiva #if é um comando de pré-processador muito parecido com o comando if, pois ambos têm a função de conferir a validade de uma determinada expressão e realizar uma ação. Entretanto, a expressão contida em #if só é verificada durante a compilação, denotando que as expressões presentes nessas diretivas não suportam variáveis da linguagem C, somente constante, operadores-padrão e identificadores criados pela diretiva #define.

As diretivas #elif e #else são sempre opcionais e a diretiva #endif finaliza um bloco #if.

Sintaxe

Diretivas #ifdef e #ifndef

A diretiva #ifdef é uma forma abreviada da diretiva #ifdefined (nome). Ela é utilizada para evitar a redefinição de operadores, constantes e identificadores, que podem, eventualmente, estar presentes nos arquivos inseridos no programa. Já a diretiva #ifndef é a forma negativa de #ifdef.

Sintaxe

Ou

Exemplo

Após execução do código acima exemplificado, tem-se a mensagem impressa como sendo:

Diretiva #pragma

Utilizaremos a diretiva #pragma com o compilador C18. Sua função será instruir o compilador a executar uma ação específica durante o processo de compilação. Existem várias ações que podem ser tratadas com a diretiva #pragma. As mais comuns são:

  • code, que define uma seção como sendo de código.
  • romdata, que define uma seção como sendo de dados armazenados na memória de programa.
  • idata, que define uma seção como sendo de dados inicializados em uma memória de dados.
  • udata, que define uma seção como sendo de dados não inicializados em uma memória de dados.
  • interrupt, que define uma rotina de tratamento de interrupção como sendo de alta prioridade.
  • interruptlow, que define uma rotina de tratamento de interrupção como sendo de baixa prioridade.
  • config, que permite a configuração dos registradores de configuração do microcontrolador em uso.

Exemplificando este último caso, se desejar definir o oscilador como sendo a cristal e desabilitar o power-up timer e o watchdog, teremos o comando:

#pragma config OSC = XT, PWRT = OFF, WDTEN = OFF

Versão 5.3 - Todos os Direitos reservados