Hirdetés

Új hozzászólás Aktív témák

  • Teasüti

    nagyúr

    Sziasztok ismét!
    Kérhetnék egy kis segítséget a stack pointer megértésében?
    Annyit tudok róla, hogy the stack pointer is a small register that stores the address of the last program request in a stack.
    Valamint átrágtam magam ezen a bevezetőn a pointer-ek használatáról.
    Ez alapján úgy sejtem az SP egy uint16_t változóval egyenértékű regiszter, hisz 256-nál több bájt van az SRAM-ban.
    Korrekt?
    Egy új sketch-ben a Serial.println(SP) nekem 2297-et ad, ami egyrészt egy 16 bites szám, másrészt meg mi a fene?? Nem 2KB SRAM van csak az Atmel 328p-ben?

    Nem értem továbbá, hogy a stack és heap size vizsgálatakor miért így deklarálják a változókat, ahogy:
    void check_mem() {
    //uint8_t * heapptr, * stackptr; // I declared these globally
    stackptr = (uint8_t *)malloc(4); // use stackptr temporarily
    heapptr = stackptr; // save value of heap pointer
    free(stackptr); // free up the memory again (sets stackptr to 0)
    stackptr = (uint8_t *)(SP); // save value of stack pointer
    }

    A stackptr egy pointer, az SP is egy pointer, stimmt.
    De ez miért így van: stackptr = (uint8_t *)(SP); ??
    Miért 8 bites? Nálam így a 2297-ből 249 lesz, csak épp azt nem értem ez hogy a fenébe lenne már kívánatos eredmény, amikor itt a 2297 csordul túl, vagyis korrupt adat.
    Na meg sehogy nem tudok rájönni hogy tudom kiíratni Serial-ol az SP-n lévő adatot.
    Nálam ez hibát dob:
    uint16_t report;
    report = *SP;

    Pedig elvileg ez az SP dereference volna a pointer tutorial szerint, vagyis ezen a címen lévő adatot kéne visszaadnia.

    exit status 1
    invalid type argument of unary '*' (have 'uint16_t {aka unsigned int}')

    És ami még furább, hogy az alábbi pár sor 16 bites számot ír ki a monitorra: :F
    register uint8_t *upStack;
    upStack = (uint8_t *)SP;
    Serial.println((int)upStack);

    Nagyra értékelnék egy kis iránymutatást, már egy ideje a netet túrom emiatt, de csak random fórum posztokat találok kevés átfedéssel. :R

Új hozzászólás Aktív témák