sexta-feira, agosto 29, 2008

Microcontroladores - Parte 10

Vamos iniciar os nossos exemplos com os microcontroladores PIC da Microchip.

O PIC é bastante popular, principalmente entre hobbistas (entre outros motivos, por estar disponível no encapsulamento DIP que permite uma montagem mais simples).

Uma peculariedade do PIC é que uma série de características são definidas através da gravação de uma área especial de configuração na memória Flash.

Falando em Flash, alguns modelos (mas não todos) possibilitam a implementação de um bootloader (atualização do software sob controle do próprio software).

Um modelo médio é o PIC16F628:
  • clock de DC até 20MHz
  • memória Flash para 2K instruções (já veremos o que é isto)
  • memória Ram de 96 bytes
  • memória EEProm de 128 bytes
  • até 16 E/S digitais
  • 3 timers
  • uma UART
  • módulo CCP: Capture, Compare e PWM
A arquitetura do PIC é bem diferente da arquitetura que a maioria dos programadores PC conhece. Em primeiro lugar, é uma arquitetura RISC. Existe um conjunto pequeno de instruções, todas de mesmo tamanho (14 bits no PIC16):

Mais radical ainda, o PIC utiliza uma Arquitetura Harvard. A idéia básica desta arquitetura é separar a memória de código da memória de dados. A memória de código é dimensionada para guardar uma instrução em cada posição (ou seja, cada posição no PIC16 armazena 14bits) e a de dados é organizada em bytes:

Na figura acima as instruções passam pelas partes em verde e os dados pelas partes em azul. O PIC16 suporta diretamente uma memória de programa com até 8K instruções, usando um contador de programa (PC) com 13 bits. Para tratamento de interrupções e chamada de subrotinas o PIC dispõe de uma pilha (stack) com apenas 8 posições.

As instruções lógicas e aritméticas trabalham sempre com um acumulador, o registrador W. Este registrador, os registradores de controle das funcionalidades (SFR) e a Ram de uso geral (GPR) estão armazenados conjuntamente na memória de dados, que é paginada em bancos (cada banco possui 128 posições, o banco ativo é selecionado através de bits no registrador de status):


Esta arquitetura é particularmente cruel para um compilador de linguagens de alto nível como o C:
  • existe pouco suporte para constantes armazenadas na Flash. Comandos como printf("Alo, mundo") requerem um ginástica incrível do compilador para armazenar o string na Flash e acessá-lo posteriormente como parâmetro para uma função.
  • não existem ponteiros para rotinas
  • pilha reduzida, só para código
  • Ram muito reduzida
É realmente uma surpresa existir um compilar C para o PIC. O compilador CCS v3.2 tem as seguintes características:
  • "urso andando de bicicleta"
  • não possui linker, todo o programa deve estar em um único fonte (#include pode ser usado para dividir o fonte em vários arquivos)
  • váriaveis auto (inclusive parâmetros) são implementadas como static
  • para aproveitar melhor a Ram, o compilador analisa a árvore de chamada de funções e usa a mesma posição de Ram para variáveis que não existem simultaneamente
  • IDE bem simples, com um Wizard para criar o projeto
  • Depurador e simulador integrados
  • variáveis inteiras dos tipos int1, int8, int16 e int32. int1 é um bit, o compilador agrupa variáveis deste tipo em bytes.
  • subconjunto da biblioteca C padrão e mais funções específicas de controle do hardware

Nenhum comentário: