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

attiny13 - File content is too big to fit in Flash memory!

MmadA 22 Mar 2013 22:10 1491 9
REKLAMA
  • #1 12097963
    MmadA
    Poziom 11  
    Próbuję skompilować i wrzucić na ATtiny13A PU program owslave. Program zbudowałem pod linuksem. Wygenerował mi się plik .hex, który jak widzę ma 5.8K. Tego hexa próbuję wrzucić na mikroprocesor przy pomocy programatora zl20prg pod windowsem. Programator poprawnie rozpoznaje mikroprocesor jednak przy próbie programowania dostaję:

    Cytat:
    Entering programming mode.
    Programming mode enabled.
    File content is too big to fit in Flash memory!
    Programming mode disable.

    W datasheet widzę:

    Cytat:
     High Endurance Non-volatile Memory segments
    – 1K Bytes of In-System Self-programmable Flash program memory
    – 64 Bytes EEPROM
    – 64 Bytes Internal SRAM


    Czyli kod powinien być mniejszy niż 1K?

    Na w README owslave jest:

    Cytat:
    The core code implements the basic 1wire discovery methods.
    Code size is about 3k; some of that size is due to GCCs inability
    to deal with 8-bit integers sanely.
    Overdrive speed is not yet implemented.


    Czyli 3K. Za to w Makefile i w kodzie widzę że można skonfigurować żeby budował na ATtiny13... To powinno działać? W jaki sposób mam się zorientować czy hex wygenerowany przez gcc jest wystarczająco mały? Jak rozwiązać ten problem?
  • REKLAMA
  • Pomocny post
    #2 12098061
    Svavo
    Poziom 23  
    Powinieneś mieć po kompilacji plik *.map czy inny w którym zapisane są rozmiary poszczególnych sekcji. Ciebie interesuje sekcja Code / RO Data.
    Pozdro.
  • REKLAMA
  • #3 12098348
    MmadA
    Poziom 11  
    Rzeczywiście mam plik map (http://pastebin.com/55ShsJgu) ale szczerze powiedziawszy nie bardzo wiem jak to z niego wyczytać. Nie rzuciła mi się w oczy sekcja Code / RO Data.
  • #4 12099059
    Svavo
    Poziom 23  
    Podsumowanie powinno być na samym końcu - jeśli nie znajdziesz, wrzuć plik na forum.
  • REKLAMA
  • Pomocny post
    #5 12099073
    tmf
    VIP Zasłużony dla elektroda
    Można oczywiście patrzeć na plik map, ale prościej użyć programu avr-size/size z toolchaina gcc, który ci poda rozmiar programu.
    Jeśli kod jest większy niż 1kB to w żaden sposób do tego procka go nie wczytasz, można kod spróbować skrócić. To wymaga specyficznych opcji kompilacji, np. -mint8, poinformowania o 8 bitowym stosie i np. o braku kolizji przerwań ze stosem. Warto też wyciąć wektory przerwań i być może w ogóle kod startowy C - ale to wymaga dokładnej analizy programu. Być może sensowniejszym rozwiązaniem jest napisanie tego w asemblerze.
  • REKLAMA
  • #6 12099116
    BlueDraco
    Specjalista - Mikrokontrolery
    To już chyba lepiej użyć ATtiny45, że o jakimś tańszym od niego LPC111x nie wspomnę. ;)
  • #7 12099137
    MmadA
    Poziom 11  
    Plik map wkleiłem tutaj. Natomiast jeśli chodzi o avr-size to dostaję taki wynik:

    $ avr-size ds2408.hex 
       text	   data	    bss	    dec	    hex	filename
          0	   2102	      0	   2102	    836	ds2408.hex


    Po dodaniu -mint8 do CFLAGS spadło trochę:

    $ avr-size ds2408.hex 
       text	   data	    bss	    dec	    hex	filename
          0	   2088	      0	   2088	    828	ds2408.hex


    Rozumiem że wielkość musiałbym zbić do 1024?

    BlueDraco napisał:
    To już chyba lepiej użyć ATtiny45, że o jakimś tańszym od niego LPC111x nie wspomnę. ;)


    Gdybym to przewidział to można by tak zrobić. Ale po zobaczeniu w Makefile ATTiny13, kupiłem sobie kilka kostek i teraz nie chciałbym ich wrzucić do szuflady bez choćby spróbowania. ;)
  • #8 12099194
    Svavo
    Poziom 23  
    W pliku README.txt jest info "Code size is about 3k"...
  • #9 12099227
    tmf
    VIP Zasłużony dla elektroda
    MmadA napisał:
    Plik map wkleiłem tutaj. Natomiast jeśli chodzi o avr-size to dostaję taki wynik:

    $ avr-size ds2408.hex 
       text	   data	    bss	    dec	    hex	filename
          0	   2102	      0	   2102	    836	ds2408.hex


    Po dodaniu -mint8 do CFLAGS spadło trochę:

    $ avr-size ds2408.hex 
       text	   data	    bss	    dec	    hex	filename
          0	   2088	      0	   2088	    828	ds2408.hex


    Rozumiem że wielkość musiałbym zbić do 1024?


    Tak, musiałby mieć <1024 bajtów, co będzie trudne. Ale w asemblerze uzyskasz to bez problemu, kiedyś popełniłem OW slave w asmie, nawet na ATTiny13 :) To było w początkach mojej kariery :) Kod bez problemu zmieścił się w pamięci i nawet sporo zostało. Jak odkopię kod to go wrzucę. Tylko mały problem - OW jest licencjonowany, mastera możesz sobie zrobić, slave nie - musisz użyć kostek Dallasa.
  • #10 12099257
    MmadA
    Poziom 11  
    tmf napisał:
    Tak, musiałby mieć <1024 bajtów, co będzie trudne. Ale w asemblerze uzyskasz to bez problemu, kiedyś popełniłem OW slave w asmie, nawet na ATTiny13 :) To było w początkach mojej kariery :) Kod bez problemu zmieścił się w pamięci i nawet sporo zostało.


    Byłbym wdzięczny. :)

    tmf napisał:
    Jak odkopię kod to go wrzucę. Tylko mały problem - OW jest licencjonowany, mastera możesz sobie zrobić, slave nie - musisz użyć kostek Dallasa.


    Tak, czytałem o tym. Tylko to co robię to raczej edukacyjna zabawka, także myślę problemów nie powinno być. Swoją drogą, czy to licencjonowanie ma jakieś podstawy prawne w Polsce (ale to już tak poza głównym tematem)?
REKLAMA