Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Kompilacja programu dla AVR Atmega88p

radzio007 30 Maj 2017 19:34 1134 8
  • #1 30 Maj 2017 19:34
    radzio007
    Poziom 11  

    Witam.
    Mam problem ze skompilowaniem tego kodu Link. Po kilku godzinach męki z WinAVR (wywala błąd podczas kompilacji - szukałem, czytałem) muszę się poddać i poprosić o pomoc.
    W jaki sposób, a przede wszystkim czym, skompilować rzeczony program pod Windowsem.

    W powyższym programie chciałem zmienić tabele scancodów Amigi na scancody AT, więc gotowiec odpada.

    Z góry dziękując za pomoc pozdrawiam. :)

    0 8
  • #2 30 Maj 2017 20:09
    tronics
    Poziom 36  

    Cytat:
    wywala błąd podczas kompilacji - szukałem, czytałem

    To może by kolega ten błąd podał... równie dobrze może być kwestia wykorzystania -std=gnu99 zamiast -std=c99; bez danych możemy tylko wróżyć, a to nie forum dla cyganek.
    Jeśli chodzi o kompilowanie to zamiast WinAVR z toolchainem z 2010roku bodajże już lepsze będzie eclipse czy codeblocks i toolchain od Microchipa (atmela) ewentualnie atmel studio.

    0
  • #3 30 Maj 2017 20:23
    radzio007
    Poziom 11  

    tronics napisał:
    Cytat:
    wywala błąd podczas kompilacji - szukałem, czytałem

    To może by kolega ten błąd podał... równie dobrze może być kwestia wykorzystania -std=gnu99 zamiast -std=c99; bez danych możemy tylko wróżyć, a to nie forum dla cyganek.
    Jeśli chodzi o kompilowanie to zamiast WinAVR z toolchainem z 2010roku bodajże już lepsze będzie eclipse czy codeblocks i toolchain od Microchipa (atmela) ewentualnie atmel studio.


    Przepraszam, już podaje:
    Code:
    > "make.exe" all
    
    avr-gcc -std=gnu99 -ffixed-2 -ffixed-26 -ffixed-27 -Wall -Os -DF_CPU=13500000 -mmcu=atmega88 -c c64_keyb_sim.c -o c64_keyb_sim.o
    C:\Users\BB\AppData\Local\Temp/cctd51Hb.s: Assembler messages:
    C:\Users\BB\AppData\Local\Temp/cctd51Hb.s:16: Error: constant value required
    make.exe: *** [c64_keyb_sim.o] Error 1

    > Process Exit Code: 2
    > Time Taken: 00:01

    Atmel studio nie ogarniam, podobnie Eclipse - bardzo początkujący jestem.

    Edit:
    Po zmianie w "makefile" na -std=c99:
    Code:
    > "make.exe" all
    
    avr-gcc -std=c99 -ffixed-2 -ffixed-26 -ffixed-27 -Wall -Os -DF_CPU=13500000 -mmcu=atmega88 -c c64_keyb_sim.c -o c64_keyb_sim.o
    c64_keyb_sim.c:60: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'asm'
    c64_keyb_sim.c: In function '__vector_5':
    c64_keyb_sim.c:76: warning: implicit declaration of function 'asm'
    c64_keyb_sim.c:82: error: expected ')' before ':' token
    c64_keyb_sim.c: In function 'getCurrentColStates':
    c64_keyb_sim.c:90: error: 'currentColStatesHighByte' undeclared (first use in this function)
    c64_keyb_sim.c:90: error: (Each undeclared identifier is reported only once
    c64_keyb_sim.c:90: error: for each function it appears in.)
    c64_keyb_sim.c: In function 'setCurrentColStates':
    c64_keyb_sim.c:94: error: 'currentColStatesHighByte' undeclared (first use in this function)
    make.exe: *** [c64_keyb_sim.o] Error 1

    > Process Exit Code: 2
    > Time Taken: 00:00

    0
  • Pomocny post
    #4 30 Maj 2017 20:42
    tronics
    Poziom 36  

    Heh, nie sprecyzowałem, gnu99 to rozszerzenie standardu C99 - nieraz właśnie kod pisze się wykorzystując ficzery gnu przez co na domyślnych ustawieniach kompilatora (co oznacza bodajże -std=c99 właśnie) wywala błędy.
    Na aktualnym sprzęcie nie mam nic do atmela, wyedytuję resztę odpowiedzi gdy zainstaluję AS7.


    edit: sprawa wygląda tak, pobrałem archiwum z githuba, utworzyłem projekt w AS7. Skopiowałem tam pliki, w solution explorer dodałem wszystkie .h i .c i poszło.

    0
  • #5 31 Maj 2017 18:39
    radzio007
    Poziom 11  

    tronics napisał:

    edit: sprawa wygląda tak, pobrałem archiwum z githuba, utworzyłem projekt w AS7. Skopiowałem tam pliki, w solution explorer dodałem wszystkie .h i .c i poszło.

    Dzięki za pomoc. :)
    Czyli wywalam Eclipse (już co nieco zacząłem w nim łapać, choć wszystkie próby kompilacji z błędem ;p) i biorę się z powrotem za AS7.

    0
  • #7 31 Maj 2017 22:25
    radzio007
    Poziom 11  

    dondu napisał:
    Zaglądnij także do spisu treści na tej stronie.

    Zaglądnołem. Btw. fajna stronka. Jest progres - choć niewielki. :) Myślałem, że prościej będzie,;p ale do rzeczy.

    Robię tak:
    Cytat:
    1 uruchamiam AS7
    2 File>New>Project...
    3 wybieram "GCC C ASF Board Project"
    4 nazywam "1-org" i podaję ścieżkę
    5 OK
    6 wybieram Atmega88 (Select By Device) (narazie próbuje skompilować orginał bez zmiany CPU i scankodów)
    7 OK
    8 RMB na Solution '1-org'
    9 wybieram Add>Existing Item
    10 zaznaczam wszystkie pliki projektu (oprócz grafik i testu) i klikam Add
    11 rozwijam Solution Items i zaznaczam wszystkie pliki z rozszerzeniem .c i.h
    12 RMB Copy
    13 rozwijam 1-org i RMB na src Paste
    14 potwierdzam nadpisanie pliku main.c
    15 menu Project 1-org Properties
    16 zakładka Build
    17 zaznaczam Use External Makefile i podaje ścieżkę do niego
    18 zamykam okienko
    19 menu Build > Build Solution
    20 w okienku Error List - Open dokuments dostaje 0 of 1 warning, ale nie potrafię go otworzyć
    21 w katalogu pojawia się 9k plik main.elf i moj wyczekiwany ;p main.hex - 4k
    22 Hura! :D

    Dobrze? Nie za mały ten hex?

    Nastepnie zmieniam w pliku makefile (projekt ze zmianami w osobnym katalogu) "DEVICE = atmega88p",
    podobnie w pliku amiga_keyb_i.c, c64_keyb_sim.c, main.c zmieniam "(__AVR_ATmega88__)" na "(__AVR_ATmega88p__)".
    Wykonuje kroki od 1 do 19 - oczywiście inna nazwa projektu i katalog, a w kroku 6 procesorek z "p" wybieram.
    Dostaje:
    Code:
    ------ Build started: Project: 3-c_make, Configuration: Debug AVR ------
    
    Build started.
    Project "3-c_make.cproj" (default targets):
    Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
    Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "D:\Am2C64\3-c_make\3-c_make\3-c_make\3-c_make.cproj" (target "Build" depends on it):
       Using "RunCompilerTask" task from assembly "C:\Program Files (x86)\Atmel\Studio\7.0\Extensions\Application\AvrGCC.dll".
       Task "RunCompilerTask"
          Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
          C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe -C "D:\Am2C64\3-c_make" -f "Makefile" all




          make: Entering directory 'D:/Am2C64/3-c_make'
          avr-gcc -std=gnu99 -ffixed-2 -ffixed-26 -ffixed-27 -Wall -Os -DF_CPU=13500000 -mmcu=atmega88p -c main.c -o main.o
          main.c: In function 'startReset':
    D:\Am2C64\3-c_make\main.c(165,2): error: 'RESET_DDR' undeclared (first use in this function)
            RESET_DDR |= RESET_MASK;
            ^
    D:\Am2C64\3-c_make\main.c(165,2): info: each undeclared identifier is reported only once for each function it appears in
    D:\Am2C64\3-c_make\main.c(165,15): error: 'RESET_MASK' undeclared (first use in this function)
            RESET_DDR |= RESET_MASK;
                         ^
          main.c: In function 'endReset':
    D:\Am2C64\3-c_make\main.c(170,2): error: 'RESET_DDR' undeclared (first use in this function)
            RESET_DDR &= ~RESET_MASK;
            ^
    D:\Am2C64\3-c_make\main.c(170,16): error: 'RESET_MASK' undeclared (first use in this function)
            RESET_DDR &= ~RESET_MASK;
                          ^
          main.c: In function 'main':
    D:\Am2C64\3-c_make\main.c(178,2): error: 'RESET_DDR' undeclared (first use in this function)
            RESET_DDR &= ~RESET_MASK; // Input
            ^
    D:\Am2C64\3-c_make\main.c(178,16): error: 'RESET_MASK' undeclared (first use in this function)
            RESET_DDR &= ~RESET_MASK; // Input
                          ^
    D:\Am2C64\3-c_make\main.c(179,2): error: 'RESET_OUT' undeclared (first use in this function)
            RESET_OUT &= ~RESET_MASK; // Output zero whenever set to output
            ^
    D:\Am2C64\3-c_make\Makefile(76,1): error: recipe for target 'main.o' failed
          make: *** [main.o] Error 1
          make: Leaving directory 'D:/Am2C64/3-c_make'
       Done executing task "RunCompilerTask" -- FAILED.
    Done building target "CoreBuild" in project "3-c_make.cproj" -- FAILED.
    Done building project "3-c_make.cproj" -- FAILED.

    Build FAILED.
    ========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========


    Wersja "p" (nowsza) Atmegi mniej prądożerna tylko, czy jeszcze jakieś poważniejsze zmiany i programik się nie kompiluje (coś z portami jakby)? Co poprawić?
    Tu już może przydać się gotowiec choć wiem że to mało edukacyjne. Z C też jestem noga, :cry: raczej Bascom w stopniu podstawowym.

    0
  • Pomocny post
    #8 31 Maj 2017 23:00
    tronics
    Poziom 36  

    Cytat:
    Dobrze? Nie za mały ten hex?

    edit - teraz spojrzałem jeszcze raz i wychodzi 4.03KB hex, ten ze źródłami chyba podobnie więc pewnie dobrze.
    Cytat:
    Nastepnie zmieniam w pliku makefile (projekt ze zmianami w osobnym katalogu) "DEVICE = atmega88p",

    Niech kolega zmieni p na P.

    0
  • #9 31 Maj 2017 23:18
    radzio007
    Poziom 11  

    tronics napisał:

    Niech kolega zmieni p na P.

    Niewierze.;p Znaczy ;P - się wygłupiłem, no cóż bywa... :D
    Jeszcze raz podziękował. :)

    .hex dokładnie 4.423 u mnie.

    0