Ferramentas open-source para pic

- por Sergio Prado

Categorias: Hardware, Linux Tags: , , , , , , , , , ,

Minha paixão pela comunidade open-source é recente. Foi de alguns anos para cá que comecei a entrar e entender este universo, cheio de gente competente, criativa e disposta a contribuir. Estas pessoas não buscam recompensas financeiras, mas sim conhecimento e troca de experiências. É muito mais fácil construir um castelo quando cada um esta disposto a ajudar com um tijolo. E esta é a filosofia que sigo quando penso em contribuir com meu pequeno tijolo aqui no blog.

E se você pensa em entrar para a área de sistemas embarcados, ou se aprofundar nela, não precisa gastar 1 centavo. A comunidade open-source está aí para te ajudar. Você quer aprender ou se aprofundar em microcontroladores PIC? Basta um PC, e você terá compiladores e ambientes de desenvolvimento completos, debuggers e simuladores, todos open-source. De desculpa pra aprender aqui, só sobra a preguiça. 

Quem quiser conhecer mais sobre a filosofia open-source pode começar lendo o artigo da Wikipedia aqui.

Vamos ver então algumas ferramentas open-source para desenvolvimento de sofware em C para microcontroladores PIC. Vou apenas apresentar as ferramentas, o processo de instalação e configuração vocês podem verificar diretamente no link da página da ferramenta.

Compilador C

Para o compilador C, usaremos o SDCC. O SDCC é um compilador ANSI-C otimizado para microcontroladores de pequeno porte, como 8051, Z80 e 68HC08. Segundo a página do projeto, o suporte a PIC está em andamento ("Work in progress"), mas todas as vezes que usei funcionou perfeitamente. Ele está disponivel sob a licensa GPL para Windows, Linux e Mac.

Ele é apenas um compilador C, e vai apenas transformar seus arquivos ".c" em arquivos ".asm". Então ele precisa do assembler e do linker para gerar o binário da sua aplicação.

Assembler e Linker

Para o assembler e o linker usaremos a ferramenta GPUTILS. Esta ferramenta é voltada exclusivamente para microcontroladores PIC, e além do assembler (gpasm) e do linker (gplink), também fornece uma ferramenta para criar bibliotecas (gplib).

Esta ferramenta também está disponivel através da licensa GPL para Linux, Windows e Mac.

IDE – Ambiente de Desenvolvimento

Para alguns, escolher um ambiente integrado de desenvolvimento (IDE) é quase a mesma coisa que escolher uma religião, e o defendem como tal. Para mim, é apenas uma forma de ser mais produtivo no seu ambiente de trabalho. Portanto, escolha uma ferramenta que se adapte melhor à você. Existem muitas ferramentas disponíveis, alguma específicas para PIC, dentre elas:

  • PiKdev, compativel com assembly para todos os PICs e linguagem C apenas para a série PIC18.
  • Piklab, é mais completo, bem parecido com o MPLAB, e totalmente integrado com SDCC e GPUTILS.
  • Eclipse, ambiente mais genérico, mas pode ser extendido através de plugins. Particularmente acho ainda um pouco lento e complexo para configurar e trabalhar com projetos. Mas uma vez configurado pode se tornar um ambiente de desenvolvimento altamente produtivo.
  • Kdevelop, ambiente com visual bem limpo e fácil de usar. É mais generico, mas para desenvolver em C está ótimo. É o que estou usando atualmente.

Gravadores

Se você tem um gravador PIC, existem algumas ferramentas open-source como o PICProg, compativel com os microcontroladores da série PIC12/16/18.

Simuladores

Um ótimo simulador open-source para PIC é o GPSIM. Também disponibilizado sob a licensa GPL, possui tudo o que um decente simulador precisa ter (breakpoints, execução passo-a-passo, disassembler, etc; e suporta até in-circuit emulator). Tem versões para Windows e Linux.

Integrando tudo

Vamos desenvolver aqui um projeto bem simples para exemplificar o uso de todas estas ferramentas.

Primeiro, nosso codigo-fonte em C, cujo único objetivo é acender um led ligado ao port B do PIC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "pic16/pic18f452.h"
 
/* configuration bits */
code char at __CONFIG1H _conf0 = _OSC_HS_1H;
code char at __CONFIG2L _conf1 = _PUT_OFF_2L & _BODEN_OFF_2L;
code char at __CONFIG2H _conf2 = _WDT_OFF_2H;
code char at __CONFIG3H _conf3 = _CCP2MUX_RC1_3H;
code char at __CONFIG4L _conf4 = _LVP_OFF_4L & _STVR_OFF_4L;
code char at __CONFIG5L _conf5 = _CP_0_OFF_5L & _CP_1_OFF_5L & _CP_2_OFF_5L & _CP_3_OFF_5L;
code char at __CONFIG5H _conf6 = _CPD_OFF_5H & _CPB_OFF_5H;
code char at __CONFIG6L _conf7 = _WRT_0_OFF_6L & _WRT_1_OFF_6L & _WRT_2_OFF_6L & _WRT_3_OFF_6L;
code char at __CONFIG6H _conf8 = _WRTD_OFF_6H & _WRTB_OFF_6H & _WRTC_OFF_6H;
code char at __CONFIG7L _conf9 = _EBTR_0_OFF_7L & _EBTR_1_OFF_7L & _EBTR_2_OFF_7L & _EBTR_3_OFF_7L;
code char at __CONFIG7H _conf10 = _EBTRB_OFF_7H;
 
void main( )
{
    TRISB = 0;
    PORTB = 0x01;
 
    while(1);
}

Vamos precisar de um arquivo Makefile para compilar, integrando o uso das ferramentas SDCC e GPUTILS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
teste.hex: teste.o
	gplink \
        -c \
        -s /usr/share/gputils/lkr/18f452.lkr \
        -o $@ \
        -m \
        $^ \
        -I /usr/share/sdcc/lib/pic16 \
        libdev18f452.lib
 
teste.o: teste.asm
	gpasm -c $<
 
crt018.o: crt018.asm
	gpasm -c $<
 
teste.asm: teste.c
	sdcc -S -mpic16 -p18f452 $<

Veja no Makefile que usamos a ferramenta "sdcc" para compilar o ".c" e gerar o ".asm", depois usamos o "gpasm" para converter o ".asm" em ".o", para então linkar usando o "gplink" e criar o arquivo binário ".hex".

Agora, se você tiver um gravador pode gravar usando o PICProg com o comando abaixo:

picprog –erase –burn –input teste.hex –pic /dev/ttyS0

Ou então você pode usar o GPSIM para simular sua aplicação, com o comando abaixo:

gpsim -pp18f452 -L. teste.hex

Exemplo de uma tela do GPSIM:

Muito bem, agora é com você! Aprenda, troque experiências e aproveite o que a comunidade open-source têm para lhe oferecer. E depois, a melhor forma de agradecer é deixar também sua contribuição para a comunidade!

Um abraço,

Sergio Prado

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.