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

AVR Camera Rev 4.2 - skompilowany kod źródłowy daje co innego niż hex

DaKKi 19 Mar 2014 03:48 2301 8
  • #1 13419716
    DaKKi
    Poziom 16  
    Witam,
    Kupiłem niedawno na ebayu płytkę AVR Camera Rev 4.2 wraz z wyświetlaczem i kamerą. Po rozpakowaniu przesyłki i podłączeniu zasilania (usb) zestaw od razu działał w ten sposób, że na wyświetlaczu pojawiał się obraz z kamery a po naciśnięciu przycisku zapisywał go w pamięci eeprom.
    Dostałem wraz z nim rzekomo kod źródłowy - zamieszczam w załączniku.
    Chciałem poczynić jego zmiany (między innymi dodać obsługę kart microSD), ale napotkałem problem - po skompilowaniu za pomocą WinAvr (w programie Programmers Notepad) kodu źródłowego i zaprogramowaniu kontrolera płytka nie działa (na wyświetlaczu krzaki).

    Co więcej przy programowaniu uC nie przechodzi weryfikacji - sama kompilacja przebiegła bez błędów (log z programowania za pomocą Programmers Notepada):

    > "make.exe" program
    avrdude -p atmega32 -P usb     -c usbasp    -U flash:w:main.hex 
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude: Device signature = 0x1e9502
    avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
    avrdude: erasing chip
    avrdude: reading input file "main.hex"
    avrdude: input file main.hex auto detected as Intel Hex
    avrdude: writing flash (10526 bytes):
    
    Writing | ################################################## | 100% 3.21s
    
    avrdude: 10526 bytes of flash written
    avrdude: verifying flash memory against main.hex:
    avrdude: load data flash data from input file main.hex:
    avrdude: input file main.hex auto detected as Intel Hex
    avrdude: input file main.hex contains 10526 bytes
    avrdude: reading on-chip flash data:
    
    Reading | ################################################## | 100% 2.92s
    
    avrdude: verifying ...
    avrdude: verification error, first mismatch at byte 0x247a
             0x7a != 0xff
    avrdude: verification error; content mismatch
    
    avrdude done.  Thank you.
    
    make.exe: *** [program] Error 1
    
    > Process Exit Code: 2
    > Time Taken: 00:06


    Na szczęście przed modyfikacjami zgrałem program który był tam fabrycznie - waży 11,262kB. Po przywróceniu go na płytkę wszystko działa ok jak poprzednio.
    Mój skompilowany hex waży 10,526kB, a sprzedawca zarzeka się, że jest to dokładnie ten kod źródłowy który był 'fabrycznie' na płytce.
    Jedyne co zmieniłem przed kompilacją to plik Makefile, a dokładnie 2 linijki dotyczące programatora (posiadam tylko usbasp, domyślnie był stk500 na com1):
    AVRDUDE_PROGRAMMER = usbasp
    
    # com1 = serial port. Use lpt1 to connect to parallel port.
    AVRDUDE_PORT = usb    # programmer connected to serial device


    Fusebitów nie zmieniałem (są tak jak były domyślnie).

    Czy jest możliwość, że rzeczywiście program który był domyślnie w mikroprocesorze jest wynikowym dokładnie tego źródłowego który dostałem tylko 'inaczej' skompilowanym ? Może zawiniła zmiana programatora w Makefile ?
    Co powinienem zrobić aby skompilować go poprawnie ?

    Z góry dzięki za pomoc.
    Pozdrawiam !
  • #2 13420118
    piotrva
    VIP Zasłużony dla elektroda
    Po pierwsze odczytany plik zapewne zawiera całą pamięć, wraz z pustymi komórkami na końcu - to może być przyczyną większego rozmiaru.

    Dalej może program kompilowany był na innej wersji kompilatora - to czasem rodzi pewne trudności.
  • #3 13436253
    DaKKi
    Poziom 16  
    Miałeś racje. Program kompiluje się i działa na kompilatorze z WinAvr 20060421. Niestety wersja ta nie obsługuje programatora usbasp a na chwile obecną innego nie mam. Zrobiłem tak - zainstalowałem winavr20060421, skompilowalem program, odinstalowalem winavr20060421 i zainstalowalem winavr20100110 za pomoca ktorego zaprogramowalem procek i smiga. Z tym, że rozwiązanie to na dłuższą metę jest bezsensowne, znacie jakiś sposób aby dodać obsługę usbasp do winavr20060421 ? Dwóch winavr na jednym komputerze też się nie da zainstalować bo nadpisuje się najnowsza wersja kompilatora.
  • #4 13436370
    tmf
    VIP Zasłużony dla elektroda
    A co ma obsługa usbasp wspólnego z kompilatorem? Kompilator tworzy plik elf, z którego powstaje hex, który przy pomocy avrdude wgrywasz do mikrokontrolera. Skompiluj program tym starym kompilatorem, a wynikowy hex wgraj czym zechcesz. Pytanie brzmi co w tym kodzie jest takiego, że po skompilowaniu nowszym kompilatorem nie działa. I tym bym się martwił, bo na dłuższą metę chyba nie chcesz korzystać z kompilatorów mających 4-8 lat?
  • #5 13436464
    DaKKi
    Poziom 16  
    Hmm...to ma wspólnego, że usbasp jest programatorem który działa w zasadzie tylko z AVRDUDE, ten zaś jest składnikiem WinAvr, a samego AVR Dude który działał by z usbasp i pod windowsem 7 nie mogę nigdzie znaleźć. Pozostaje więc instalacja całego WinAvr a ten zainstaluje mi się z odpowiednio nowszym kompilatorem. Poza tym najwygodniej modyfikuje się kod gdy z tego samego programu (Programmers Notepad, składnik WinAvr) można jednym kliknięciem od razu zaprogramować procesor i przetestować program. O to co będzie na dłuższą metę się nie martwię bo mam do zrobienia jeden projekt na podstawie tego zestawu, drobna rzecz, a walcze z tym już ponad tydzień.
  • #6 13436501
    tmf
    VIP Zasłużony dla elektroda
    To sobie skopiuj nowsze AVRDude na miejsce tego starego i po problemie. Poza tym można sobie AVRDude ściągnąć ze strony projektu i samemu skompilować, co zajmie jakieś 10 minut - wystarczy pobrać mingw.
  • #7 13436562
    DaKKi
    Poziom 16  
    Niestety ręczna podmiana plików avrdude.exe i avrdude.conf z winavr2010 do winavr2006 sprawia, że avrdude się wysypuje i już nic się nie da potem zaprogramować...
  • #8 13436605
    piotrva
    VIP Zasłużony dla elektroda
    A kto Ci broni użyć zewnętrznego programatora AVRDude, albo dodać w WinAVR wywołanie nowego AVRDude z wiersza poleceń?
  • #9 13436629
    DaKKi
    Poziom 16  
    Problem rozwiązany, pomogło skopiowanie avrdude z wersji z 2009 roku. Dzięki za wskazówki.
REKLAMA