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

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

  1. b707

    b707 Гуру

    вас больше интересует производительность? - если в какой-то момент в программе закончится доступная память - она зависнет или начнет глючить.. Но на производительность это не влияет, да :)
    так работает класс String. Зато удобно - ни о чем думать не надо, прямо в духе вашей Рад студии

    так тестируйте. я то тут причем? Кто это будет делать за вас.
    Моя оценка такова, что переписав ваш код - можно выиграть не меньше трети в оперативке и примерно столько же в флеше. Но это судя по тем кускам, что я видел.
     
    Andrey12 нравится это.
  2. b707

    b707 Гуру

    А производительность - вещь тонкая. Некоторые процессы имеют естесственно ограниченную скорость, другие можно "разогнать".

    как вы здравоохранение не "оптимизируйте" - бабы быстрее 9 месяцев рожать не станут :)
     
    Andrey12 нравится это.
  3. ошибочка.
    можно уже с 5 вытаскивать, и запускать на новый круг. медицынва идет вперед
     
  4. это является не кошмарным:
    Код (C++):
    answ = "WaitIP,";  //String
                answ.toCharArray(packetBuffer, 7); //char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
                for (byte i = 0; i < 6; packetBuffer[8 + i] = mac[i++])
                packetBuffer[15] = ',';
                packetBuffer[16] = loPort;
                SendMsg(17);
    void SendMsg(byte len)
    {
        Serial.println(F("Начало отправки "));
        //uint8_t mesa[msg.length() + 1];
        //Serial.println(IPAddress(ip));
        //Serial.println(port);
        //msg.toCharArray(mesa, msg.length() + 1);
        Udp.beginPacket(deip, deport);
        Udp.write(packetBuffer, len);
        Udp.endPacket();
        Serial.println("отправил");
    }
     
  5. parovoZZ

    parovoZZ Гуру

    А зачем вообще использовать строки? Это не тот класс устройств, где надо так упражняться. Вместо сообщений можно использовать коды, как это делает веб сервер. При этом занимаемая память лавинообразно обвалится.
     
  6. parovoZZ

    parovoZZ Гуру

    Не знаю, что такое рад студио, но в любой профессиональной IDE есть как минимум два этапа разработки: release и debug. В глобальных переменных определяем DEBUG=1 и в коде отладочные строки заключаем в конструкцию
    Код (C++):
    #if DEBUG

    #endif
    В release версии DEBUG=0 или не определён и компилятор всю отладку выкинет за борт.
     
    Daniil, Andrey12 и b707 нравится это.
  7. b707

    b707 Гуру

    Паравоз, он явно пишет в Рад-студии своей на десктопе, где у него гигабайты памяти. И ему глубоко по барабану, получится ли у него программа в 200 Мегабайт или в 2 гигабайта... да там еще сама ОС напихивает столько, что экономить байты смысла нет

    И вот когда человек с таким "опытом" приходит писать код в мир МК - у него начинается "ломка", потому что если для МК писать "удобно", генеря в программе бессмысленные строки и обьекты - будет так как у нашего ТС. написал пару функций и память кончилась.
    А писать по другому он не умеет...
     
    Andrey12 нравится это.
  8. Asper Daffy

    Asper Daffy Иксперд

    Опять неправильно помогают! ну, что за козлы! И когда научатся!
    работоспособность на втором плане?
    Никогда не пробовал какую-нибудь книжку прочитать? Времени нет?
    Вот здесь про это очень подробно.
     
    Михаил123, Daniil, SergeiL и 2 другим нравится это.
  9. да, согласен. коды - лучше. и проще.
     
  10. интересное дело.
    если пакеты по UDP отправляются на "слушающее" устройство, то скорость отправки возрастает многократно, а если в "никуда", то примерно отправка пакета происходит раз в секунду.
    ответов на эту тему не нашёл.
    из-за чего это происходит?
    ожидание подтверждения принятия пакеты?
    TTL ?
    ...?
     
  11. parovoZZ

    parovoZZ Гуру

    У UDP пакета???
     
  12. Asper Daffy

    Asper Daffy Иксперд

    Я тебе уже как-то писал ...
    но до тебя, пожалуй, не доходит :-(
     
  13. дружище!!!
    дорогой мой УЧИТЕЛЬ!
    уйди в сраку, утомил.
    блокирую.
     
  14. да.
    в среде билдера (с++ Bulder) можно это настраивать - есть параметр TTL. а в ардуино не нашёл такого.
    в моем случае этого параметра достаточно 5.
    Пролопатив кучу статей - не понял, ардуино ждет, когда TTL пакета станет равно 0, или оно не отслеживает это?

    смоделирую на билдере отправку пакетов по несуществующему айпишнику.
     
  15. Asper Daffy

    Asper Daffy Иксперд

    Чего-чего?
     
    Andrey12 нравится это.
  16. столкнулся с непоняткой:
    код записи на SD (работает)
    Код (C++):
    bool SaveNewData(void)
    {
        File myFile = SD.open("connect.dat", FILE_WRITE);
        if (myFile)
        {
          Serial.println(F("Записываю MAC, ip1, ip2 "));
          uint8_t data[17];
          for (byte i = 0; i < 6; i++)
            data[i] = mac[i];
          for (byte i = 0; i < 4; i++)
            data[i + 6] = myip[i];
          for (byte i = 0; i < 4; i++)
            data[i + 10] = deip[i];
          data[14] = loPort;
          data[15] = dePort;
          myFile.write(data, 16);
          myFile.close();
          return true;
        }
        else
        {
          Serial.println(F("ошибка записи данных"));
          myFile.close();
          return false;
        }
    }
    уже в ходе работы проги делаю запись данных по измнению настроек (смена айпи).
    результат выдает "ОК", ошибку не выдает.
    но если заново запускаю прогу сначала, то считывает старые данные. как такое может быть?
     
  17. ну всё, нажал кнопку
    больше тебя не вижу в переписке, есть такая функция. почитай книжку )))
     
  18. Asper Daffy

    Asper Daffy Иксперд

    Молодец!
     
    Andrey12 нравится это.
  19. b707

    b707 Гуру

    чудес не бывает, ошибка в программе.
    Либо только думаете, что записываете, а на самом деле нет.
    Либо записываете старые данные - например перед записью не обновляете массивы mac[] myip[] deip[]
     
    Andrey12 нравится это.
  20. b707

    b707 Гуру

    всех, кто что-то знает - заблочите, кто помогать то будет?
    сами-то, очевидно, не в состоянии даже таблицу умножения освоить, наверно родители репетитора нанимали...
     
    Andrey12 нравится это.