Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATxmega128 - Nie dziala mi tablica z adresami procedur

JohnCTN 14 Maj 2015 21:31 555 6
  • #1 14 Maj 2015 21:31
    JohnCTN
    Poziom 17  

    Witam

    napisałem prostą procedurę, która ma w z tablicy pobrać adres danej procedury i do niej wskoczyć, problem w tym, ze jak symuluje tą procedurę to na końcu do rejestru Z nie trafia adres procedury tylko same 0xFFFF
    Może ktoś znaleźć błąd?

    Jak przeglądam w oknie Memory zawartość APP_Section to faktycznie są same FF, dlaczego nie widzę tam mojej tablicy ?

    Kod: asm
    Zaloguj się, aby zobaczyć kod

    0 6
  • #2 14 Maj 2015 21:57
    BlueDraco
    Specjalista - Mikrokontrolery

    Zacznij od zmiany db na dw (zapewne). Adres procedury raczej nie zmieści się w jednym bajcie.

    0
  • #3 14 Maj 2015 22:11
    JohnCTN
    Poziom 17  

    To raczej nie to.... nie ma znaczenia czy .db czy .dw .... efekt ten sam, kompiluje się, ale w "app_section" nie mam tablicy pod 0x240 i nie ma poniżej skoków ijmp wiec podczas symulacji na samym końcu w rejestrze "Z" mam "FFFF"


    Kod: asm
    Zaloguj się, aby zobaczyć kod

    0
  • #4 14 Maj 2015 22:20
    Marek_Skalski
    Moderator Projektowanie

    JohnCTN napisał:
    w "app_section" nie mam tablicy pod 0x240

    To jest oczywiste ponieważ tablica jest pod adresem 0x120. Pamięć programu w Xmega jest 16-bitowa. To dane są 8-bitowe.
    LDI ZH,HIGH(C64_ins>>1) oraz LDI ZL, LOW(C64_ins>>1) powinno rozwiązać ten problem.
    Indeksuj też ZH, ponieważ łatwo przeskoczyć zakres, tutaj 0x300, a dane będziesz ładował spod 0x200.
    Sama tablica musi być typu .dw, BlueDraco ma rację.

    0
  • #5 14 Maj 2015 22:28
    JohnCTN
    Poziom 17  

    Ale tablicy nie ma pod adresem 0x120....(sprawdziłem podczas symulacji i nie ma tablicy pod 0x120)
    Adresuję ja na 0x240 (.org 0x240), w innej części tak samo adresuje dane w pamięci eeprom, którą mapuje pod adres 0x1000 i wszystko jest OK.

    Sprawdziłem podczas symulacji i nie ma tablicy pod 0x120, a nie chcę tej tablicy umieszczać w eepromie (pewnie tam by zadziałało)

    teraz jeszcze jedna informacja.

    ldi ZH,high(C64_ins) //po tej instrukcji jest w Z 0x0200
    ldi ZL,low(C64_Ins) //po tej instrukcji jest w Z 0x0240
    lsl r16 // tutaj mam 0x04
    add ZL,r16 // po tej instrukcji w Z jest 0x0244

    do tego momentu jest OK

    0
  • Pomocny post
    #6 14 Maj 2015 22:47
    Marek_Skalski
    Moderator Projektowanie

    Pomyliłem się, tablica jet pod adresem 0x480. Przesunąłem bity w niewłaściwą stronę.
    Taka sekwencja będzie prawidłowa:

    Kod: C
    Zaloguj się, aby zobaczyć kod

    0
  • #7 14 Maj 2015 23:56
    JohnCTN
    Poziom 17  

    oki teraz jest OK :-D dziękuje :-D

    0