запись большого число в EPROM

Тема в разделе "Arduino & Shields", создана пользователем sanik, 19 июн 2017.

  1. sanik

    sanik Гик

    Подскажите пожалуйста как правильно использовать функцию word(): ? Нашел статью но ничего не получается. Чтобы заново «собрать» большое число, разобранное на байты, есть функция word(): int val = word(hi, low), где "hi" и "low" – это значения старшего и младшего байтов числа "val"
    Код (C++):
    word(): int interval = word(hi, low),

                  void setup() {
      // put your setup code here, to run once:

    }

    void loop() {
      if (menuPos == 0 && KEY == 2)
      {
        if (menuPos == 0) //
        {
          -- interval;
          if ( interval < 100) interval = 100;
          byte hi = highByte(interval); // старший байт
          byte low = lowByte(interval); // младший байт
          EEPROM.write(1, hi);  // записываем в ячейку 1 старший байт
          EEPROM.write(2, low); // записываем в ячейку 2 младший байт
        }
      }
      if (menuPos == 0 && KEY == 5)
      {
        if (menuPos == 0)
        {
          ++ interval;
          if ( interval > 2000) interval = 2000;
          byte hi = highByte(interval); // старший байт
          byte low = lowByte(interval); // младший байт
          EEPROM.write(1, hi);  // записываем в ячейку 1 старший байт
          EEPROM.write(2, low); // записываем в ячейку 2 младший байт
        }
      }
    }
     
  2. NikitOS

    NikitOS Король шутов Администратор

    :eek::eek:Я ниче не понял:eek::eek::)
     
  3. qwone

    qwone Гик

    ТС тоже ничего не понял. Ну добавлю вам еще больше непоняток
    Код (C++):
    int data=100;// число int состоит из 2 байт
    byte *p=(byte *)&data;
    //p[0] это 1 байт
    //p[1] это 2 байт
    // сохраняешь, или записываешь и вот вам data полностью
     
  4. sanik

    sanik Гик

    А подробней можно? Вот статья на которую я нарвался
     
  5. qwone

    qwone Гик

    Руководство Ардуины считает программировать Ардуину должны "дауны". Вот он и оберегает своих подопечных от "знаний языка СИ". Такое себе ЕГЭ. И разумеется подопечные их не разочаровывают.
    А теперь по делу. В Си есть такая вещь как указатели. А указатели зависят от типа числа. Есть указатели на байт, есть указатели на int ну и так далее. У вас число int . Это 2 байта. Если же принудутельно создать указатель на ваше число и сделать его вместо интового байтовым . Указатели хранят в себе адрес. А вот что бы узнать значения их разыменнуют. Или же вешают рядом скобки [] Если в скобках [0]это первый байт [1] это второй. Ну вы надеюсь уже массивы учили.
    http://cpp.com.ru/kr_cbook/ch5kr.html#p51
    http://ermak.cs.nstu.ru/cprog/html/092.htm
     
    issaom, Cynep и arkadyf нравится это.
  6. sanik

    sanik Гик

    С массивом и записью я понял, Я не понял как потом прочитать.
     
  7. qwone

    qwone Гик

    Код (C++):
    int dataOut=100;// число int состоит из 2 байт
    byte *p=(byte*)&dataOut;
    //p[0] это 1 байт
    //p[1] это 2 байт
    int dataIn;
    byte *r=(byte*)&dataIn;
    r[0]=p[0];
    r[1]=p[1];
    // теперь в dataIn число 100
     
    issaom и arkadyf нравится это.
  8. sanik

    sanik Гик

    О спасибо огромное! буду юзать)
     
  9. qwone

    qwone Гик

    Я там описался надо
    Код (C++):
    byte *p=(byte*)&dataOut;
     
    arkadyf нравится это.
  10. fogary

    fogary Гик

    EEPROM.put и EEPROM.get не проще использовать?
     
  11. sanik

    sanik Гик

    Извиняюсь конечно но я ничего не понял для меня это просто ругательства:) Поподробнее с примером можно?
     
  12. mcureenab

    mcureenab Гуру

    жесть....

    нагуглил

    Код (C++):
    union
    {
        unsigned int integer;
        unsigned char byte[4];
    } foo;

    int main()
    {
        foo.integer = 123456789;
        printf("%u %u %u %u\n", foo.byte[3], foo.byte[2], foo.byte[1], foo.byte[0]);
    }
    но этот код не портируемый. тут скорее всего решение для 32 бит машины.

    Так лучше:
    Код (C++):
    union {
        uint16_t integer;
        uint8_t byte[2];
    } foo;
     
  13. fogary

    fogary Гик

    https://www.arduino.cc/en/Reference/EEPROM
    Смотрите описание функций, там есть примеры использования.
     
  14. ostrov

    ostrov Гуру

    get и put поддерживают любые типы данных включая массивы и структуры, что еще надо то?
     
  15. sanik

    sanik Гик

    Спасибо! Проще бы написали смотри примеры в библиотеке EPROM:)
     
  16. ostrov

    ostrov Гуру

  17. sanik

    sanik Гик

    Спасибо за ссылку! Полезная статья. Все бы статьи наподобие этой были бы!