logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATMega Kompilator, programator. Jaka kombinacja dziala ?

yego666 18 Maj 2007 12:14 6435 24
REKLAMA
  • #1 3896823
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    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
  • REKLAMA
  • Pomocny post
    #2 3896898
    ziolek
    Poziom 14  
    Posty: 149
    Pomógł: 4
    Ocena: 12
    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 3897091
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    ziolek napisał:
    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
  • Pomocny post
    #5 3897419
    jj
    Poziom 19  
    Posty: 145
    Pomógł: 42
    yego666 napisał:
    P.S. Czy taki programator spelni moje wymogi ?
    http://www.amwaw.edu.pl/%7Eadybkows/elka/ispprog.html
    Nie próbowałem współpracy tego programatora z AVRstudio. Ale z programem który można pobrać z wspomnianej strony działa mi bez zarzutu.

    Pozdrawiam,
    Jacek
  • REKLAMA
  • Pomocny post
    #6 3897629
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 138
    Ocena: 31
    Kolejna działająca kombinacja...
    WinAVR 20060421 + AVR Studio 4.12 i niedawano upgrade do 4.13...
    Pewny i niestety dość drogi STK500...
  • #7 3904957
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    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
  • Pomocny post
    #8 3905414
    fantom
    Poziom 31  
    Posty: 1649
    Pomógł: 108
    Ocena: 41
    yego666 napisał:
    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.
    Cytat:

    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 3905817
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    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
  • REKLAMA
  • #10 3905832
    fantom
    Poziom 31  
    Posty: 1649
    Pomógł: 108
    Ocena: 41
    yego666 napisał:

    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 3905925
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    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
  • Pomocny post
    #12 3906044
    fantom
    Poziom 31  
    Posty: 1649
    Pomógł: 108
    Ocena: 41
    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.
    
    # 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.
  • #13 3906097
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    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 3906108
    fantom
    Poziom 31  
    Posty: 1649
    Pomógł: 108
    Ocena: 41
    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.

    
    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 3906269
    Electix
    Poziom 21  
    Posty: 462
    Pomógł: 46
    Ocena: 6
    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 3906289
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    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

    ---------------------------------------------------------------------------
    # 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 3906302
    fantom
    Poziom 31  
    Posty: 1649
    Pomógł: 108
    Ocena: 41
    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 3906429
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    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 ?
  • Pomocny post
    #19 3906450
    fantom
    Poziom 31  
    Posty: 1649
    Pomógł: 108
    Ocena: 41
    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 3906709
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    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 3906877
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    yego666 napisał:
    ...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
  • REKLAMA
  • #22 3908065
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    zumek napisał:
    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 3908182
    fantom
    Poziom 31  
    Posty: 1649
    Pomógł: 108
    Ocena: 41
    Eh yego, yego. Gdyby nie to ze jestes zaawansowanym uzytkownikiem moglbym udzielic bury o nieumiejetenym czytaniu postow ale powstrzymam sie ;-).

    fantom napisał:

    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 3908239
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    fantom napisał:
    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 3908790
    fantom
    Poziom 31  
    Posty: 1649
    Pomógł: 108
    Ocena: 41
    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.

Podsumowanie tematu

✨ Dyskusja dotyczy wyboru środowiska programistycznego i programatora do pracy z mikrokontrolerem ATmega8. Zalecana kombinacja to AVR Studio 4.12 lub 4.13 wraz z WinAVR (wersje z 2006 lub 2007), które umożliwiają kompilację programów w C dla AVR. Wskazano, że WinAVR dostarcza przykładowe pliki makefile oraz narzędzia takie jak avrdude, uisp i pony-prog, które współpracują z różnymi programatorami ISP. Najprostsze programatory to STK200/300 lub STK500, które można kupić lub wykonać samodzielnie według dostępnych schematów (np. z elektrod lub stron lancos.com). Podkreślono, że programatory takie jak PonyProg działają dobrze, ale nie zawsze współpracują z AVR Studio. Wskazano również na problematyczność ręcznej konfiguracji makefile, jednak istnieje narzędzie Mfile do automatycznego generowania plików makefile w WinAVR. Autorzy dyskusji podkreślają, że środowisko GNU (WinAVR) daje pełną kontrolę nad procesem kompilacji, choć wymaga pewnej konfiguracji. Alternatywnie rozważano Imagecraft C w wersji trial, jednak brakowało informacji o ograniczeniach wersji demo. Wskazano także na programator AVR910 USB jako prostą konstrukcję współpracującą z AVR Studio. Problemy z makefile, takie jak błędy separatorów i składni, wynikają z wymagań dotyczących tabulacji i specyfiki systemu Windows (np. brak /dev/null). Ostatecznie autor potwierdził uruchomienie kompilacji i podziękował za pomoc.
Wygenerowane przez model językowy.
REKLAMA