1 Comentário

Compilando C para 8051 com SDCC

SDCC

ÍNDICE DE CONTEÚDO

Com tantos ARM Cortex, MSP430 e Arduinos por aí, fica difícil pensar em utilizar um núcleo tão antigo quanto o 8051. No entanto, esse velho amigo ainda tem seu espaço nas universidades e em algumas aplicações muito específicas. Apesar de se tratar de um núcleo dos primórdios do desenvolvimento embarcado microcontrolado, não precisamos necessariamente trabalhar com ele fazendo uso apenas de Assembly.

Neste artigo vamos apresentar uma ferramenta Open Source que se propõe a trabalhar com esses "pequenos dispositivos". Estamos falando do SDCC (Small Device C Compiler). Esse compilador também é capaz de compilar para outros núcleos, como o Z80, 68HC08, e até mesmo nossos amigos PIC16 e PIC18. No entanto, vamos nos ater ao núcleo que deixou o SDCC conhecido, nosso amigo 8051.

8051

Criado pela Intel em 1980, esse núcleo possui tão somente 128 Bytes de memória RAM e 4KB de memória ROM. Hoje ainda é fabricado por uma série de empresas de semicondutores, como por exemplo:

FabricantePart-numberRAMROMVelocidade
 AnalogADuC841  2.304 Bytes 62 KBytes20 MIPS @ 20MHz
 AtmelAT89S51  128 Bytes4 KBytes2 MIPS @ 24MHz
 NXP P89LPC933 256 Bytes 4 KBytes9 MIPS @ 18MHz

Cada fabricante adiciona novas funcionalidades ao dispositivo, como o portas de comunicação SPI, I2C, novos timers, mais memória Flash e RAM. No entanto, seu funcionamento permanece o mesmo.

Pinagem do 8051 em encapsulamento DIP.
Figura 1: Pinagem do AT89S51 em encapsulamento DIP.

SDCC

O projeto desse compilador começou em 1995, quando Sandeep Dutta precisava desenvolver para uma pequena placa com um 8051 que havia desenvolvido. Demorou 3 anos para o lançamento da sua primeira versão, na época em uma pequena página do Geocities. Assumiu a licença GPL logo nas suas primeiras versões, hoje compilando para uma série de outros processadores.
sdcc-02
Figura 2: SDCC.

Hoje, o SDCC é o único compilador C open-source compatível com o núcleo 8051. É capaz de compilar projetos complexos, como o port do FreeRTOS para o 8051 da Silicon Labs.

Port do FreeRTOS para o C8051F120, da Silicon Labs, com SDCC.
Figura 3: Port do FreeRTOS para o C8051F120, da Silicon Labs.

Hello World

Nossa proposta aqui não é estudar o 8051, e sim conhecer o SDCC. Portanto, vamos utilizar a biblioteca 8051.h presente no compilador e fazer uso de port digital P1.0 do dispositivo. Faremos um fonte que piscará um LED, nada mais simples. O código será:

Esse exemplo será salvo com o nome exemplo.c para que possamos compilar. Como o núcleo 8051 é o padrão para esse compilador, não há a necessidade de indicar qual o microcontrolador utilizado neste caso. Dessa forma, a linha de comando fica conforme abaixo.

Compilando nosso projeto exemplo com SDCC.
Figura 4: Compilando nosso projeto exemplo com SDCC.

Podemos perceber que o compilador gerou uma série de arquivos durante o processo. São eles:

Nome 
exemplo.asmFonte em código Assembly.
exemplo.ihxSaída em formato Intel HEX. Objeto que será convertido para gravação.
exemplo.lkArquivo Linker Script. Uma vez que ele não exista, o compilador cria um padrão.
exemplo.mapMapa de memória dos módulos carregados. 
exemplo.memSumário da memória do dispositivo.
exemplo.relArquivo objeto criado pelo Assembly. 
exemplo.rst
exemplo.lst
Arquivos de listagem criados, contendo informações da linkedição. 
exemplo.symListagem de símbolos. 

Embora não seja fundamental, algumas linhas do arquivo IHX criado podem não estar alinhadas. Isso pode causar problemas na hora da gravação. Dessa forma, é conveniente reempacotar o arquivo, de forma a deixar a memória alinhada. Para isso, o SDCC possui uma ferramenta chamada PACKIHX. Podemos executar essa função com a linha abaixo:

Exemplo de uso do PACKIHX com SDCC.
Figura 5: Exemplo de uso do PACKIHX.

Referências

SDCC Compiler User Guide

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Software » Compilando C para 8051 com SDCC
Comentários:
Notificações
Notificar
guest
1 Comentário
recentes
antigos mais votados
Inline Feedbacks
View all comments
Wandery Ramos
31/03/2020 16:00

Olá Francesco Sacco. Muito legal esse artigo sobre o compilador SDCC, eu havia lido sobre ele em um livro de linguagem C para 8051, do Nicolosi. Seria muito legal fazer um artigo que mostre o uso também para os microcontroladores PIC. Eu estava pesquisando sobre os compiladores e alternativas de projetos para microcontroladores, o problema é que as ferramentas de desenvolvimento, como por exemplo, o CCS Compiler, o Mikro C, são ferramentas com um valor considerável, até o mesmo o compilador da própria Microchip. Talvez outros fabricantes ofereçam alternativas que seja free. Valeu.

Talvez você goste:

Séries

Menu

WEBINAR
 

Soluções inteligentes para acionamento de MOSFETs/IGBTs com família STDRIVE

Data: 08/10 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link