Ferramentas open-source para pic
- por Sergio Prado
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