quarta-feira, 26 de junho de 2013

Ambiente de Desenvolvimento para PIC: SDCC+GPUtils

À medida que ficamos mais exigentes com os microcontroladores as complexidades começam a aparecer. Programar em Assembly começa a deixar espaços para algo mais produtivos... então vamos para um compilador.

Naturalmente pensa-se em C. Mas de qual fabricante? Bom o objetivo desse post não é tecer um comparativo entre uns e outros. Cada um tem uma visão de como tratar o código. Eu escolhi o SDCC por ser o mais disponível de todos. (É gratuito).

O SDCC


O SDCC surgiu como um projeto para a criação de um compilador que pelo menos facilitasse a vida de portar código entre diferentes microcontroladores (retargettable compiler). Vamos deixar de utopias, mas isso é praticamente impossível a menos que tenha uma camada que abstraia o processador. O SDCC suporta muitos dos microcontroladores comuns: PIC(8bits, 16bits), 8051, HC08, Z80. Com uma ou outra alteração que atenda às características intrínsecas do microcontrolador, podemos ter um código até razoavelmente portável...

Bom, mais informações sobre o projeto do sdcc: http://sdcc.sourceforge.net/

O problema do SDCC é que o manual é escasso e confuso. O projeto é bem intencionado. Tenho acompanhado as listas de developers por longa data e muito daquelas pessoas têm dado uma constante dedicação para criar e manter um produto com grande qualidade (Parabéns/Congrats/KUDO's). Para quem está iniciando programar com vistas ao SDCC, configurar o ambient e se achar nele é uma novela.

GPUtils


Não vou falar muito do projeto GPUtils pois pouco tenho interagido com o grupo que o desenvolve. Mas é uma alternativa para o MPASM (da microchip) e têm tido muito sucesso. Eu chamo o GPUtils de backend de PIC do SDCC.

O SDCC não gera código HEX. Mas gera o código assembly necessário para que o GPUtils/gpasm possa tratar e gerar o .HEX.

SDCC+GPUTILS: Instalação


Não vou ser purista em ambiente de desenvolvimento. Esse post é para instalações baseadas em WINDOWS. Fora a instalação que é específica para esse ambiente, o restante se aplica a qualquer sistema operacional.

Baixe e Instale o SDCC do site http://sourceforge.net/projects/sdcc/files/
Durante a instalação NÃO DEIXE QUE O INSTALADOR ADICIONE O SDCC AO PATH; e anote onde ele instalou!


Baixe e Instale o GPUtils do site http://sourceforge.net/projects/gputils/files/
Durate a instalação NÃO DEIXE QUE O INSTALADOR ADICIONE O SDCC AO PATH; e anote onde ele instalou!

Por que não deixar adicionar? Simples. No Windows ele irá colocar os caminhos como "C:\Program Files..." isto é com espaço em branco e isso dá dor de cabeça depois! :) Além do que, os utilitários do SDCC e GPUtils poderão gerar conflitos com os utilitários do Windows/DOS. Ok?

Nota: Estou assumindo que GPUtils e SDCC serão instalado no diretório padrão (C:\Program Files\...).

Configuração do Ambiente

Eu recomendo criar um arquivinho .CMD dentro do diretório bin do SDCC. Por exemplo, no meu sistema, o SDCC está instalado em c:\Program Files\SDCC; então eu tenho um arquivo C:\Program Files\SDCC\bin\setEnv.cmd com o seguinte conteúdo:

@echo OFF

echo SDCC Development Environment Setup
echo.

SET PATH=C:\WINDOWS;C:\WINDOWS\SYSTEM32
SET PATH=C:\PROGRA~1\SDCC\bin;%PATH%
SET PATH=C:\PROGRA~2\GPUTILS\bin;%PATH%


No Desktop, um atalho para o prompt do DOS (c:\Windows\System32\cmd.exe) com os parâmetros setados conforme  abaixo:



Nome/Name: SDCC Command Prompt
Destino/Target: C:\Windows\System32\cmd.exe /K ""c:\Program files\SDCC\bin\setenv.cmd""
Iniciar em/Start In: C:\Development\SDCC

Explicando...


O arquivo setenv.cmd é o acionador do nosso shell de desenvolvimento. Ele possui as principais entradas para configurar o ambiente tendo acesso ao básico do DOS, mais o SDCC e o GPUTILS. Se for necessário adicionar um outro caminho para algum utilitário que queira usar no desenvolvimento de seus códigos, em vez de poluir o PATH global do sistema, aqui é um bom lugar!

PROGRA~1, PROGRA~2? é... lembra que eu falei sobre nao deixar o windows adicionar o path? Pois bem, existe uma condição (digamos assim) que faz com que o sdcc tenha problemas durante a compilação/linkedição por causa dos espaços em branco. No meu sistema, "C:\Program Files" é registrado (convenção DOS 8.3) como c:\PROGRA~1, e é onde está o SDCC. "C:\Program Files (x86)" é c:\PROGRA~2. É onde encontra-se o GPUtils.

C:\Development\SDCC? Você não me falou disso! É o meu diretório de desenvolvimento. Crie um e coloque o startup do atalho apontanto para ele.


Para ver os nomes do seu sistema assim, abra o prompt do DOS e digite DIR /X :)

Testando...


Se fez como eu disse, você vai ter ter:
- No desktop: O atalho do Prompt do DOS - Agora SDCC Command Prompt;
- Dentro do \bin o arquivo setenv.cmd apontando para os locais corretos

Duplo clique no SDCC Command Prompt e...




Bingo!

Crie um pequeno programa: blink.c

#define __18F252
#include "pic18fregs.h"

#pragma config OSC=HS, OSCS=OFF, PWRT=OFF, BOR=OFF, WDT=OFF, CCP2MUX=OFF, LVP=ON, CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF

int main()
{
TRISB=0xFD;
while(1) {
PORTB=(PORTB^0x02);
}

}

Salve e compile

c:\Development\SDCC>sdcc --use-non-free -mpic16 -p18f252 blink.c
message: using default linker script "C:\Program Files (x86)\gputils\lkr\18f252_g.lkr"

c:\Development\SDCC>

Ignore a mensage do linker script - NÃO É ERRO! Inspecione o diretório (dir)

c:\Development\SDCC> dir
 Volume in drive C has no label.
 Volume Serial Number is 88EE-897E

 Directory of c:\Development\SDCC

06/26/2013  04:29 PM             .

06/26/2013  04:29 PM             ..

06/26/2013  04:29 PM             4,198 blink.asm
06/26/2013  03:03 PM               238 blink.c
06/26/2013  04:29 PM             8,192 blink.cod
06/26/2013  04:29 PM               630 blink.hex
06/26/2013  04:29 PM            13,111 blink.lst
06/26/2013  04:29 PM             4,833 blink.o
               6 File(s)         31,202 bytes
               2 Dir(s)  165,685,358,592 bytes free


All done! Você já tem um .HEX para queimar no PIC (não faça isso ainda, os fuses estão "a la loca"!):)

--//--

Próximos posts: Picolino (minhas placas chegaram!!!), Programação para PIC usando SDCC

Nenhum comentário:

Postar um comentário