Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ATMega Kompilator, programator. Jaka kombinacja dziala ?

yego666 18 May 2007 12:14 6096 24
  • #1
    yego666
    Level 33  
    Witam,

    Musze zrobic urzadzenie na ATMEGA 8. Jak dotad nie mialem doswiadczen ze srodowiskiem AVR, stad moje pytanie.

    Czy kombinacja nastepujacych elementow pozwoli mi skutecznie napisac i skompilowac program w C dla procesorow AVR ( ATMEGA8 w szczegolnosci )?

    AVRStudio 4.13 + WinAVR v.20070122 ?

    Jaki programator (najlepiej najprostszy ) moge sobie wykonac by wspolpracowal z tym softem bez problemow ?

    Poszukiwalem na Forum odpowiedzi na powyzsze pytania, ale zagadnien jest tyle, ze szczerze mowiac zgubilem sie w tym co z czym i dlaczego dziala a z czym nie dziala.
    Opinia kogos kto praktycznie sprawdzil te zagadnienia bedzie najcenniejsza.

    Pozdrawiam,
    Yego
  • Helpful post
    #2
    ziolek
    Level 14  
    Powinien działać.
    Na pewno AVRStudio 4.12 + WinAVR v.20070122 nie działa.

    Ja używam AVRStudio 4.12 + WinAVR z 2006 i wszystko działa ok.
    Jeśli chodzi o programator to jakiś ISP-STK 200/300. Ja kupiłem
    na allegro za ok. 16zł. A jeśli samemu to są projekty na elektrodzie.
  • #3
    yego666
    Level 33  
    ziolek wrote:
    Jeśli chodzi o programator to jakiś ISP-STK 200/300. Ja kupiłem na allegro za ok. 16zł. A jeśli samemu to są projekty na elektrodzie.
    Tez rozwazalem kupno tego urzadzenia, ale wole zrobic cos takiego samodzielnie. jedyny problem jaki mam to to ze nie wiem ktory schemat programatora ISP uzyc by byl prosty i dzialal z wyzej wymienionymi programami.
    Na Forum jest wiele roznych programatorow szeregowych i rownoleglych, ale nigdzie nikt nie pisze czy to zadziala w moim srodowisku.
    Prosze zatem o wskazanie konkretnego schematuu programatora ISP podpinanego n.p. do LPT, o ktorym wiadomo, ze zadziala. Nie chce robic czegos niesprawdzonego i potem bawic sie w detektywa wykrywajacego przyczyny niepowodzenia.
    Znow prosze o podpowiedz od kogos kto Wie na 100% a nie wydaje mu sie ze wie.

    Pozdrawiam,
    Yego

    P.S. Czy taki programator spelni moje wymogi ?
    http://www.amwaw.edu.pl/%7Eadybkows/elka/ispprog.html
  • Helpful post
    #6
    pubus
    Level 30  
    Kolejna działająca kombinacja...
    WinAVR 20060421 + AVR Studio 4.12 i niedawano upgrade do 4.13...
    Pewny i niestety dość drogi STK500...
  • #7
    yego666
    Level 33  
    Sciagnalem sobie soft wedle podanych zestawien, lecz zestaw ten ma wade tego typu, ze trzeba sie przebic przez troche dokumentacji, by stworzyc wlasciwy makefile, oraz pewnie jeszcze inne elementy sterujace srodowiskiem.
    Nigdy nie bylem fanem srodowisk GNU gdzie wszystko trzeba recznie sterowac, stad poszukalem zatem troszke w inna strone i znalazlem wersje Trial Imagecraft C.
    Wersja ta jest pelna przez 45 dni a pozniej naklada limit na rozmiar kodu.
    Czy ktos wie jak duzy jest ten limit i czy dotyczy zrodla czy kodu wynikowego, czy moze liczby plikow w projekcie ?
    A moze sa jeszcze inne dostepne srodowiska IDE z kompilatorem C, ktore mozna uzywac free lub z rozsadnym limitem rozmiaru kodu ?
    Prosze o podpowiedzi i ew. stosowne linki.
    Pozdrawiam, Yego
  • Helpful post
    #8
    fantom
    Level 31  
    yego666 wrote:
    Sciagnalem sobie soft wedle podanych zestawien, lecz zestaw ten ma wade tego typu, ze trzeba sie przebic przez troche dokumentacji, by stworzyc wlasciwy makefile, oraz pewnie jeszcze inne elementy sterujace srodowiskiem.

    Akurat WinAVR jest bardzo pro-userski bo jest dostarczany ze wszystkim a wiec nawet przykladowym makefilem ktorego modyfikacja dla wlasnych potrzeb nie powinna nastreczyc zadnego problemu. Jest nawet GUI do modyfikacji Makefile takze nie ma na co narzekac. Dodatkowo szereg programatorow (uisp, avr-dude, pony-prog) a do tego STK200 ktorego mozna zrobic przez bezposrednie polaczenie odpowiednich pinow LPT i pinow procka.
    Tutaj masz opis http://www.bsdhome.com/avrdude. Do tego prosty szybki manual do WinAVR http://winavr.sourceforge.net/WinAVR-user-manual.html i mozna zaczynac.
    Quote:

    Nigdy nie bylem fanem srodowisk GNU gdzie wszystko trzeba recznie sterowac

    Jak dla mnie to jest wlasnie sila a nie slabosc srodowisk GNU. Posiadanie pelnej kontroli nad tym co sie dzieje podczas kompilacji i linkowania to bardzo istotna zaleta. Wiekszosc srodowisk robi wiele rzeczy niejawnie a jak sie pojawiaja bledy to nikt nie wie o co chodzi.
  • #9
    yego666
    Level 33  
    Nie twierdze, ze WinAVR jest zly lub nieprzyjazny. Jedynie tyle, ze trzeba manualnie skonfigurowac pare rzeczy, ktore sa niezbedne do prawidlowego dzialania srodowiska.
    Sadzilem, ze trzeba sie -jak to zwykle bywa - przebic przez sterte manuali by dojsc do tego co i jak ustawic.
    Jesli zas jest to podane gdzies w manualu na tacy to dobrze.
    Niemniej nigdy poczatkujacy uzytkownik srodowiska nie wie czy juz ma wszystko ustawione jak trzeba czy jeszcze cos brakuje.

    Co do konfigurowalnosci srodowiska to zgadzam sie, ze jest to zaleta, ale nie mam czasu robic kolejnego doktoratu z konfiguracji WinAVR, ktory jest mi potrzebny tylko do jednego projektu.
    Stad poszukuje najprostszej i najszybszej drogi ominiecia "galkologii", ktora tak naprawde z programowaniem nie ma nic wspolnego, a tylko zabiera czas i rozprasza programiste. Oczywiscie jest to poglad bardzo uproszczony, ale na taki mnie oecnie stac ze wzgledu na brak czasu.

    Dziekuje za linki. Zaraz je skonsumuje :)

    Tak na marginesie to nie chodzi mi o dyskusje nad wyzszoscia swiat bozego narodzenia nad swietami wielkanocnymi, tylko o proste odpowiedzi na zadane przeze mnie powyzej pytania.

    Pozdrawiam, yego
  • #10
    fantom
    Level 31  
    yego666 wrote:

    Tak na marginesie to nie chodzi mi o dyskusje nad wyzszoscia swiat bozego narodzenia nad swietami wielkanocnymi, tylko o proste odpowiedzi na zadane przeze mnie powyzej pytania.

    Tak tez zrobilem choc przyznaje nie omieszkalem wcisnac troche opensource-owej ideologii ;-).
  • #11
    yego666
    Level 33  
    Fantom,

    skoro juz mowa o open-source'ach, to czy nie bedzie z mojej strony naduzyciem Twojej dobroci jesli poprosze - o ile posiadasz - o taki makefile i/lub inne potrzebne pliki konfigurujace srodowisko dla ATMega8 ?
    Zaoszczedziloby mi to sporo czasu a Tobie daloby poczucie spelnienia "open-sourceowej misji" ;).

    Dzieki, yego
  • Helpful post
    #12
    fantom
    Level 31  
    No dobra, udalo ci sie polechtac moja proznosc wiec moze zrobimy tak. Opisze tutaj przykladowego mekafile-a z nastawieniem na WinAVR, Atmega8 i STK200 tak aby inni tez cos z tego mieli. W zasadzie wszystko jest opisane w angielszczyznie no ale jakby kto nie umial to daje po polsku.
    Code:

    # Hey Emacs, this is a -*- makefile -*-
    #----------------------------------------------------------------------------
    # WinAVR Makefile Template written by Eric B. Weddington, J�g Wunsch, et al.
    #
    # Released to the Public Domain
    #
    # Additional material for this makefile was written by:
    # Peter Fleury
    # Tim Henigan
    # Colin O'Flynn
    # Reiner Patommel
    # Markus Pfaff
    # Sander Pool
    # Frederik Rouleau
    #
    #----------------------------------------------------------------------------
    # On command line:
    #
    # make all = Make software.
    #
    # make clean = Clean out built project files.
    #
    # make coff = Convert ELF to AVR COFF.
    #
    # make extcoff = Convert ELF to AVR Extended COFF.
    #
    # make program = Download the hex file to the device, using avrdude.
    #                Please customize the avrdude settings below first!
    #
    # make debug = Start either simulavr or avarice as specified for debugging,
    #              with avr-gdb or avr-insight as the front end for debugging.
    #
    # make filename.s = Just compile filename.c into the assembler code only.
    #
    # make filename.i = Create a preprocessed source file for use in submitting
    #                   bug reports to the GCC project.
    #
    # To rebuild project do "make clean" then "make all".
    #----------------------------------------------------------------------------


    # MCU name
    MCU = atmega8 [b]# tutaj definiujemy typ procesora[/b]


    # Processor frequency.
    #     This will define a symbol, F_CPU, in all source code files equal to the
    #     processor frequency. You can then use this symbol in your source code to
    #     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
    #     automatically to create a 32-bit value in your source code.
    F_CPU = 8000000 [b]# wartosc kwarcu z ktorego potem mozna korzystac do obliczen w programie[/b]


    # Output format. (can be srec, ihex, binary)
    FORMAT = ihex [b]# wyjsciowy format do programowania flasha[/b]


    # Target file name (without extension).
    TARGET = main [b]# tak sie bedzie nazywal plik wyjsciowy (z rozszerzeniem .elf, .coff lub .ihex). Jak komus nie pasuje to niech sobie zmieni[/b]


    # List C source files here. (C dependencies are automatically generated.)
    SRC = $(TARGET).c [b]#umiesc tutaj wszystkie pliki C nalezace do projektu. Jesli sa w innym folderze sciezka musi byc podana z tymi folderami[/b]


    # List Assembler source files here.
    #     Make them always end in a capital .S.  Files ending in a lowercase .s
    #     will not be considered source files but generated files (assembler
    #     output from the compiler), and will be deleted upon "make clean"!
    #     Even though the DOS/Win* filesystem matches both .s and .S the same,
    #     it will preserve the spelling of the filenames, and gcc itself does
    #     care about how the name is spelled on its command-line.
    ASRC = [b]# jak ktos ma jakies pliki assemblerowe ktore chce dodac do kodu niech tu je umiesci[/b]


    # Optimization level, can be [0, 1, 2, 3, s].
    #     0 = turn off optimization. s = optimize for size.
    #     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
    OPT = s [b]# optymalizacja wzgledem rozmiaru kodu[/b]


    # Debugging format.
    #     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
    #     AVR Studio 4.10 requires dwarf-2.
    #     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
    DEBUG = dwarf-2 [b]# flagi do debugowania[/b]


    # List any extra directories to look for include files here.
    #     Each directory must be seperated by a space.
    #     Use forward slashes for directory separators.
    #     For a directory that has spaces, enclose it in quotes.
    EXTRAINCDIRS = [b]# jesli macie jakies problemy z "niewidzialnoscia" plikow .h umiescie tutaj sciezki do tychze[/b]


    # Compiler flag to set the C Standard level.
    #     c89   = "ANSI" C
    #     gnu89 = c89 plus GCC extensions
    #     c99   = ISO C99 standard (not yet fully implemented)
    #     gnu99 = c99 plus GCC extensions
    CSTANDARD = -std=gnu99 [b]# standard jezyka jakbyscie mieli jakies niekompatybilnosci mozecie pozmieniac ale raczej nie ruszac[/b]


    # Place -D or -U options here
    CDEFS = -DF_CPU=$(F_CPU)UL [b]# tutaj nastepuje przekazanie symbolu F_CPU do wszystkich plikow ktore z niego korzystaja[/b]


    # Place -I options here
    CINCS = [b]# w zasadzie EXTRAINCDIRS zalatwia sprawe wiec mozna pominac[/b]



    #---------------- Compiler Options ----------------
    #  -g*:          generate debugging information
    #  -O*:          optimization level
    #  -f...:        tuning, see GCC manual and avr-libc documentation
    #  -Wall...:     warning level
    #  -Wa,...:      tell GCC to pass this to the assembler.
    #    -adhlns...: create assembler listing
    CFLAGS = -g$(DEBUG)
    CFLAGS += $(CDEFS) $(CINCS)
    CFLAGS += -O$(OPT)
    CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
    CFLAGS += -Wall -Wstrict-prototypes
    CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
    CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
    CFLAGS += $(CSTANDARD)  [b]# jak ktos chce koniecznie dodac inne flagi do kompilatora to tutaj[/b]


    #---------------- Assembler Options ----------------
    #  -Wa,...:   tell GCC to pass this to the assembler.
    #  -ahlms:    create listing
    #  -gstabs:   have the assembler create line number information; note that
    #             for use in COFF files, additional information about filenames
    #             and function names needs to be present in the assembler source
    #             files -- see avr-libc docs [FIXME: not yet described there]
    #  -listing-cont-lines: Sets the maximum number of continuation lines of hex
    #       dump that will be displayed for a given single line of source input.
    ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs,--listing-cont-lines=100 [b]# jak dodatkowe flagi asemblera to tutaj[/b]


    #---------------- Library Options ----------------
    # Minimalistic printf version
    PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min

    # Floating point printf version (requires MATH_LIB = -lm below)
    PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt

    # If this is left blank, then it will use the Standard printf version.
    PRINTF_LIB = [b]# jak ktos chce korzystac z printf-a to zapraszam do zmian tutaj[/b]
    #PRINTF_LIB = $(PRINTF_LIB_MIN)
    #PRINTF_LIB = $(PRINTF_LIB_FLOAT)


    # Minimalistic scanf version
    SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min

    # Floating point + %[ scanf version (requires MATH_LIB = -lm below)
    SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt

    # If this is left blank, then it will use the Standard scanf version.
    SCANF_LIB = [b]# podobnie ze scanf-em[/b]
    #SCANF_LIB = $(SCANF_LIB_MIN)
    #SCANF_LIB = $(SCANF_LIB_FLOAT)


    MATH_LIB = -lm [b]# biblioteka matematyczna jesli ktos uzywa, jak nie mozna zaremowac poprzez '#'[/b]



    #---------------- External Memory Options ----------------

    # 64 KB of external RAM, starting after internal RAM (ATmega128!),
    # used for variables (.data/.bss) and heap (malloc()).
    #EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff

    # 64 KB of external RAM, starting after internal RAM (ATmega128!),
    # only used for heap (malloc()).
    #EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff

    EXTMEMOPTS =  [b]# opcje do zewnetrznej pamieci RAM, jak ktss uzywa to niech tu zmieni, jak nie ma byc jak jest[/b]



    #---------------- Linker Options ----------------
    #  -Wl,...:     tell GCC to pass this to linker.
    #    -Map:      create map file
    #    --cref:    add cross reference to  map file
    LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
    LDFLAGS += $(EXTMEMOPTS)
    LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) [b]# flagi linkera, jak ktos sie czuje na silach niech zmienia, jesli nie to niech zostawi w spokoju[/b]



    #---------------- Programming Options (avrdude) ----------------

    # Programming hardware: alf avr910 avrisp bascom bsd
    # dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
    #
    # Type: avrdude -c ?
    # to get a full listing.
    #
    AVRDUDE_PROGRAMMER = stk200 [b]# programator stk200[/b]

    # com1 = serial port. Use lpt1 to connect to parallel port.
    AVRDUDE_PORT = lpt1    [b]# port rownolegly, jesli xp to moze sie przydac giveio[/b]

    AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).ihex  [b]# jaki plik bedzie wgrany do flasha[/b]
    #AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep [b]# a jaki do eepromu jesli korzystacie[/b]


    # Uncomment the following if you want avrdude's erase cycle counter.
    # Note that this counter needs to be initialized first using -Yn,
    # see avrdude manual.
    #AVRDUDE_ERASE_COUNTER = -y

    # Uncomment the following if you do /not/ wish a verification to be
    # performed after programming the device.
    #AVRDUDE_NO_VERIFY = -V

    # Increase verbosity level.  Please use this when submitting bug
    # reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
    # to submit bug reports.
    #AVRDUDE_VERBOSE = -v -v

    AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
    AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
    AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
    AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) [b]# flagi do programatora avr-dude jak ktos sie czuje na silach niech pozmienia[/b]



    [b]# to wszystko opcje do debugingu, jak ktos nie uzywa to moze pominac, jak ktos uzywa to niech sie douczy[/b]
    #---------------- Debugging Options ----------------

    # For simulavr only - target MCU frequency.
    DEBUG_MFREQ = $(F_CPU)

    # Set the DEBUG_UI to either gdb or insight.
    # DEBUG_UI = gdb
    DEBUG_UI = insight

    # Set the debugging back-end to either avarice, simulavr.
    DEBUG_BACKEND = avarice
    #DEBUG_BACKEND = simulavr

    # GDB Init Filename.
    GDBINIT_FILE = __avr_gdbinit

    # When using avarice settings for the JTAG
    JTAG_DEV = /dev/com1

    # Debugging port used to communicate between GDB / avarice / simulavr.
    DEBUG_PORT = 4242

    # Debugging host used to communicate between GDB / avarice / simulavr, normally
    #     just set to localhost unless doing some sort of crazy debugging when
    #     avarice is running on a different computer.
    DEBUG_HOST = localhost



    #============================================================================

    [b]# wszystkie komendy (programy) uzyte w skrypcie, jesli ktos z jakiegos powodu ma inne to niech sie dostosuje[/b]
    # Define programs and commands.
    SHELL = sh
    CC = avr-gcc
    OBJCOPY = avr-objcopy
    OBJDUMP = avr-objdump
    SIZE = avr-size
    NM = avr-nm
    AVRDUDE = avrdude
    REMOVE = rm -f
    COPY = cp
    WINSHELL = cmd

    [b]# definicje komunikatow pojawiajacych sie na ekranie[/b]
    # Define Messages
    # English
    MSG_ERRORS_NONE = Errors: none
    MSG_BEGIN = -------- begin --------
    MSG_END = --------  end  --------
    MSG_SIZE_BEFORE = Size before:
    MSG_SIZE_AFTER = Size after:
    MSG_COFF = Converting to AVR COFF:
    MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
    MSG_FLASH = Creating load file for Flash:
    MSG_EEPROM = Creating load file for EEPROM:
    MSG_EXTENDED_LISTING = Creating Extended Listing:
    MSG_SYMBOL_TABLE = Creating Symbol Table:
    MSG_LINKING = Linking:
    MSG_COMPILING = Compiling:
    MSG_ASSEMBLING = Assembling:
    MSG_CLEANING = Cleaning project:



    [b]# tu odbywa sie definicja jak kompilowac[/b]
    # Define all object files.
    OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)

    [b]# a tu tworzone sa listingi asemblerowe kodu[/b]
    # Define all listing files.
    LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)

    [b]# flagi zaleznosci miedzy modulami[/b]
    # Compiler flags to generate dependency files.
    GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d

    [b]# a tu wszystkie flagi zebrane do kupy[/b]
    # Combine all necessary flags and optional flags.
    # Add target processor to flags.
    ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
    ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)




    [b]# to sie wykonuje po wpisaniu make, mozna make all. Wszystkie taski z ktorych korzysta sa zdefiniowane ponizej[/b]
    # Default target.
    all: begin gccversion sizebefore build sizeafter end

    [b]# to tworzy wszystkie pliki koncowe[/b]
    build: elf hex eep lss sym

    [b]# odpowiednie taski[/b]
    elf: $(TARGET).elf
    hex: $(TARGET).hex
    eep: $(TARGET).eep
    lss: $(TARGET).lss
    sym: $(TARGET).sym


    [b]# kolejne taski[/b]
    # Eye candy.
    # AVR Studio 3.x does not check make's exit code but relies on
    # the following magic strings to be generated by the compile job.
    begin:
       @echo
       @echo $(MSG_BEGIN)

    end:
       @echo $(MSG_END)
       @echo

    [b]# wyswietla rozmiary odpowiednich plikow koncowych (ot taki bajer)[/b]
    # Display size of file.
    HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
    ELFSIZE = $(SIZE) --format=avr $(TARGET).elf

    sizebefore:
       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
       2>/dev/null; echo; fi

    sizeafter:
       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
       2>/dev/null; echo; fi


    [b]# wyswietla wersje kompilatora (bajer nr 2)[/b]
    # Display compiler version information.
    gccversion :
       @$(CC) --version


    [b]# tutaj faktycznie odbywa sie programowanie urzadzenia odpowiednimi plikami[/b]
    # Program the device. 
    program: $(TARGET).hex $(TARGET).eep
       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)

    [b]# uzywane przy debugingu[/b]
    # Generate avr-gdb config/init file which does the following:
    #     define the reset signal, load the target file, connect to target, and set
    #     a breakpoint at main().
    gdb-config:
       @$(REMOVE) $(GDBINIT_FILE)
       @echo define reset >> $(GDBINIT_FILE)
       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
       @echo end >> $(GDBINIT_FILE)
       @echo file $(TARGET).elf >> $(GDBINIT_FILE)
       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
    ifeq ($(DEBUG_BACKEND),simulavr)
       @echo load  >> $(GDBINIT_FILE)
    endif   
       @echo break main >> $(GDBINIT_FILE)

    debug: gdb-config $(TARGET).elf
    ifeq ($(DEBUG_BACKEND), avarice)
       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
       @$(WINSHELL) /c pause
    else
       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
       $(DEBUG_MFREQ) --port $(DEBUG_PORT)
    endif
       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)


    [b]# konwertuje elf-a na coff-a jakby kto chcial otworzyc w AVRStudio[/b]
    # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
    COFFCONVERT=$(OBJCOPY) --debugging \
    --change-section-address .data-0x800000 \
    --change-section-address .bss-0x800000 \
    --change-section-address .noinit-0x800000 \
    --change-section-address .eeprom-0x810000


    coff: $(TARGET).elf
       @echo
       @echo $(MSG_COFF) $(TARGET).cof
       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof


    extcoff: $(TARGET).elf
       @echo
       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof
       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof


    [b]# tutaj tworzy pliki sluzace do programowania[/b]
    # Create final output files (.hex, .eep) from ELF output file.
    %.hex: %.elf
       @echo
       @echo $(MSG_FLASH) $@
       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

    %.eep: %.elf
       @echo
       @echo $(MSG_EEPROM) $@
       -$(OBJCOPY) -j .eeprom --set-section-flags .eeprom=alloc,load \
       --change-section-lma .eeprom=0 -O $(FORMAT) $< $@

    [b]# listingi asemblerowe[/b]
    # Create extended listing file from ELF output file.
    %.lss: %.elf
       @echo
       @echo $(MSG_EXTENDED_LISTING) $@
       $(OBJDUMP) -h -S $< > $@

    [b]# spis symboli uzytych w programie[/b]
    # Create a symbol table from ELF output file.
    %.sym: %.elf
       @echo
       @echo $(MSG_SYMBOL_TABLE) $@
       $(NM) -n $< > $@


    [b]# tu jest tworzony wyjsciowy plik w formacie elf, podstawa do wszystkich innych plikow wyjsciowych[/b]
    # Link: create ELF output file from object files.
    .SECONDARY : $(TARGET).elf
    .PRECIOUS : $(OBJ)
    %.elf: $(OBJ)
       @echo
       @echo $(MSG_LINKING) $@
       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)

    [b]# tu sie odbywa faktyczna kompilacja plikow C...[/b]
    # Compile: create object files from C source files.
    %.o : %.c
       @echo
       @echo $(MSG_COMPILING) $<
       $(CC) -c $(ALL_CFLAGS) $< -o $@

    [b]# tworzenie asemblerowych z C (taki bajer nr 3)[/b]
    # Compile: create assembler files from C source files.
    %.s : %.c
       $(CC) -S $(ALL_CFLAGS) $< -o $@

    [b]# kompilacja asemblerowych[/b]
    # Assemble: create object files from assembler source files.
    %.o : %.S
       @echo
       @echo $(MSG_ASSEMBLING) $<
       $(CC) -c $(ALL_ASFLAGS) $< -o $@

    [b]# pliki po przejsciu przez preprocesor (bajer nr 4)[/b]
    # Create preprocessed source for use in sending a bug report.
    %.i : %.c
       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@

    [b]# za pomoca tego tasku czyscimy wszystko co zbedne (make clean)[/b]
    # Target: clean project.
    clean: begin clean_list end

    clean_list :
       @echo
       @echo $(MSG_CLEANING)
       $(REMOVE) $(TARGET).hex
       $(REMOVE) $(TARGET).eep
       $(REMOVE) $(TARGET).cof
       $(REMOVE) $(TARGET).elf
       $(REMOVE) $(TARGET).map
       $(REMOVE) $(TARGET).sym
       $(REMOVE) $(TARGET).lss
       $(REMOVE) $(OBJ)
       $(REMOVE) $(LST)
       $(REMOVE) $(SRC:.c=.s)
       $(REMOVE) $(SRC:.c=.d)
       $(REMOVE) .dep/*



    # Include the dependency files.
    -include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)


    # Listing of phony targets.
    .PHONY : all begin finish end sizebefore sizeafter gccversion \
    build elf hex eep lss sym coff extcoff \
    clean clean_list program debug gdb-config


    Autor nie ponosi odpowiedzialnosci za stosowanie sie do powyzszych uwag ;-)
    Mozna pytac lub poprawiac jakby byly jakies watpliwosci lub bledy. Chetnie odpowiem. Dziekuje za uwage.[/b]
  • #13
    yego666
    Level 33  
    No jesli projektant tego kawalka skryptu wyobrazal sobie, ze ktos samodzielnie namaluje cos takiego, to chyba sie nie myl od ubieglej wielkiej nocy ;)
    Juz od samego czytania przechodza mnie ciarki zgrozy po plecach a juz na mysl, ze sam mialbym to wymantykowac dostaje goraczki i spazmow :( i boje sie, ze zaczne sie moczyc w nocy :oops:

    Pisze wprawdzie w C, VHDlu, Shellu i kilku asemblerach, ale rozmiar tego molocha rzuca na kolana _/-\O.

    A tak powaznie, to wielkie dzieki za ten skrypt.
    Czy wystarczy go podstawic za przykladowy makefile i wszystko ruszy, czy jeszcze jakies Woodo trzeba odprawiac nad tym softem by ozyl i byl uzyteczny ?

    Pozdrawiam, yego

    P.s. Po tym traumatycznym przezyciu to chyba nie odwaze sie juz zlego slowa na Open-Source w zyciu powiedziec :)
  • #14
    fantom
    Level 31  
    Powinien dzialac od razu (tylko moje komentarze trzeba powyrzucac), jesli nie bedzie to daj znac-pomoge.

    Co do samego skryptu jest on strasznie przybajerowany i faktycznie jego wielkosc moze przyprawiac o dreszcze. Moze cie troche uspokoje pokazujac skrypt ktorego uzywam przy programowaniu ARM-ow.

    Code:

    ARCHITECTURE = -march=armv4t -mcpu=arm7tdmi
    ENDIANESS_GCC = -mlittle-endian
    ENDIANESS_AS = -EL
    CFLAGS = -g -I/home/pier/arm-gnu/arm-elf/include
    LDFLAGS = -L/home/pier/arm-gnu/arm-elf/lib -L/home/pier/arm-gnu/lib/gcc/arm-elf/3.4.3
    OUTPUT = --oformat=elf32-littlearm -o main.elf

    all:
            arm-elf-as ${ARCHITECTURE} ${ENDIANESS_AS} -o crt.o crt.S
            arm-elf-g++ ${ARCHITECTURE} ${ENDIANESS_GCC} -c classA.cpp
            arm-elf-gcc  ${ARCHITECTURE} ${ENDIANESS_GCC} ${CFLAGS} -c main.c int.c swi.c
    #       arm-elf-ld -Ttext=0x0 -Tdata=0x10000 --entry=_start -o ${LDFLAGS} ${OUTPUT}  crt.o main.o swi.o int.o classA.o -lc -lgcc
            arm-elf-ld  -T main.lds -Map Memory.map ${LDFLAGS} ${OUTPUT} crt.o main.o int.o classA.o swi.o -lc -lgcc
            arm-elf-objcopy --output-format=ihex main.elf main.ihex
    #       cat main.srec
            arm-elf-objdump -Dx -j .text -j .data -j .bss main.elf > objdump.txt
    clean:
            rm -rf *.o *.elf *.srec *.bin *.map *.ihex *.txt


    To w zasadzie wystarczy zeby miec skompilowany i gotowy do programownia kod. Molgbym ci napisac taki "minimalistyczny" Makefile ale dawno juz nie robilem w AVR wiec nie chcialbym o czyms zapomniec, lepiej bylo przerobic gotowca.
  • #15
    Electix
    Level 21  
    Siemka!

    Jeżeli chodzi o środowisko AVR Studio i programator własnej konstrukcji to na pewno zadziała to:
    http://pinokio3000.narod.ru/my_designs/AVR910_USB_Programmer_eng.htm
    Mimo wszystko żeby to odpalić potrzebujesz choćby najprostszego programatora.
    Działać Ci będzie na pewno STK500 tak jak kto wyżej o tym pisał i możesz też przyjrzeć się AVR Dragonowi.

    Pozdrawiam!
  • #16
    yego666
    Level 33  
    Fantom,

    Twoj skrypt ewidentnie chce dzialac, ale ma drobne klopoty.
    Po uruchomieniu Make All krzyczy ze w zaznaczonym miejscu :


    > "make.exe" all
    Makefile:331: *** missing separator. Stop.
    > Process Exit Code: 2

    ---------------------------------------------------------------------------
    Code:
    # Eye candy. 
    
    # AVR Studio 3.x does not check make's exit code but relies on
    # the following magic strings to be generated by the compile job.
    begin:
       @echo                                !!!!!!!!!!!!!!!!!!    [b]O W TEJ LINII[/b]
       @echo $(MSG_BEGIN)

    end:
       @echo $(MSG_END)
       @echo
    ---------------------------------------------------------------------------

    Co moze mu dolegac i jakiego separatora sie domaga ?

    W przykladowym Makefile wyglada to identycznie.

    pozdro, yego
  • #17
    fantom
    Level 31  
    Zapomnialem dodac ze Makefile to takie glupie zwierze ktore wymaga po kazdym tasku dwoch (lub jednej) tabulacji. Tak juz ma i koniec ;-). Wszedzie po taskach bedziesz musial to dodac.
  • #18
    yego666
    Level 33  
    Podmienilem to co sugerowales i chyba pomoglo, ale dostaje jeszcze blad , ktory nie wiem skad sie bierze :


    "C:/Program Files/WinAVR/utils/bin/sh.exe": -c: line 2: syntax error: unexpected end of file
    make.exe: *** [sizebefore] Error 258

    > Process Exit Code: 2


    Program mam tak prosty, ze w nim bledu nie ma ( chyba ze tez trzeba tam dwoch taulacji ).

    Doradzisz gdzie szukac, please ?
  • Helpful post
    #19
    fantom
    Level 31  
    W tasku sizebefore masz kawalek kodu shellowego ktory zwraca wielkosc pliku. Jesli ci to nie potrzebne to mozesz calosc zaremowac ale wydaje mi sie ze problem moze lezec w odwolaniu sie do /dev/null ktory pod Windowsem nie istnieje.
  • #20
    yego666
    Level 33  
    Dzieki Fantom za Twoja pomoc.
    Jestem juz prawie expertem w czytaniu makefajla :) .
    Fajna rzecz, tylko ze wciaz nie jest to to co tygrysy lubia najbardziej na swiecie. Wciaz borykam sie z jakimis dziwnymi komunikatami, ze przy porownaniu powinien byc operator taki albo siaki, ale nie bardzo widze co i jak jest nie OK.
    Nie mam czasu na razie na te zabawy. Moze kiedys gdy bede mial nastroj pokutny po jakims ciezkim przewinieniu, to wloze zgrzebna szate i zasiade znow do tego zagadnienia.


    Na razie powracam do pytania o latwe i przyjazne srodowisko dla AVR ATMEga8 w wersji demo, eval lub free.
    Mam Imagecraft C ale wciaz nie wiem jakie ma ograniczenia w wersji demo. Moze ktorys z kolegow podpowie.
    Pozdrawiam, yego
  • #21
    zumek
    Level 39  
    yego666 wrote:
    ...Na razie powracam do pytania o latwe i przyjazne srodowisko dla AVR ATMEga8 w wersji demo, eval lub free...

    Czytam ten topic i czegoś tu nie rozumiem :(
    Kilka razy wspomniano o tandemie WinAVR+AVRStudio , które do Twoich celów(jednorazowy(?) projekt) nadaje się wyśmienicie.Odpada zajmowanie się plikiem makefile , bo zostanie on wygenerowany automatycznie , po dokonaniu zaledwie kilku ustawień w opcjach projektu.Czegóż Ci więcej potrzeba :?:

    Piotrek
  • #22
    yego666
    Level 33  
    zumek wrote:
    Czytam ten topic i czegoś tu nie rozumiem :(
    Kilka razy wspomniano o tandemie WinAVR+AVRStudio , które do Twoich celów(jednorazowy(?) projekt) nadaje się wyśmienicie.Odpada zajmowanie się plikiem makefile , bo zostanie on wygenerowany automatycznie , po dokonaniu zaledwie kilku ustawień w opcjach projektu.Czegóż Ci więcej potrzeba :?:

    Piotrek

    Piotrze, jak dotad, nikt nie wspomnial o opcjach, ktore wygeneruja potrzebny makefile, stad zajmowalismy sie surowym plikiem ( raczej bez wiekszych sukcesow ). Jesli potrafisz podac co i gdzie ustawic, to bede wdzieczny. Niestety W Programmers Notepad opcje niewiele oferuja. Moze gdzies indziej trzeba ich szukac.
    Przyswiec w tej materii a zyskasz dozgonna wdziecznosc udreczonego grzesznika.
    Nie zalezy mi na tym by to byl taki a nie inny kompilator, byle byl prosty w obsludze i robil kompilacje jak nalezy. Chyba niewiele chce ?!

    Pozdrawiam, yego
  • #23
    fantom
    Level 31  
    Eh yego, yego. Gdyby nie to ze jestes zaawansowanym uzytkownikiem moglbym udzielic bury o nieumiejetenym czytaniu postow ale powstrzymam sie ;-).

    fantom wrote:

    Jest nawet GUI do modyfikacji Makefile takze nie ma na co narzekac

    Program nazywa sie Mfile i instaluje sie razem z WinAVR. Chciales gotowego Mekafile to podalem ale z tym programikiem pozmienial bys sobie wszystko to co ja zrobilem recznie. Zycze powodzenia.
  • #24
    yego666
    Level 33  
    fantom wrote:
    Eh yego, yego. [...]
    Jest nawet GUI do modyfikacji Makefile takze nie ma na co narzekac

    Program nazywa sie Mfile i instaluje sie razem z WinAVR. Chciales gotowego Mekafile to podalem ale z tym programikiem pozmienial bys sobie wszystko to co ja zrobilem recznie. Zycze powodzenia.


    Dotarlem do tego GUI jeszcze zanim sie rozgadalismy o temacie, ale byl z nim problem i nadal jest. Mianowicie uparcie twierdzi, ze typ procesora jest "Unknown" mimo ze ustawialem go i z GUI i z reki.
    Zwatpilem wiec w uzytecznosc tego GUI i dlatego o nim nie mowilismy.

    Nadal jednak nie potrafie spowodowac by typ procesora po kompilacji byl taki jak sobie zycze. Jest zawsze "Unknown" i basta.
    Nie ma potrzeby sie na mnie zloscic, bo czytac potrafie.
    Jesli mozesz to podpowiedz jak to obejsc.

    Pozdrawiam, yego

    Wyglada, ze problemy zwalczone :) .
    Programy sie kompiluja jak trzeba. Pozostaje jeszcze opanowac emulacje i programowanie kostek. Ale to juz pozniej gdy program bedzie skonczony.

    Dzieki koledze Fantom za ogromny wklad w temat i pomoc dzieki ktorej ruszylem z miejsca.

    pozdrawiam wszystkich nieszczesnikow zaczynajacych "przygode" z tym srodowiskiem ;)
  • #25
    fantom
    Level 31  
    Ale bynajmniej sie nie zezloscilem. To byla tylko taka drobna przyjacielska uszczypliwosc bez zadnych podtekstow ;-). Ciesze sie ze sie udalo. Jakbys mial jakies problemy to mozesz walic na priva. Jak bede w stanie to pomoge.

    Pozdro.