## c't-Projekte - Mailinglisten

[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

### [ct-bot] make-Target für Bibliothek

Absender: Simon Siemens
Datum: Do, 12.05.2011 19:30:21

    Hi Timo,

    dieser Patch enthÃlt ein neues make-Target. Es baut eine statische
    Bibliothek aus den C-Datei in

          * ct-Bot (auÃer ct-Bot.c),
          * mcu,
          * pc und
          * ui.

    Dieser Patch fÃgt nur das make-Target hinzu. Eine entsprechende
    Konfiguration fÃr die Eclipse-Buildumgebung kommt im nÃchsten Patch.

    Im Moment wird die Bibliothek nur gebaut, aber noch nicht genutzt. (Man
    kÃnnte sie ja dazu nutzen, ct-Bot.elf usw. zu erzeugen.) Sie zu nutzen
    wÃrde nur etwa 3 Zeilen Ãnderung im Makefile erfordern. Ich kann sie
    gerne nachliefern. Nun aber zuerst zum Weshalb und Wozu.

    Der ct-Bot-Code bietet eine umfangreiche Infrastruktur fÃr verschiedene
    Roboterverhalten. Wenn man diese aber nicht nutzen will, ist der Ãbrige
    Teil dennoch generell einsetzbar. Er bietet einige Hilfskomponenten und
    die MÃglichkeit, einen Simulator zu nutzen. Wir wollen unsere Studenten
    damit experimentieren lassen, ohne dass sie die volle
    ct-Bot-Infrastruktur brauchen, verstehen und einrichten mÃssen. (Es sind
    komplette ProgrammieranfÃnger.) Deshalb arbeiten wir gerade daran, von
    der Infrastruktur eine Bibliothek (je eine Archivdatei fÃr die PC- und
    die MCU-Variante) zu erstellen und fÃr verschiedene Linux-Distributionen
    (im Moment OpenSUSE und Ubuntu) mit Hilfe des OpenSUSE Build Service zu
    paketieren.

    GruÃ, Simon

    Index: Makefile
    ===================================================================
    --- Makefile	(Revision 1786)
    +++ Makefile	(Arbeitskopie)
    @@ -41,6 +41,9 @@
     # Target file name (without extension).
     TARGET = ct-Bot

    +# Name of the library that contains the hardware abstraction layer
    +LIBRARY = libctbot.a
    +
     # Target Device, either pc or mcu, usually defined on commandline
     DEVICE ?= MCU
     #DEVICE ?= PC
    @@ -52,7 +55,10 @@

     SRCPC = pc/bot-2-sim_pc.c pc/botfs_pc.c pc/botfs-low_pc.c pc/botfs-tools_pc.c pc/cmd-tools_pc.c pc/delay_pc.c pc/display_pc.c pc/eeprom_pc.c pc/ena_pc.c pc/init-low_pc.c pc/ir-rc5_pc.c pc/led_pc.c pc/mini-fat_pc.c pc/mmc-emu_pc.c pc/motor-low_pc.c pc/mouse_pc.c pc/os_thread_pc.c pc/sensor-low_pc.c pc/tcp-server.c pc/tcp.c pc/timer-low_pc.c pc/trace.c

    -SRCCOM = bot-2-bot.c botfs.c command.c $(TARGET).c fifo.c init.c log.c map.c math_utils.c minilog.c mmc-vm.c motor.c pos_store.c sensor.c timer.c
    +SRCCOM = bot-2-bot.c botfs.c command.c fifo.c init.c log.c map.c math_utils.c minilog.c mmc-vm.c motor.c pos_store.c sensor.c timer.c
    +
    +SRCMAIN = $(TARGET).c
    +
     SRCUI = ui/gui.c ui/misc.c ui/rc5.c

     SRCLOGIC = bot-logic/behaviour_avoid_border.c bot-logic/behaviour_avoid_col.c bot-logic/behaviour_calibrate_pid.c bot-logic/behaviour_calibrate_sharps.c bot-logic/behaviour_cancel_behaviour.c bot-logic/behaviour_catch_pillar.c bot-logic/behaviour_classify_objects.c bot-logic/behaviour_delay.c bot-logic/behaviour_drive_area.c bot-logic/behaviour_drive_chess.c bot-logic/behaviour_drive_distance.c bot-logic/behaviour_drive_square.c bot-logic/behaviour_drive_stack.c bot-logic/behaviour_follow_line_enhanced.c bot-logic/behaviour_follow_line.c bot-logic/behaviour_follow_object.c bot-logic/behaviour_follow_wall.c bot-logic/behaviour_get_utilization.c bot-logic/behaviour_goto_obstacle.c bot-logic/behaviour_goto_pos.c bot-logic/behaviour_goto.c bot-logic/behaviour_gotoxy.c bot-logic/behaviour_hang_on.c bot-logic/behaviour_line_shortest_way.c bot-logic/behaviour_measure_distance.c bot-logic/behaviour_olympic.c bot-logic/behaviour_pathplaning.c bot-logic/behaviour_remotecall.c bot-logic/behaviour_scan.c bot-logic/behaviour_scan_beacons.c bot-logic/behaviour_servo.c bot-logic/behaviour_simple.c bot-logic/behaviour_solve_maze.c bot-logic/behaviour_transport_pillar.c bot-logic/behaviour_turn.c bot-logic/behaviour_ubasic.c bot-logic/bot-logic.c bot-logic/tokenizer.c bot-logic/ubasic_call.c bot-logic/ubasic_cvars.c bot-logic/ubasic_ext_proc.c bot-logic/ubasic.c
    @@ -65,7 +71,8 @@
     #else
     #	SRC = $(TARGET).c $(SRCCOM) $(SRCPC)
     #endif
    -SRC =$(SRCCOM) $(SRCUI) $(SRCPC) $(SRCMCU) $(SRCLOGIC)
    +SRCLIBRARY = $(SRCCOM) $(SRCUI) $(SRCPC) $(SRCMCU)
    +SRCBEHAVIOUR = $(SRCMAIN) $(SRCLOGIC)

     # List Assembler source files here.
    @@ -276,12 +283,14 @@
     MSG_COMPILING = Compiling:
     MSG_ASSEMBLING = Assembling:
     MSG_CLEANING = Cleaning project:
    +MSG_CREATING_LIBRARY = Creating library:

     # Define all object files.
    -OBJ = $(ASRC:.S=.o) $(SRC:.c=.o)
    +OBJLIBRARY = $(ASRC:.S=.o) $(SRCLIBRARY:.c=.o)
    +OBJBEHAVIOUR = $(ASRC:.S=.o) $(SRCBEHAVIOUR:.c=.o)

     # Define all listing files.
     LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
    @@ -319,6 +328,7 @@
     lss: $(TARGET).lss
     sym: $(TARGET).sym

    +library: $(LIBRARY)

     # Eye candy.
     # AVR Studio 3.x does not check make's exit code but relies on
    @@ -381,6 +391,11 @@
     	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof

    +$(LIBRARY): $(OBJLIBRARY)
    +	@echo
    +	@echo $(MSG_CREATING_LIBRARY) $@
    +	$(AR) $(ARFLAGS) $@ $^
    +	ranlib $@

     # Create final output files (.hex, .eep) from ELF output file.
     %.hex: %.elf
    @@ -411,10 +426,10 @@
     # Link: create ELF output file from object files.
     .SECONDARY : $(TARGET).elf
     .PRECIOUS : $(OBJ)
    -%.elf: $(OBJ)
    +%.elf: $(OBJBEHAVIOUR) $(OBJLIBRARY)
     	@echo
     	@echo $(MSG_LINKING) $@
    -	$(CC) --output $@ $(LDFLAGS) $(OBJ) $(MATH_LIB)
    +	$(CC) --output $@ $(LDFLAGS) $^ $(MATH_LIB)

     # Compile: create object files from C source files.
    @@ -454,10 +469,14 @@
     	$(REMOVE) $(TARGET).sym
     	$(REMOVE) $(TARGET).lnk
     	$(REMOVE) $(TARGET).lss
    -	$(REMOVE) $(OBJ)
    +	$(REMOVE) $(LIBRARY)
    +	$(REMOVE) $(OBJBEHAVIOUR)
    +	$(REMOVE) $(OBJLIBRARY)
     	$(REMOVE) $(LST)
    -	$(REMOVE) $(SRC:.c=.s)
    -	$(REMOVE) $(SRC:.c=.d)
    +	$(REMOVE) $(SRCBEHAVIOUR:.c=.s)
    +	$(REMOVE) $(SRCLIBRARY:.c=.s)
    +	$(REMOVE) $(SRCBEHAVIOUR:.c=.d)
    +	$(REMOVE) $(SRCLIBRARY:.c=.d)
     	$(REMOVE) .dep/*

    Index: Changelog.txt
    ===================================================================
    --- Changelog.txt	(Revision 1786)
    +++ Changelog.txt	(Arbeitskopie)
    @@ -1,2 +1,4 @@
     CHANGELOG fuer c't-Bot
     ======================
    +2011-05-12 Simon Siemens [simon.siemens@xxxxxxxx]: Neues make-Target library fÃr eine Bibliothek der Infrastrukturkomponenten (Hardwareabstraktion, OS, ...).
    +

- Antworten:
  - Re: [ct-bot] make-Target für Bibliothek
    - From: Simon Siemens

- Voriger (Datum): [ct-bot] main vereinfacht, Simon Siemens
- Nächster (Datum): [ct-bot] Eclipse-Build-Konfiguration für Bibliothek, Simon Siemens
- Voriger (Thread): Re: [ct-bot] main vereinfacht, Timo Sandmann
- Nächster (Thread): Re: [ct-bot] make-Target für Bibliothek, Simon Siemens
- Indizes:
  - Datum
  - Thread