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

Różnice w formacie HEX między AVRStudio4 a Bascom AVR - jak je rozwiązać?

17 Paź 2003 18:23 2600 14
REKLAMA
  • #1 364988
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #2 365660
    max_gg
    Poziom 26  
    Posty: 631
    Pomógł: 83
    Ocena: 26
    Oba programy korzystają z formatu Intel-HEX. Zobacz czy tak masz ustawione w AVRStudio, ale jest to format domyślny. Po drugie, zapisać możesz tylko do pamięci EEPROM, wpierw musisz uaktywnić segment tej pamięci dyrektywą ".eseg".
  • #3 365708
    Konto nie istnieje
    Konto nie istnieje  
  • #4 365936
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 366088
    genetix
    Poziom 24  
    Posty: 669
    Pomógł: 42
    przeczytaj sobie application notes do avr, bodajze avr102.asm

    jest tam dokladnie opisane kopiowanie z pamieci ram, eeprom i flash, wlacznie z programem testujacym.
  • #6 367471
    Konto nie istnieje
    Konto nie istnieje  
  • #7 367553
    Eagle
    Poziom 24  
    Posty: 536
    Pomógł: 57
    Ocena: 31
    Twój problem polega że nie wiesz jak działa instrukcaj LPM. Traktuje ona pamięc pogramu o organizacji baytowej a nie jak procek i kompiloator o organizacji "word" 2*baytowej :).

    więc

    Adres podawany przez kompilator jest adresem o połowe mniejszym od oczekiwanego więc należy powiększyć go 2 razy

    czyli :

    .cseg
    ....... ;tresc programu

    ldi ZL, low(Napis1*2)
    ldi ZH, high(Napis1*2)

    lpm

    ; gdy r0 <> 0

    rcall Wyswietl_Litere_Z_r0

    ; gdy r0 = 0 koniec wyswietlania

    .org 0x100
    Napis1:
    .db "Napis1", 0x00
    Napis2:
    .db "napis2", 0x00


    i już będzie działało

    P.S.

    Tu masz więcej : http://www.atmel.com/dyn/resources/prod_documents/DOC1233.PDF
  • REKLAMA
  • #8 367899
    genetix
    Poziom 24  
    Posty: 669
    Pomógł: 42
    instrukcja lpm to jedna sprawa - eagle ma racje.

    natomiast kwestia dyrektywy .org to co innego zupelnie:

    programator Bascom'a nie interpretuje przesuniecia danych ta dyrektywa.

    Po otworzeniu pliku hex przez programator CodeVision AVR wszystko wraca do normy- dane (np. napisy) umieszczone dyrektywą .org 0x100 faktycznie sie tam znajduja, co mozna sprawdzic edytorem.

    Natomiast ten sam plik hex otworzony pod bascomem wykazuje umieszczenie danych w miejscu, jakby nie uzyto .org.
  • REKLAMA
  • #9 367923
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Wrzuc tu ten plik hex ze zlym rozmieszczeniem...

    genetix: chyba cos ci sie pomylilo, plik hex to plik hex i dyrektywa .org nie ma nic do hex'a, bo jej tam w ogole nie ma (zostala juz wczesniej zinterpretowana przy kompilacji, a dokladniej to przy linkowaniu). Byc moze uzyta jako wstwka asemblerowa w BASCOMie jest pomijana, ale to dwie rozne sytuacje (choc tez tego nie wiem czy BASCOM ja pomija, choc jest to mozliwe, w koncu to BASCOM).
  • #10 368804
    genetix
    Poziom 24  
    Posty: 669
    Pomógł: 42
    chodzi mi o to, ze sam bascom źle interpretuje pliki hex powstałe w innym programie. wrzuce wkrótce i z przyjemnością.
  • #11 368903
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    O wrzucenie pliku prosiłem autora postu, ale jeżeli takie masz to dawj je tu. A jeżeli BASCOM żle interpretuje pliki hex to znaczy, że BASCOM jest jeszcze gorszy niż mi się zdawało. Plik hex nie ma prawa zostać źle zinterpretowany - chyba że BASCOM używa innego formatu hex np. motorola...
  • #12 368994
    genetix
    Poziom 24  
    Posty: 669
    Pomógł: 42
    skompiluj sobie pod Studio4 cos takiego:

    ;----- CUT HERE----

    .org 0x000
    .DB 0
    .org 0x100
    .DB "tdv"

    ;---- CUT HERE ----

    otwórz to programatorem Bascoma a potem programatorem CVAVR (opcja Edit| FLASH)
    i porownaj offsety.

    PS. Oba uzywaja tego samego formatu INTELa (przynajmniej w teorii)
    niemniej jednak plikow hex z avrstudio nie czyta program hex2bin zamieniajacy format hex na binary
  • #13 369040
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Sorry ale nie posiadam BASCOMA (na całe, jak widze coraz większe, szczęście), więc całe otwieranie traci sens, zapodaj hex'a konkretnego.
  • #14 369323
    Eagle
    Poziom 24  
    Posty: 536
    Pomógł: 57
    Ocena: 31
    genetix twój problem wywodzi się z tąd ze pamięc uC AVR jest 16 bitowa a nie 8 bitowa. Co pociąga za sobą takie konsekwencje.


    Jeśli napiszesz

    .org $100

    . db $12, $34

    to kompilator zrozumie że chcesz wpisać następne instrukcje/ dane będą wpisywane pod adres $100 komórki pamięci 16 bitowej. Jeśli zrzucisz to teraz do pliku hex który jest zapisem danych 8 bit wszystkie adresy zostaną powiększone dwu krotnie więc plik będzie postaci

    02 0200 00 12 34 xx

    02 - bo dwie dane

    0200 -adres wpisywania i pomimo deklaracji $100 masz tu $200 bo $100-*16 bit = $200 * 8bit

    12 34 - to nasze dane

    xx - suma kontrolna


    jeśli w Bascom ( chyba zacznę pisać go z malutkiej literki - bo same problemy z tym ...) traktuje pamięc programu jako baytową to poprostu bascom bas-error , bas-big-error :)
  • #15 370962
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

✨ Problem dotyczy różnic w interpretacji plików Intel HEX generowanych przez AVRStudio4 i odczytywanych przez Bascom AVR, zwłaszcza w kontekście umieszczania danych w pamięci programu z użyciem dyrektywy .ORG. AVRStudio4 generuje pliki HEX z adresacją uwzględniającą 16-bitową organizację pamięci mikrokontrolera AVR, co powoduje, że adresy w pliku HEX są podwajane względem adresacji bajtowej. Instrukcja LPM (load program memory) operuje na pamięci o organizacji bajtowej, co wymaga odpowiedniego przeliczenia adresów (np. mnożenia przez 2). Bascom AVR nie interpretuje poprawnie przesunięć adresowych wynikających z dyrektywy .ORG w plikach HEX wygenerowanych przez AVRStudio4, przez co dane umieszczone są bezpośrednio za kodem programu, niezależnie od zadeklarowanego adresu. Programator CodeVision AVR poprawnie odczytuje te pliki i umieszcza dane zgodnie z adresacją. Różnice wynikają z odmiennego traktowania pamięci programu (16-bitowa organizacja w AVRStudio4 vs. bajtowa w Bascom) oraz możliwego braku wsparcia Bascom dla przesunięć adresowych w HEX. Rozwiązaniem jest uwzględnienie mnożenia adresów przez 2 przy użyciu instrukcji LPM oraz stosowanie programatora i narzędzi kompatybilnych z formatem HEX AVRStudio4, np. CodeVision AVR. Bascom AVR wykazuje ograniczenia w interpretacji plików HEX z innych kompilatorów, co może powodować błędy w adresowaniu danych w pamięci programu.
REKLAMA