PROGMEM

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: PROGMEM

Hozzászólás Szerző: kapu48 »

Az & a címen levő memoria értéket adja vissza.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: PROGMEM

Hozzászólás Szerző: kapu48 »

Próbáldmeg így beolvasni:

Kód: Egész kijelölése

data = pgm_read_byte_near(sinetable + szamlalo);
:?:
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: PROGMEM

Hozzászólás Szerző: csabeszq »

Bővebben akkor elmagyarázom.

Ha a neten keresed, egy paramétert kétféleképpen lehet átadni.
- átadod az értéket (pl. 123) -- érték szerinti paraméterátadás
- átadod az érték címét, ahol a memóriában elhelyezkedik -- cím szerinti paraméterátadás

A cím szerinti bonyolultabb, nehezebb megérteni.

Kód: Egész kijelölése

void cimSzerintModosit( uint8_t * cim)
{
  *cim = 13;
}

void setup()
{
  Serial.begin(115200);
  uint8_t par; // ez egy paraméter
  cimSzerintModosit(&par); // átadod a címet, ahol 'par' paraméter van
  // bele fog íródni 13
  Serial.println(par); // itt már 13 lesz par-ban
}
Hogyan adhatod át egy tömb 23. elemét cím szerint:

Kód: Egész kijelölése

uint8_t * ertekCim = &tomb[23]; // ez az amit föntebb írtam, elég egyszerű, az & címet jelent
uint8_t * ertekCim = tomb + 23; // amit kapu48 mondott, háttértudást igényel, hogy megértsd
Mutatók összeadogatását (második megoldás) lehetőleg elkerültem volna, mert nem a kezdő tananyag része, de ha tetszik nyugodtan használhatod. A két megoldás teljesen ekvivalens, azt használod, amelyik jólesik.
borisz
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2016. november 26. szombat, 9:39

Re: PROGMEM

Hozzászólás Szerző: borisz »

Köszönöm a segítséget, de az első példát nem teljesen értem. Miért van az unit8_t és a cím összeszorozva? És jól értelmezem, hogy akkor a flash memóriából egy tömb, egy bizonyos értékét csak cím szerint lehet átadni?
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: PROGMEM

Hozzászólás Szerző: csabeszq »

Itt a * mutatót jelent, nem szorzást. A "Mutatók" résznél érdemes átnézni a C könyvet.
A mutató egy címet tartalmaz, ami egy memória-rekeszre mutat. Enélkül elég nehéz cím szerinti paraméter-átadást megvalósítani.

A C könyv példákon keresztül jobban el tudja magyarázni, mint mi itt a fórumon.
Válasz küldése