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

ADSP 2181 i problem z DAG1

Beefens 01 Paź 2004 16:27 2190 1
REKLAMA
  • #1 885564
    Beefens
    Poziom 12  
    Hej
    Mój problem wygdąda tak ,jakbym adresował i0 w DAG1 on sobie coś innego
    Tu fragment kodu, niżej opis problemu:



    SCRAMBLER:
    /***** Pierwsza część *******/
    i4 = Input_Real;
    i0 = FFT_IO_Real;
    m4 = 1;
    m0 = Mod_Value; // Mod_Value = 2 ^ 14-log2 (N)
    l4 = 0;
    l0 = 0;

    CNTR = N;
    ENA BIT_REV;
    DO SR_Loop UNTIL CE;
    ay1 = DM(i4,m4); // Reversing Real part
    SR_Loop: DM(i0,m0) = ay1;
    DIS BIT_REV;

    /***** druga część *******/
    i4 = Input_Image;
    i0 = FFT_IO_Image;
    m4 = 1;
    m0 = Mod_Value;
    l4 = 0;
    l0 = 0;

    CNTR = N;
    ENA BIT_REV;
    DO SI_Loop UNTIL CE;
    ay1 = DM(i4,m4); //Reersing image part
    SI_Loop: DM(i0,m0) = ay1;
    DIS BIT_REV;
    rts;

    To jest funkcja haszująca przed moim FFT,

    I , problem w tym ,że pierwsza część kodu jest wykonywana poprawnie,
    dane z tablicy "Input_Real" są poprawnie transferowane do "FFT_IO_Real"
    Zaś w drugiej częsci on przerzuca dane do "Input_Real" zamiast do "FFT_IO_Image"
    haszuje je poprawnie, ale czemu nie tam gdzie trzeba ???, przecież właściwie obie części są takie same.
    Co trzeba więcej zrobić żeby wskaźnik i0 adresował się poprawnie ???

    Deklaracja tablic wygląda następująco:

    .SECTION/DM sound_data;

    .VAR/CIRC Input_Real[N];
    .VAR/CIRC Input_Image[N];

    .VAR/CIRC FFT_IO_Real[N];
    .VAR/CIRC FFT_IO_Image[N];

    gdzie N=64;

    I za cholere nie mogę dojść co jest nie tak.

    Jeśli ktoś by miał chwilę żeby rzucić na to okiem będę bardzo wdzięczny.
    mogę wysłać cały kod niezbędny do zobacznie błędu
    ( Jest naprawde bardzo krótki i jest na VisualDSP, i sesja 2181 simulation)
  • REKLAMA
  • #2 889856
    Paweł Es.
    VIP Zasłużony dla elektroda
    ....

    DIS BIT_REV;

    /***** druga część *******/



    Spróbuj coś wstawić przed tą linią (jakiś NOP albo coś)
    prawdopodobnie to podstawienie do i0 nie jest wykonywane
    (może to wynikać z zasady parowania instrukcji dla zrównoleglenia
    operacji, może DIS nie trawi się z operacją podstawienia
    względnie ta pętla wcześniej po zakończeniu skacze od razu do następnej instrukcji po tym podstawieniu.



    i4 = Input_Image; i0 = FFT_IO_Image;
REKLAMA