Eclipse + GNUARM

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Mensagempor xultz » 14 Ago 2007 13:32

Bom, para compilar o crt.s você não deve usar o arm-elf-gcc e sim o arm-elf-as.
O makefile é um script relativamente simples. No começo do arquivo você vai ver uma série de variáveis (como as CP e OD que são usadas depois com $(CP) e $(OD) por exemplo. Então, em relação à linha $(CP) $(CPFLAGS) main.out main.hex a primeira coisa a verificar se o comando CP que tá no começo arquivo existe, está no PATH, etc. Verifique se depois dele escrever ...copying se dá algum erro.
Se ele não escrever o ...copying, é porque ele não está sendo chamado.
O makefile tem várias seções, por exemplo deve ter uma seção chamada all: e outra chamada clean: Estas seções são executadas com o comando make all ou make clean, por exemplo. Pode ser que a seção onde está o comando de geração do hex tenha que ser chamada manualmente após o make. É possível modificar o makefile para que sempre que você der uma make, ele chame a seção que faça o hex.
Infelizmente estou falando no escuro, se você colar o makefile fica mais fácil ajudar. De qualquer maneira, se você pretende usar o gcc como compilador pro teu ARM, se prepare para estudar um pouco sobre ele e o gnu-make. Um livro bem bacana a ser lido é Programação para Linux em 24 horas. Infelizmente esse livro é uma mosca branca, e eu sou um feliz proprietário de um :)
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Eclipse + GNUARM

Mensagempor Gilsom » 14 Ago 2007 19:11

Xultz muito obrigado pelas explicacoes .Estou
començando a entender
eu gostaria de saber como e que faz quando eu
vou começar o projeto do zero.Por exemplo eu tenho
somente o arquivo main.c. Como eu faço para gerar
todos os outros Arquivos .por exemplo se eu coloco
somente o main.c e dou o comando
clein ou build aparece a seguinte mensagem: make all

no rule make targed "all .stop
e nao acontece mais nada,ja estou ficando careca de tanto
arrancar os cabelos.E por um acaso voce sabe como posso
fazer para adquirir este livro. Xultz muito obrigado pela
ajuda que voce tem dado a todos nos.

Gilsom
Gilsom
Nibble
 
Mensagens: 50
Registrado em: 15 Dez 2006 11:22

Mensagempor eletroinf » 15 Ago 2007 08:21

O Makefile é o seguinte (lembrando que esse programa eu peguei da lista yahoo gnuarm, só importei ele no Eclipse):


NAME = demo2148_blink_flash

CC = arm-elf-gcc
LD = arm-elf-ld -v
AR = arm-elf-ar
AS = arm-elf-as
CP = arm-elf-objcopy
OD = arm-elf-objdump

CFLAGS = -I./ -c -fno-common -O0 -g
AFLAGS = -ahls -mapcs-32 -o crt.o
LFLAGS = -Map main.map -Tdemo2129_blink_flash.cmd
CPFLAGS = -O ihex
ODFLAGS = -x --syms

all: test

clean:
-rm crt.lst main.lst crt.o main.o main.out main.hex main.map main.dmp

test: main.out
@ echo "...copying"
$(CP) $(CPFLAGS) main.out main.hex
$(OD) $(ODFLAGS) main.out > main.dmp

main.out: crt.o main.o demo2129_blink_flash.cmd
@ echo "..linking"
$(LD) $(LFLAGS) -o main.out crt.o main.o

crt.o: crt.s
@ echo ".assembling"
$(AS) $(AFLAGS) crt.s > crt.lst

main.o: main.c
@ echo ".compiling"
$(CC) $(CFLAGS) main.c



/************************************************/
Agora o arquivo crt.s
/* ***************************************************************************************************************

crt.s STARTUP ASSEMBLY CODE
-----------------------


Module includes the interrupt vectors and start-up code.

*************************************************************************************************************** */

/* Stack Sizes */
.set UND_STACK_SIZE, 0x00000004 /* stack for "undefined instruction" interrupts is 4 bytes */
.set ABT_STACK_SIZE, 0x00000004 /* stack for "abort" interrupts is 4 bytes */
.set FIQ_STACK_SIZE, 0x00000004 /* stack for "FIQ" interrupts is 4 bytes */
.set IRQ_STACK_SIZE, 0X00000004 /* stack for "IRQ" normal interrupts is 4 bytes */
.set SVC_STACK_SIZE, 0x00000004 /* stack for "SVC" supervisor mode is 4 bytes */



/* Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs (program status registers) */
.set MODE_USR, 0x10 /* Normal User Mode */
.set MODE_FIQ, 0x11 /* FIQ Processing Fast Interrupts Mode */
.set MODE_IRQ, 0x12 /* IRQ Processing Standard Interrupts Mode */
.set MODE_SVC, 0x13 /* Supervisor Processing Software Interrupts Mode */
.set MODE_ABT, 0x17 /* Abort Processing memory Faults Mode */
.set MODE_UND, 0x1B /* Undefined Processing Undefined Instructions Mode */
.set MODE_SYS, 0x1F /* System Running Priviledged Operating System Tasks Mode */

.set I_BIT, 0x80 /* when I bit is set, IRQ is disabled (program status registers) */
.set F_BIT, 0x40 /* when F bit is set, FIQ is disabled (program status registers) */


.text
.arm

.global Reset_Handler
.global _startup
.func _startup

_startup:

# Exception Vectors

_vectors: ldr PC, Reset_Addr
ldr PC, Undef_Addr
ldr PC, SWI_Addr
ldr PC, PAbt_Addr
ldr PC, DAbt_Addr
nop /* Reserved Vector (holds Philips ISP checksum) */
ldr PC, [PC,#-0xFF0] /* see page 71 of "Insiders Guide to the Philips ARM7-Based Microcontrollers" by Trevor Martin */
ldr PC, FIQ_Addr

Reset_Addr: .word Reset_Handler /* defined in this module below */
Undef_Addr: .word UNDEF_Routine /* defined in main.c */
SWI_Addr: .word SWI_Routine /* defined in main.c */
PAbt_Addr: .word UNDEF_Routine /* defined in main.c */
DAbt_Addr: .word UNDEF_Routine /* defined in main.c */
IRQ_Addr: .word IRQ_Routine /* defined in main.c */
FIQ_Addr: .word FIQ_Routine /* defined in main.c */
.word 0 /* rounds the vectors and ISR addresses to 64 bytes total */


# Reset Handler

Reset_Handler:

/* Setup a stack for each mode - note that this only sets up a usable stack
for User mode. Also each mode is setup with interrupts initially disabled. */

ldr r0, =_stack_end
msr CPSR_c, #MODE_UND|I_BIT|F_BIT /* Undefined Instruction Mode */
mov sp, r0
sub r0, r0, #UND_STACK_SIZE
msr CPSR_c, #MODE_ABT|I_BIT|F_BIT /* Abort Mode */
mov sp, r0
sub r0, r0, #ABT_STACK_SIZE
msr CPSR_c, #MODE_FIQ|I_BIT|F_BIT /* FIQ Mode */
mov sp, r0
sub r0, r0, #FIQ_STACK_SIZE
msr CPSR_c, #MODE_IRQ|I_BIT|F_BIT /* IRQ Mode */
mov sp, r0
sub r0, r0, #IRQ_STACK_SIZE
msr CPSR_c, #MODE_SVC|I_BIT|F_BIT /* Supervisor Mode */
mov sp, r0
sub r0, r0, #SVC_STACK_SIZE
msr CPSR_c, #MODE_SYS|I_BIT|F_BIT /* User Mode */
mov sp, r0

/* copy .data section (Copy from ROM to RAM) */
ldr R1, =_etext
ldr R2, =_data
ldr R3, =_edata
1: cmp R2, R3
ldrlo R0, [R1], #4
strlo R0, [R2], #4
blo 1b

/* Clear .bss section (Zero init) */
mov R0, #0
ldr R1, =_bss_start
ldr R2, =_bss_end
2: cmp R1, R2
strlo R0, [R1], #4
blo 2b

/* Enter the C code */
b main

.endfunc
.end
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Mensagempor eletroinf » 15 Ago 2007 08:29

Outra cosa xultz: O livro que tu referenciou é este?
http://livrosweb.com/book.php/id/1006
Ainda, pelo que entendi, usando o Gnuarm no linux não precisa instalar o Cygwin... fica mais fácil acho, digo, menos complicado sendo mais realista. Agora que preciso aprender mais sobre esse GNU é vero. Um bom livro não seria nada mal.
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Mensagempor xultz » 15 Ago 2007 11:19

O livro é exatamente este.
O meu é antigo, não sei se este passou por alguma revisão. Por exemplo, o primeiro capítulo do meu trata de controle de versões com RCS, sendo que este já foi superado pelo CVS, e este pelo SVN. As coisas caminham rapidamente mesmo...
No teu caso, somente metade dos capítulos é importante para trabalhar com firmware (a primeira metade), mas como o Linux está cada vez sendo mais usado em embarcados, mais cedo ou mais tarde a outra metade vai ser útil também :)
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Anterior

Voltar para ARM

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x