Utilizando a IDE Code::Blocks com SDCC

Após muito tempo de pesquisas e tentativas, finalmente consegui configurar o Code::Blocks para usar o SDCC de forma satisfatória.

Então, neste post vamos configurar o Code::Blocks para utilizar o compilador SDCC (Small Device C Compiler). Além de todas as vantagens do uso de uma IDE, como auto-completar, o Code::Blocks compila automaticamente todas as bibliotecas necessárias e gera o arquivo .hex pronto para utilizar com apenas 1 clique.

Após instalar o Code::Blocks, vamos configurar o compilador SDCC:

  1. Acesse Settings→Compiler;
  2. Selecione o Compilador: Small Device C Compiler;
  3. Na aba “Compiler settings”, deixe tudo desmarcado;
  4. Na aba “Linker Settings”, deixe tudo em branco, remova qualquer biblioteca se tiver;
  5. Faça o mesmo na aba “Search directories” e suas sub-abas;
  6. Na aba “Toolchain executables”, corrija o diretório do compilador, no meu caso é “C:\Program Files\SDCC”;
  7. Na aba “Other Settings”, clique em “Avanced Options” e Yes;
    1. Na aba “Commands”, selecione o comando “Link object files to executable” e, no campo “Command line macro”, remova “-o $exe_output”;
    2. Faça o mesmo para “Link object files to console executable”
    3. Faça o mesmo para “Link object files to native executable”;
  8. Você pode clicar em “Set as default” se só usa o sdcc;

Feita a configuração do compilador, criamos um novo projeto. Nesse novo projeto fazemos as configurações locais.

Para não ter que fazer toda a configuração a seguir, você pode baixar um modelo de projeto. Assim, basta abrir e alterar/compilar. Mas, se quiser entender como funciona, siga os passos abaixo.

Aqui temos algumas ressalvas:

workspace1

  • Você deve ter uma pasta de trabalho, a qual contem os seus projetos, um em cada pasta, e as bibliotecas compartilhadas numa outra pasta, assim:
    • workspace (minha pasta de trabalho)libs (bibliotecas compartilhadas)
      • projeto_1
      • projeto_2

 

Parte 2

Vamos criar um projeto. No Code::Blocks, vá em File→New Project:

  1. Selecione “Empty project”;
  2. Clique em Go e em Next;
  3. Dê um nome, de preferência sem espaços e outros caracteres que não sejam letras, números e underline;
  4. Selecione a pasta “workspace”. Não crie uma pasta para seu projeto lá, o Code::Blocks irá fazer isso usando o nome que você deu ao projeto;
  5. Clique em Next;
  6. Desmarque a opção ‘Create “Debug” configurations’ e clique em Finish;
  7. Adicione um novo arquivo ao seu projeto em File→New→Empty File ou usando o ícone “New File”. A IDE perguntará se deseja salva, clique em Yes e salve na mesma pasta do projeto. Salve como main.c, pois usaremos esse nome novamente depois.
  8. Crie outros dois arquivos, picsetup.c e picsetup.h;
  9. Vá em Project→Properties;
    1. Na aba “Build targets”
      1. Altere Type para Native;
      2. Apague o Output filename (deixe em branco);
      3. Desmarque “Auto-generate filename extension;
      4. Clique OK;
  10. Vá em Project→Build Options;
    1. Na aba Compiler Settings e na sub-aba Compiler Flags, marque PIC 16-bit (p18f452…). Use PIC 14-bit se seu pic for da Familia 16F;
    2. Na sub-aba Other compiler options acrescente: –use-non-free -p18f4550 -I ../libs. Veja que incluímos o diretório de bibliotecas compartilhadas ‘libs’. Também indicamos qual é o pic a ser programado.
    3. Na aba “Linker settings” acrescente “main.c” no campo “Other linker options”;
  11. Abra o Arquivo main.c e vá em File→Properties, na aba Build, desmarque “Compile File” e “Link File”

Coloque o código de exemplo nos arquivos que foram criados:

main.c

NOTA: evite LED = !LED, por algum motivo, o SDCC não gera o código corretamente.

picsetup.h

 

picsetup.c

 

Salve os arquivos e clique em Build→Rebuild.

Prefira usar sempre o Rebuild, pois o Code::Blocks pode não detectar alterações das bibliotecas.

O resultado deve ser o seguinte:

 

Os passos que envolvem o arquivo main.c foram necessários para que o Code::Blocks executasse a seguinte linha de comando:

sdcc.exe    -mpic16 –use-non-free -p18f4550 -I ../libs    main.c   obj\Release\picsetup.o

De outro modo, o compilador iria primeira gerar um arquivo objeto (-c main.c -o main.o) e depois tentar linkar. E, quando você precisar usar bibliotecas como stdio (para printf, por exemplo), obteria um erro dizendo que falta a biblioteca. Executando a linha acima, o compilador encontra as bibliotecas corretas automaticamente.

Dúvidas, entre em contato ou deixe um comentário.

2 comentários sobre “Utilizando a IDE Code::Blocks com SDCC”

  1. Gostei muito de sua pagina.
    Só que não consegui rodar nenhum programa para fazer o arquivo hex .
    Gostaria que mandasse uma copia de algum projeto que use 18f4550 com arquivo de configuração.
    Agradeço pelo que puder fazer por mim.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *