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

[bootloader][m16]Bootloader rs232 atmega16l 8MHz

krzysiek_p 30 Maj 2010 11:52 3348 14
REKLAMA
  • #1 8132870
    krzysiek_p
    Poziom 14  
    Witam kolegów. Pilnie potrzebuję bootloadera do atmegi16 @ 8MHz. Kiedyś bawiłem się z megaloadem, z tym, że nie potrafiłem go skompilować dla 16MHz (bo tyle wtedy używałem), ale znalazłem gdzieś hexa. Fajnie by było, gdyby ktoś potrafił to skompilować na 8MHz, bo mam atmege16l. http://www.microsyl.com/index.php/2010/03/30/megaload/#more-320 to jest strona megaload
  • REKLAMA
  • REKLAMA
  • #3 8133103
    Konto nie istnieje
    Poziom 1  
  • #4 8133261
    asembler
    Poziom 32  
    Najlepiej napisac program w pełni relokowalny.
  • #5 8133284
    Konto nie istnieje
    Poziom 1  
  • #6 8133292
    kemot55
    Poziom 31  
    Program bootloadrera jest ładowany na końcu pamięci. W chwili uruchomienia programu użytkownika wykonywany jest skok z boot'a do adresu zero (czyli na początek pamięci) (albo gdzie tam chcesz - zależy tylko od własnych preferencji i ustawień w linkerze). Największa zabawa z boot'em polega na jednoczesnym czytaniem i pisaniem do pamięci flash - i tu trzeba troszkę uważać.
    Oczywiście należy też pamiętać o przerwaniach odpowiednio modyfikując rejestr MCUCR (o ile dobrze pamiętam) wchodząc do boot'a a przy wyjściu po prostu przywracając stan rejestru tak jak po resecie. W każdym razie działa OK i nie wymaga zbyt wiele zachodu przy uruchomieniu.
  • #7 8133335
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #8 8134293
    tmf
    VIP Zasłużony dla elektroda
    O ile adresy FLASH wykorzystywane przez program i bootloader się nie pokrywają to tak. Bootloader może być formalnie w dowolnym miejscu FLASHa, tylko sama instrukcja SPM musi być w tzw. sekcji NRWW, która jest na końcu pamięci - jej adres i wielkość wybiera się fusebitami.
    assembler jak zwykle wie, że gdzieś dzwoni tylko nie wie gdzie. O ile dla urządzeń z max 8kB FLASH teoretycznie można napisać w pełni relokowalny kod, to dla urządzeń z większą ilością pamięci jest to nieefektywne/niemożliwe (ograniczona długość instrukcji skoków względnych). Dodatkowym problemem byłaby alokacja zmiennych w pamięci, np. w C wymuszałoby to użycie wyłącznie zmiennych lokalnych, alokowanych na stosie, co i tak niewiele by zmieniło bo pewne sekcje są umieszczane przez linker pod stałymi adresami. A z przyczyn oczywistych na AVR nie stosuje się bootloadera obsługującego zaawansowane formaty takie jak elf czy exe, co umożliwiałoby umieszczenie kodu pod dowolnym adresem.
  • #9 8134743
    ktrot
    Poziom 20  
    Cytat:
    ...tylko sama instrukcja SPM musi być w tzw. sekcji NRWW, która jest na końcu pamięci - jej adres i wielkość wybiera się fusebitami.

    Nie. Adres NRWW jest stały dla danego uC i sekcja NRWW jest wielkości największego boot bloku, który potencjalnie można zadeklarować.
    Nie wystarczy aby SPM (i jej otoczenie!) była w sekcji NRWW - musi być umieszczona w sekcji boot, która to sekcja może ale nie musi się pokrywać z NRWW (adres boot się właśnie wybiera fusebitami).
    Oczywiście rację ma kol. tmf, że bootloader (jako program) może być w dowolnym miejscu flash dodam ponadto, że nie jest konieczne ustawianie resetu na skok do sekcji bootloadera.
  • #10 8134928
    tmf
    VIP Zasłużony dla elektroda
    To prawda, przyjąłem pewne uproszczenie, faktycznie raczej powinno się mówić o rozmiarze i pozycji boot loadera - tyle, że to jest trochę nieprecyzyjne w tym kontekście. Bo musimy odróżnić boot loader jako program (który może być w dowolnym miejscu z wyjątkiem wspomnianej instrukcji SPM), od boot loadera, rozumianego jako specjalny obszar pamięci, w którym jest instrukcja SPM wykonywana.
  • #11 8228930
    krzysiek_p
    Poziom 14  
    Witam, problem kompilacji bootloadera powrócił - prosiłbym teraz o wersję 16MHz dla atmegi8, tą z możliwością programowania EEPROMu i LOCKBITów :) Oczywiście znowu będzie pomógł, chętnie sam bym to zrobił, ale totalnie tego nie ogarniam :(
  • #12 8228947
    rpal
    Poziom 27  
    kol atom w avrstrudio w opcjach projektu definiujesz sobie segment w pamięci Flash i nazwie oraz adresie zależnym od ustawienia fusów. Natomiast w programie w obsłudze bootloadera tę część kodu która odpowiada za jej obsługę wpisujesz np coś takiego
    BOOTLOADER_SECTION
    void boot_loader(void){

    i wszystko co się za tym znajduje zostanie umieszczone w tym właśnie obszarze pamięci. Co się podczas startu stanie to już zależy od Ciebie i tego co w tym fragmecie programu zawrzesz, nap. skok do main .:) chyba nic nie pomyliłem .
  • REKLAMA
  • Pomocny post
    #13 8235765
    markosik20
    Poziom 33  
    krzysiek_p napisał:
    Witam, problem kompilacji bootloadera powrócił - prosiłbym teraz o wersję 16MHz dla atmegi8, tą z możliwością programowania EEPROMu i LOCKBITów :)


    W załączniku Atmega8, 16Mhz,9600bps,eeprom,lockbit :wink:.
  • #14 8235859
    gaskoin
    Poziom 38  
    to jest kompilacja z megaload czy sam pisałeś bootloader?
  • #15 8235866
    markosik20
    Poziom 33  
    gaskoin napisał:
    to jest kompilacja z megaload czy sam pisałeś bootloader?


    Z Megaload.
REKLAMA