Циклит программа, не хватает памяти

Тема в разделе "Arduino & Shields", создана пользователем Михаил123, 4 авг 2020.

  1. зачем "блочить"?
    кто помогает, советует, пусть и через критику - велком. я открыт для критики. но, критикуешь - предлагай.
    ну а кучу раз написать "читайте книжки", не правильно учите, и т.д. и не одного письма по делу - ну зачем отвлекаться.
    я вчера (сегодня) свои опыты закончил в 4-38.
    с утра работаю. напряженно, и решаю то, что вчера не случилось. не надо отвлекаться на тех, кто не приносит пользу.
    кстати, ест форум, где просто помомогают, не задавая вопросы про книжке.
    помогать - это же прикольная штука.
    а есть те, кто пытается не помочь, а самоутвердится - это разные вещи. таким надо к психотерапевту (не путать с психушкой) - это излечимо, но это болезнь, родом из детства, скорее всего. это негатив окружающим. в мире много негатива, что бы с ним еще и здесь сталкиваться. негатив надо исключать.
     
  2. я просто не в курсе, может ли прога что то то виртуально творить. или как проверить - заблокирована запись, или нет?
    может myFile нужно не только закрывать, но и удалять? до следующего открытия?
     
  3. Asper Daffy

    Asper Daffy Иксперд

    Да, неужели?

    Вообще-то, за последний абзац поста #48, а также за п.3 в посте #2 я ожидал услышать "спасибо". Но слышу пока только хамские наезды.
     
  4. Asper Daffy

    Asper Daffy Иксперд

    Какое нахрен умножение? Тут и со сложением-то ...
     
    parovoZZ нравится это.
  5. да я пропустил контрольный байт - не стал его считать. да и не используется у меня он нигде - другие алгоритмы чтения
     
  6. помогайте, я сдаюсь:

    модуль принимает команду на смену айпи, и командует на запись

    Код (C++):
    if (packetBuffer[0] = 1) // команда на смену адреса
            {
               
            }
    записывает
    Код (C++):
    bool SaveNewData(void)
    {
     
            data[i] = mac[i];
          for (byte i = 0; i < 4; i++)
          {
            data[i + 6] = myip[i];  
          }
          for (byte i = 0; i < 4; i++)
            Serial.println(data[i + 6]);
          for (byte i = 0; i < 4; i++)
            data[i + 10] = deip[i];
          data[14] = loPort;
          data[15] = dePort;
          myFile.write(data, 16);
       
        }
        else
        {
          Serial.println(F("ошибка записи данных"));
          myFile.close();
         
        }
    }
    читает
    Код (C++):
    bool ReadData(void)
    {
       
       
        }
    }
    результат деятельности: (на запись приходит 192.168.1.41)

    Код (C++):
    Получено 5 байт
    От 192.168.1.4, port 345
    Contents:
    1,192,168,1,141,Записываю MAC, ip1, ip2
    192
    168
    1
    141   ============ тут уходит на запись это
    Записал MAC, ip1, ip2
    Данные записал
    читаю с SD
    /// тут была промежуточная очистка
    МАС адрес 0:0:0:0:0:0
    IP1 адрес 0.0.0.0
    IP2 адрес 0.0.0.0
    reading data from SD ...
    очистил данные ...
    читаю с SD
    МАС адрес 0:0:0:0:0:0
    IP1 адрес 0.0.0.0
    IP2 адрес 0.0.0.0
    прочитал данные ...
    читаю с SD
    МАС адрес DE:AD:BE:EF:FE:ED
    IP1 адрес 192.168.1.1  тут прочитано это
    IP2 адрес 192.168.1.1
    отправил 96
    отправил ответ
     
     
    Последнее редактирование: 7 авг 2020
  7. спасибо
     
  8. Andrey12

    Andrey12 Гик

    1. как у вас объявлены myip, deip, mac?
    2. Библиотеку SD используете какую? Эту - https://www.arduino.cc/en/reference/SD ?
    3. А на самой SD карете не смотрели что записано?
    4. SD карту проверь, може битая?
     
  9. parovoZZ

    parovoZZ Гуру

    Что да? UDP протокол не имеет механизма подтверждения передачи. А также не требуется устанавливать соединение со вторым абонентом. Поэтому про какой
    здесь идёт речь, я не понимаю. Совсем.
    Мож, попутал чё? С IСMP, например.
     
  10. 1.
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    byte myip[] = {192,168,1,1};
    byte deip[] = {192,168,1,1};
    uint8_t loPort = 237;
    uint8_t dePort = 1;
    2.библиотека SD.h, запись проверял - идет.
    есть модуль, использующий эти же обработки:
    Код (C++):
     if (!SD.begin(4))
        {
          Serial.println(F("initialization SD failed!"));
          while(1);
        }
        else
        {
          //SD.remove("connect.dat");                                ========закоммментировал, было для опытов - запись базовых настроек
          //Serial.println("удалил файл connect.dat");
        }
       
    и он реально удаляет файл, и записывает
    3. реально данные есть
    4. карта не битая, читается/форматируется на компе

    процесс записи и чтения сопровождал комментариями и проверке, что отправляется в запись, и что считывается
     
    Последнее редактирование: 7 авг 2020
  11. если пакет отправляется на существующий IP/порт - процесс занимает доли секунд, если на несуществующий - то чуть более секунды. разница существенная.
     
  12. проблема решилась удалением файла и записью его заново.