![]() |
Programação do LPC2378 usando o arm-elf-gcc Parte 1: Configuração do ambiente |
![]() |
Anterior | Indice | Próximo |
Neste semestre vamos usar um novo tipo de microprocessador, radicalmente diferente da arquitetura 8051 vista em semestres anteriores. Trata-se do LPC2378 da NXP com core tipo ARM7-TDMI. A arquitetura ARM (Advanced Risc Machine) é um processador RISC de 32 bits com um pipeline de 3 estágios, que permite executar uma instrução de 32 bits a cada ciclo de clock.
A sigla TDMI (Thumb Debugger Multiplier Instruction set) representa um conjunto de intruções alternativo (Thumb mode) de 16 bits. Processadores tipo ARM7-TDMI podem executar estes dois conjuntos de instruções: ARM ou Thumb. No modo ARM todas as instruções são tem 4 bytes. No conjunto de instruções Thumb a maioria das instruções é de 2 bytes.
O LPC2378 tabém tem várias interfaces incorporadas:
Existem vários compiladores e ambientes de desenvolvimento de software para este tipo de microprocessadors. Dentre eles podemos destacas tres sistemas. Dois ambientes integrados para Windows, incluido editor de texto compilador C, assembler, simulador e debugger: o da IAR e o da Keil. Estes são sistemas comerciais, com prossiblidades de se obter amostras grátis limitadas. Existe também a opção baseada em software livre, com o conjunto de ferramentas GNU-Gcc para a arquitetura ARM.
O pacote arm-elf-gcc pode ser obtido em
http://www.mikrocontroller.net/articles/ARM_GCC_toolchain_for_Linux_and_Mac_OS_X
Este pacote tem as ferramentas básicas para compilar e depurar programas para ARM, incluindo os seguintes programas:
arm-elf-gcc Compilador C
arm-elf-g++ Compilador C++
arm-elf-as Assembler.
arm-elf-ld Linker/loader
arm-elf-objcopy Copia convertendo formatos de código objeto
O pacote tambem inclui os arquivos #include e as bibliotecas básicas da linguagem C.
Para o desenvolvimento e teste dos programas para ARM algumas ferramentas adicionais também são necessárias:
Uma versão compilada para windows encontra-se em
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html#winarm
Neste site existem programas exemplo e explicações sobre o pacote WinARM.
O link
Para poder compilar os programas deste tutorial, eu fiz algumas modificações no pacote WinARM:
O pacote completo está no segunte arquivo auto-extraível com cerca de 18 MBytes:
Para poder compilar os programas a partir de qualquer diretório de trabalho é necessário que o diretório WinARM\bin esteja no caminho de busca por programas executáveis (path). Para alterar o path no Windows usa-se o programa regedit para editar a chave HKEY_CURRENT_USER/Environment/PATH. Geralmente é necessário reiniciar o Windows para que esta alteração do registry faça efeito. É necessário ter poderes de administrador para poder editar o registry. Quando não se tem este tipo de acesso, pode-se criar o path apenas para a sessão corrente da janela de comandos. Supondo que o WinARM tenha sido instalado em c:\WinARM pode-se configurar o caminho com o comando:
path=c:\WinARM\bin;%path%Este comando pode ser executado por um usuário comum, mas só faz efeito na janela de comando onde foi executado. Para automatizar este processo pode-se criar um arquivo batch com esta linha.
Outro método para configurar o caminho no Windows é usando o "Painel de Controle":
Para verificar se o compilador foi instalado com sucesso, pode-se executar o comando:
arm-elf-gcc -vO compilador deve escrever informações sobre a versão instalada.
Pegar o arquivo arm-elf-gcc-4.1.0-i586-4.tgz [29 MByte]
No Linux tipo Slackware pode-se usar o comando:
installpkg arm-elf-gcc-4.1.0-i586-4.tgzNas outras distribuições pode-se usar os comandos:
cd / tar xzf $OLDPWD/arm-elf-gcc-4.1.0-i586-4.tgz cd -
Estes comandos geralmente precisam ser executados como root. O arm-elf-gcc fica instalado dentro do /usr/local com tudo pronto para usar.
Tendo um conjunto de ferramentas de desenvolvimento instalado e configurado, pode-se criar o diretório específico para o nosso projeto.
Por ser um compilador poderoso, capaz de compilar grandes projetos de software, o processo de compilação de um programa usando o gcc passa por diversas etapas. Geralmente o comando básico gcc ja faz tudo o que é necessário para gerar o programa executável, mas quando se compila para outra arquitetura alvo, como o ARM, é necessário ter mais controle, ativando explicitamente as etapas da compilação.
Os programas gerados pelo gcc usam um formato intermediário chamado elf (Embeddable and Linkable Format), que são os arquivos objeto com extenção .o Vários arquivos elf podem ser reunidos, incluindo o código de partida crt.o e as bibliotecas para formar o programa executável. No conjunto de ferramentas gnu, quem faz isto é o linker/loader chamado ld. No pacote para ARM temos o arm-elf-ld. Geralmente o ld é chamado automaticamente pelo gcc, mas como queremos usar uma rotina especial de partida, chamaremos o arm-elf-ld explicitamente. O resultado do comando arm-elf-ld é um programa que no Linux seria executável, mas para programá-lo na Flash do LPC2378, devemos converter este arquivo para o formato *.hex. Isto é feito pelo programa arm-elf-objcopy. Finalmente o arquivo com extenção *.hex pode ser usado para gravar a memória Flash do LPC2378 usando o programa lpc21isp.
Seria cansativo e propenso a erros ter que fazer todo este procedimento manualmente toda a vez que queremos compilar o projeto. É possível automatizar esta compilação usando um script de shell ou no DOS, um arquivo de execução em lote tipo *.bat, porém a melhor solução é usar o comando make.
O comando make usa um arquivo chamado Makefile, que descreve os procedimentos necessários para compilar o projeto.
O arquivo a02_pisca_led.zip contém a estrutura básica para o nosso primeiro projeto para o LPC2378 copilado com o arm-elf-gcc. Ao ser expandido (com unzip a02_pisca_led.zip no linux, ou com o Win-zip no Windows), ele cria um diretório chamado a02_pisca_led/ contendo os seguintes arquivos:
Para compilar e testar o programa use o seguinte procedimento:
unzip mon23.zip
cd mon23
make
make ispEste comando grava o programa na memória do LPC2378 e executa o programa. O LED deve começar a piscar. Pode ser necessário apertar no botão de Reset para que a execução do programa se inicie corretamente.
make clean
make tserApós este comanodo o computador estará executando um terminal ltser, com o programa armazenado na RAM a partir do endereço 0x40000000. Pode-se então executar o programa usando o comando P do monitor.
Anterior | Indice | Próximo |