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 i atmega8/48/88/168/328... herezje...

23 Sty 2009 23:54 2273 3
REKLAMA
  • #1 6045181
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #2 6055464
    BoskiDialer
    Poziom 34  
    Jak to zwykło już, skoro atmel dał instrukcję lpm umożliwiającą dostęp do pojedynczych bajtów, to nagle pamięć flash jest zorganizowana w bajty. W rzeczywistości zakłada się, że komórka pamięci flash ma 2 bajty, stąd ta różnica pomiędzy wartościami: największa sekcja bootloadera to 0x1C00-0x1FFF, ale zważywszy, że komórka ma dwa bajty, po iście skomplikowanych przeliczeniach (*2) uzyskamy zakres: 0x3800-0x3FFF. W dokumentacji wszędzie gdzie jest mowa o pamięci programu, komórka ma dwa bajty i stąd trzeba wziąść poprawkę.

    ad 1/ dla największych sekcji masz: m88: 0xC00(0x1800), m168: 0x1C00(0x3800) [przed nawiasem liczone w słowach, w nawiasie liczone w bajtach]

    ad 2/ jeśli program którym wgrywasz liczy w bajtach, to wgrywasz normalnie pod 0x3800. Jeśli wgrasz niżej, to może się okazać, że po resecie PC=0x1C00 (pc wskazuje na słowo), wykonywanie zacznie się od bajtowego 0x3800, jeśli tam będą same 0xFFFF, to procesor to przeskoczy i zacznie wykonywanie głównego programu od początku (lub jeśli tam nic nie ma, przejdzie do bootloadera który jest pod niższym adresem, niby wszystko będzie działać, ale po wgraniu programu głównego bootloader przestanie się wykonywać)
  • REKLAMA
  • #3 6055631
    Konto nie istnieje
    Konto nie istnieje  
  • #4 6060287
    elektryk
    Poziom 42  
    Zdaje się tam są bity konfiguracyjne (fusy) które określają prawa dostępu do zapisu z kodu bootloadera i kodu właściwego programu. Może to stanowi problem.
REKLAMA