Arduino progmem tömb iterálás
2018-02-27T23:10:20+01:00
2018-02-28T11:10:44+01:00
2022-08-11T00:45:30+02:00
Emendre
Sziasztok!

Egy viszonylag nagy tömböt szeretnék arduinon a progmemben tárolni, majd ezen végig iterálni.
Nos az a problémám, hogy ha a tömb a progmemben van, akkor a for ciklus amivel végigmegyek rajta, teljesen más értékeket ad, mint kellene. Nem progmemben tárolva, viszont jó értékeket kapok.
Illetve külön érdekesség, hogy ha a for ciklusban egy meghatározott indexű elemre IF-elek és azt íratom ki, akkor jó értéket kapok.

Hogy jobban érthető legyen, egy leegyszerűsített kódot feltettem ide
Ezt futtatva szépen látszik mi a gondom.
Mutasd a teljes hozzászólást!
Arduino Reference

Használd a 'pgm_read_xxx' funkciókat, ha a flash memóriából olvasol.
Mutasd a teljes hozzászólást!

  • Szia!

    A programot most nem tudom megnézni, de szerintem az a probléma, hogy kevés az arduino memóriája.

    Én még WS2812-ből akartam „LED falat” csinálni, akkor tapasztaltam, hogy a fordító szerint elég a hely de valójában kevés volt, így szépen beírogatott egymás területére. Próbáld ki fele akkora tömbmérettel. Ha utána jó akkor jöhet az optimizálás.
    Mutasd a teljes hozzászólást!
  • Köszi!
    Valóban ez volta gond, hogy én csak simán hivatkoztam a progmemben tárolt változóra, gondolván majd a fordító biztos tudja hogy kell azt elérni. Hát nem tudta :D

    pgm_read_dword() -el olvasva viszont már jó értékeket kapok!
    Mutasd a teljes hozzászólást!
  • Hát igen. Ezt úgy kell elképzelni, hogy van két rekeszed. Mindkettőben 0x00-tól indul a címzés.
    Amikor ilyet írsz, hogy:

    data[index]
    Akkor ő igazából annyit csinál, ekvivalens azzal, hogy

    *(data + index)
    Magyarul csak dereferálsz/hivatkozol egy adott memória területre. A fordító magától nem fogja tudni, hogy te éppenséggel melyik 'rekeszből' olvasnál.
    Mutasd a teljes hozzászólást!
abcd