www.mikrocontroller.net

Forum: Compiler & IDEs Eclipse / managed makefile projekt / GDB problem


Autor: Dominique Holzwarth (Firma: ti burgdorf) (biker126)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallöchen...

erstmal ein paar "systemdaten" als übersicht:

uC: LPC2368 (ARM7)
GCC Toolchain: YAGARTO
Flash-Tool: openOCD
IDE: Eclipse 3.3 mit CDT (4.0 oder so)

ich hab mir von freeRTOS.org ein "ethernet" beispiel (freeRTOS + uIP) 
für eclipse  gcc  lpc gezogen (link: 
http://www.realtimeengineers.com/temp/FreeRTOS.org...) 
und das läuft auch einwandfrei.
allerdings verwendet das projekt ein klassisches "makefile" was ich 
eigentlich ziemlich mühsam zum warten finde.
W. Holzke hat ja in einem anderen Thread hier 
(Beitrag "GNUARM Eclipse Plugin") ein plug-in für die GNUARM 
toolchain (sollte für YAGARTO hoffentlich auch funktionieren) unter 
eclipse geschrieben, mit dem man "managed makefile projects" erstellen 
kann (d.h. eclipse erstellt ein internes makefile oder so).

ich hab also probiert anhand des folgenden makefiles die 
projekteinstellungen vorzunehmen. das hat offenbar auch soweit geklappt 
als dass das projekt kompiliert werden kann. wenn ich allerdings die 
*.bin datei flashe und mit GDB debuggen will, dann scheinen ganze object 
dateien (bzw. deren code) nicht vorhanden zu sein. man kann dort 
folglich nicht debuggen und das programm läuft auch nicht...

meine frage wär nun, ob mir jmd ein paar tips gegeben könnte wie ich so 
ein "managed makefile" projekt einstellen muss. ich will z.B. kein code 
im "thumb mode" ausführen sondern alles im "arm mode" (weil schneller). 
ich bin mir aber nicht so ganz sicher inwiefern ich die einstellungen 
von diesem makefile übernehmen muss oder nicht...

mfg d. holzwarth

p.s. ich weiss die frage ist n bisl kompliziert. wenn nötig liefer ich 
gern screenshots von meinen aktuellen eclipse einstellungen nach oder so 
:-)

p.p.s vielleicht kann man die frage auch auf folgende reduzieren:
woran kann's liegen, dass in einem *.bin file code-sequenzen (ganze 
files) "fehlen" obwohl die endsprechenden object-files erstellt werden? 
(ich würde mal auf ein linker-problem tippen...)
RTOS_SOURCE_DIR=../../../Source
DEMO_COMMON_DIR=../../Common/Minimal
DEMO_INCLUDE_DIR=../../Common/include
UIP_COMMON_DIR=../../Common/ethernet/uIP/uip-1.0/uip

CC=arm-elf-gcc
OBJCOPY=arm-elf-objcopy
LDSCRIPT=lpc2368.ld

LINKER_FLAGS=-mthumb -nostartfiles -Xlinker -oRTOSDemo.elf -Xlinker -M -Xlinker -Map=rtosdemo.map

DEBUG=-g
OPTIM=-O1


CFLAGS= $(DEBUG) \
    $(OPTIM) \
    -T$(LDSCRIPT) \
    -I . \
    -I $(RTOS_SOURCE_DIR)/include \
    -I $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_LPC23xx \
    -I $(DEMO_INCLUDE_DIR) \
    -I ./webserver \
    -I $(UIP_COMMON_DIR) \
    -D ROWLEY_LPC23xx \
    -D THUMB_INTERWORK \
    -mcpu=arm7tdmi \
    -D PACK_STRUCT_END=__attribute\(\(packed\)\) \
    -D ALIGN_STRUCT_END=__attribute\(\(aligned\(4\)\)\) \
    -fomit-frame-pointer \
    -mthumb-interwork
                    
THUMB_SOURCE= \
    main.c \
    ./ParTest/ParTest.c \
    ./LCD/portlcd.c \
    $(DEMO_COMMON_DIR)/BlockQ.c \
    $(DEMO_COMMON_DIR)/blocktim.c \
    $(DEMO_COMMON_DIR)/flash.c \
    $(DEMO_COMMON_DIR)/integer.c \
    $(DEMO_COMMON_DIR)/GenQTest.c \
    $(DEMO_COMMON_DIR)/QPeek.c \
    $(DEMO_COMMON_DIR)/dynamic.c \
    ./webserver/uIP_Task.c \
    ./webserver/emac.c \
    ./webserver/httpd.c \
    ./webserver/httpd-cgi.c \
    ./webserver/httpd-fs.c \
    ./webserver/http-strings.c \
    $(UIP_COMMON_DIR)/uip_arp.c \
    $(UIP_COMMON_DIR)/psock.c \
    $(UIP_COMMON_DIR)/timer.c \
    $(UIP_COMMON_DIR)/uip.c \
    $(RTOS_SOURCE_DIR)/list.c \
    $(RTOS_SOURCE_DIR)/queue.c \
    $(RTOS_SOURCE_DIR)/tasks.c \
    $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_LPC23xx/port.c \
    $(RTOS_SOURCE_DIR)/portable/MemMang/heap_2.c

ARM_SOURCE= \
    $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_LPC23xx/portISR.c \
    ./webserver/EMAC_ISR.c

THUMB_OBJS = $(THUMB_SOURCE:.c=.o)
ARM_OBJS = $(ARM_SOURCE:.c=.o)


all: RTOSDemo.bin

RTOSDemo.bin : RTOSDemo.hex
  $(OBJCOPY) RTOSDemo.elf -O binary RTOSDemo.bin
   
RTOSDemo.hex : RTOSDemo.elf
  $(OBJCOPY) RTOSDemo.elf -O ihex RTOSDemo.hex

RTOSDemo.elf : $(THUMB_OBJS) $(ARM_OBJS) boot.s Makefile
  $(CC) $(CFLAGS) $(ARM_OBJS) $(THUMB_OBJS) $(LIBS) boot.s $(LINKER_FLAGS) 

$(THUMB_OBJS) : %.o : %.c Makefile FreeRTOSConfig.h
  $(CC) -c $(CFLAGS) -mthumb $< -o $@

$(ARM_OBJS) : %.o : %.c Makefile FreeRTOSConfig.h
  $(CC) -c $(CFLAGS) $< -o $@

clean :
  rm $(THUMB_OBJS)
  rm $(ARM_OBJS)
  touch Makefile
  rm RTOSDemo.elf
  rm RTOSDemo.hex

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.