Close

Co se děje v paměti?

Úvodní stránka Fórum Hardware Arduino Co se děje v paměti?

  • Toto téma obsahuje celkem 6 odpovědí. Do diskuze (4 diskutující) se naposledy zapojil uživatel Zbyšek Voda a poslední změna proběhla před 8 roky.
Aktuálně je na stránce zobrazeno 7 příspěvků - 1. až 7. (celkem z 7)
  • Autor
    Příspěvky
  • #8171
    schamann
    Účastník

    Zdravim, nebyl by nějaký odkaz na hezké čtení o paměti? Ne o té mojí, ta je zatím v pořádku. Chtěl bych pochopit proč se můj program chová „divně“.

    Jen pro představu:
    Mám Arduino Mega + GSM modul, dělám běžný GPRS terminál, nic náročného…
    po vymazaní pole char pomoci memset se mi někdy změní hodnoty long úplně jiných proměnných…

    priklad:

    unsigned long lLed13Cas = 0;
    unsigned long lIntervalSendCas = 0;
    char odpoved[100];

    //spousta dalsich
    //(27) promennych char, String, long, int, boolean…

    void loop {
    lLed13Cas = millis();
    lIntervalSendCas = millis();
    Serial.println(lIntervalSend); // tady je hodnota millis() např. 1000
    memset(odpoved, ‚\0‘, 100); // tady se něco stane
    Serial.println(lIntervalSend); // tady je hodnota 741029368 nebo 809041862
    }

    Nějak tomu nerozumim…
    chvilku jsem sis tím hrál, když pole definuju a měním tak:
    – char[30] je ok,
    – char[60] stane se to vyjmečně
    – char[100] obvykle
    – char[1000] smaže úplně všechny proměnné

    když to vykompiluju hlásí mi to, že proměnné zabírají 37% paměti, řekl bych tedy, že tam je ještě spousta místa. A za druhé proč mi to mění pouze 2 longy ve kterých je hodnota millis() a nic jiného?
    Nebo má to moje arduino něco „divně“ s pamětí?

    Díky

    #8183
    posjirka
    Účastník

    sice mám IQ 156, ale z tvého popisu opravdu nejsem moudrý 🙂
    Není jasné co vlastně zapisuješ za pole, resp jaké hodnoty/typy hodnot tam vkládáš.
    to pole musí být 1 typu proměnných. pokud tam vkládáš unsig long a char tak ti to nepůjde, resp bude ti to vyhazovat blbosti.
    Buď vše převe´d na max. možný typ proměnné, nebo holt musíš pracovat s pamětí po jednotlivých byte.

    #8186
    schamann
    Účastník

    Co není jasne ? Pole je prázdné… a kdyby v něm něco bylo tak ho pomocí memset smazu.Jde čistě jen o to že memset mi změní obsah jiné promenne se kterou nijak nesouvisí. Tak patram po duvodu. Ty poznámky vsetluji co se děje, nikoli co chci aby se dělo. Co chci je jasne z kódu.

    #8187
    posjirka
    Účastník

    obávám se, že to bude tím /0 … Arduino potřebuje mít zadanou hodnotu. Empty je pro něj hazardní. Zkus mu dát hodnotu 0 nebo „“… Jestli budu mít zítra čas podívam se na to a vyzkouším to na UNO.

    #8189
    BlindP
    Účastník
    #8191
    schamann
    Účastník

    ‚0‘ jsem tam mel uplne na zacatku, bylo to uplne stejne… podle dostupnych informaci tam muze byt to pole naplnene uplne libovolnym znakem. Prazdna hodnota mi vyhovuje protoze nevim presne kolik znaku mi prijde z modemu jako odpoved na AT. Navic jsem to presne takhle videl ve vice projektech, ktere se komunikaci s AT prikazy zabyvaji a je to v te konstrukci uplne bezne.

    #8193
    Zbyšek Voda
    Správce

    Kdybyste pole naplnil pomocí cyklu, místo memset, jak to dopadne?

Aktuálně je na stránce zobrazeno 7 příspěvků - 1. až 7. (celkem z 7)
  • Pro reakci na toto téma se musíte přihlásit.