Оптимизация кода LoRa sx1278 (скорость выполнения)
- Войдите на сайт для отправки комментариев
Чт, 09/09/2021 - 12:22
Как ещё можно оптимизировать трансмиттер LoRa sx1278 ? Выходит ~ Циклов/с: 37911 на arduino nano. У кого-то получається больше ? На ресивере идеал.. Циклов/с: 274922
Трансмиттер
#include <SPI.h> #include <LoRa.h> byte packet[16]; unsigned long timeout, timeoutBeginPacket, countCPU; void setup() { packet[0] = 100; packet[1] = 120; packet[2] = 140; packet[3] = 160; packet[4] = 180; packet[7] = 255; Serial.begin(115200); while (!Serial); Serial.println("LoRa Transmiter"); //Serial.println(!Serial); if (!LoRa.begin(433E6)) { Serial.println("Starting LoRa failed!"); delay(200); while (1); } //LoRa.setSignalBandwidth(41.7E3); //defaults to 125E3. 7.8E3, 10.4E3, 15.6E3, 20.8E3, 31.25E3, 41.7E3, 62.5E3, 125E3, 250E3, 500E3 LoRa.setTxPower(20); //LoRa.setCodingRate4(8); //LoRa.setSpreadingFactor(6); } void loop() { packet[0]++; packet[1]++; packet[2]++; packet[3]++; packet[4]++; if (millis() - timeoutBeginPacket >= 50) { timeoutBeginPacket = millis(); LoRa.beginPacket(); // Создайом пакет for ( byte i = 0; i < 8; i++) { LoRa.write(packet[i]); } LoRa.endPacket(); } if (millis() - timeout >= 1000) { timeout = millis(); Serial.print(" Цыклов/с: "); Serial.println(countCPU); countCPU = 0; } countCPU++; /* Serial.println (packet[0]); Serial.println (packet[1]); Serial.println (packet[2]); Serial.println (packet[3]); Serial.print ("Сигнал RSSI: "); Serial.println (LoRa.rssi()); */ }
Ресивер
#include <SPI.h> #include <LoRa.h> byte p[16], countLora; unsigned long timeout, countCPU; void setup() { Serial.begin(9600); while (!Serial); Serial.println("LoRa Receiver"); //Serial.println(!Serial); if (!LoRa.begin(433E6)) { Serial.println("Starting LoRa failed!"); delay(200); while (1); } LoRa.onReceive(onReceive); //register the receive callback LoRa.receive();// put the radio into receive mode //LoRa.setSignalBandwidth(41.7E3); LoRa.setTxPower(20); //LoRa.setCodingRate4(8); //LoRa.setSpreadingFactor(6); } void loop() { if (millis() - timeout >= 1000) { timeout = millis(); Serial.print(" Первый байт "); Serial.print(p[0]); Serial.print(" packetRSSI "); Serial.print(LoRa.packetRssi()); Serial.print(" SNR "); Serial.print(LoRa.packetSnr()); Serial.print(" RSSI "); Serial.print(LoRa.rssi()); Serial.print(" Пакетов/с: "); Serial.print(countLora); Serial.print(" Цыклов/с: "); Serial.println(countCPU); countLora = 0; countCPU = 0; } countCPU++; } void onReceive(byte packetSize) { for ( byte i = 0; i < packetSize; i++) { p[i] = LoRa.read(); } countLora++; }
и что, по вашему, означают эти цифры? - ничего. Это всего лишь число выполнений цикла Луп в секунду. В передатчике вы каждый раз обновляете массив packet[], а в приемнике вообще ничего не делаете, крутите пустой цикл. Не удивительно, что во втором случае число больше.
как эти цифры связаны с быстродействием лора? - да никак
Ответьте лучше, что это за данные такие, что их нужно передавать с такой дикой частотой?
Ответьте лучше, что это за данные такие, что их нужно передавать с такой дикой частотой?
Там всего 20Гц.
Не удивительно, что во втором случае число больше.
А в таком случаи меньше .. но ардуинка делает много лишнего в этом случаи..
а в приемнике вообще ничего не делаете, крутите пустой цикл
Да, и видете получаю пакеты с большим циклом выполнения..(когда приемник принимает пакеты циклов выполнений уменьшаться, а когда не принимает увеличивается) У вас есть идея сделать на передатчике также ?
как эти цифры связаны с быстродействием лора? - да никак
Я имел виду скорость выполнения ардуино.. А лора сколько сможет отправить. Тоесть как обратиться к лоре готова ли она отправить пакет чтобы не обновлять каждый раз массив packet[]
Я имел виду скорость выполнения ардуино.. А лора сколько сможет отправить. Тоесть как обратиться к лоре готова ли она отправить пакет чтобы не обновлять каждый раз массив packet[]
простите, я вас вообще не понимаю... если не обновлять массив packet[], то какой смысл отправлять старые данные. те. что уже были отправлены?
Вы чего добиться то хотите? Какой вообще смысл измерять быстродействие пустой ардуины? Настоящую задачу можете изложить, а не этого сферического коня в вакууме?
если не обновлять массив packet[], то какой смысл отправлять старые данные. те. что уже были отправлены?
Тоже верно, (если данные изменились отправить пакет) но это не то что нужно потомучто данные нужно отправлять свежие лора не даст перепроверить. Я отправляю массив из 8 чисел.. это данные потенциометров и кнопок которые постоянно изменяются и ардуинке нужно их перепроверять + ардуинке подключены всякие датчики, экраны, что впираются в быстродействия лоры.
Вы чего добиться то хотите? Какой вообще смысл измерять быстродействие пустой ардуины? Настоящую задачу можете изложить, а не этого сферического коня в вакууме?
Это макет, чтобы показать самую суть.. зачем ковырять весь код если я изложил всю суть в таком виде..
ардуинке подключены всякие датчики, экраны, что впираются в быстродействия лоры.
повторяю, приведенные выше результаты с быстродействием лоры не связаны никак. Вы не быстродействие лоры проверяете, а занимаетесь откровенной фигней. Если у вас в основном коде тормоза - то и оптимизировать надо тот код, а не крутить пустой ЛУП в ардуине.
Если хотите помощи - Вам надо четко поставить цель - какого именно быстродействия скетча вы хотите добиться. Скажем 10 пакетов в секунду, сто, тысяча... А далее привести ваши текущие результаты для полного кода, со всеми датчиками и экранами. И приготовтесь, что оптимизировать придется конечный код. а не какие-то пустые циклы, что вы показали выше.
OMG, просто нужно чтобы на передатчике ЛУП был ближе к 274922 выполнений, а передача лоры 20пакетов/с. Все, больше ничего. Просто 274922 выполнений/c на передатчике и 20пакетов/с по 8 байт на LoRa sx1278 больше ничего не нужно.
Подпишусь.
OMG, просто нужно чтобы на передатчике ЛУП был ближе к 274922 выполнений
Если вам нужно тупо увеличить цифру - выкиньте из Лупа все, кроме счетчика
Дима, вы правда не въезжаете, что вы хренью занимаетесь? Если хотите измерить быстродействие лоры - это совсем не так делается. Обьяснить?
OMG, просто нужно чтобы на передатчике ЛУП был ближе к 274922 выполнений
Пидец, ты тугой...
Дима, вы правда не въезжаете, что вы хренью занимаетесь? Если хотите измерить быстродействие лоры - это совсем не так делается. Обьяснить?
Объясните, пожалуйста.
Пидец, ты тугой...
Ну посмотрел каков ты эластичный..
Ну если так делать то ардуинка совсем медленно измеряет.
Дима, вы правда не въезжаете, что вы хренью занимаетесь? Если хотите измерить быстродействие лоры - это совсем не так делается. Обьяснить?
Объясните.
если вы хотите понять быстродействие Лора - то и измерять надо время отсылки одного пакета или максимальное число пакетов в секунду. Исправьте свой код, чтобы он непрерывно слал пакеты - и посчитайте, сколько их уйдет за 1000мс
Только сыпать пакетами надо не тупо подряд, а с прверкой готовности передатчика - см в библиотеке
Ну если так делать то ардуинка совсем медленно измеряет.
И сколько получилось?
Что касается "медленно измеряет" - то это ЛОЛ :) Вы правда не понимаеите. что ваши предыдущие цифры типа 271345 раз в секунду - это полный бред?
Добро пожаловать в реальность, как говорится...
На самом деле может и еще меньше, код не вполне верный, вы не проверяете готовность передатчика к работе
На передатчике 28 циклов.
На приемнике Пакетов/с: 26-27 ну, а Циклов/с: 273211
На передатчике 28 циклов.
переходите на асинхронный режим, судя по библиотеке, Лора это умеет.
Число передач в секунду это не увеличит. но на работу остального кода - на все ваши датчики и дисплеи - времени будет оставаться больше.
Быстрее не умет. ну и какбы достаточно.
Но и ардуинка будет измерять со 28 циклов/с. а нужно 270 000 - то что это за цифры тогда ??? Это время исполнения ?
переходите на асинхронный режим, судя по библиотеке, Лора это умеет.
Число передач в секунду это не увеличит. но на работу остального кода - на все ваши датчики и дисплеи - времени будет оставаться больше.
Вот-вот и я про это. Асинхронный режим о господе я к этому шол!.. по библиотеке вижу что на стороне приемника только. Это вот
А Асинхронный режим так это и есть это ?
Нет ?
Вот-вот и я про это. Асинхронный режим о господе я к этому шол!..
Так это и есть это ?
Нет ?
нет
Во-первых, по умолчанию асинхронный режим выключен. а во-вторых - в асинхронном режиме нельзя посылать новый пакет, пока передатчик занят отправкой предыдущего. А вы в коде сыпете их подряд
только ваши 270 тыс циклов - это все равно бред. Похоже Дедсимен прав
Но и ардуинка будет измерять со 28 циклов/с. а нужно 270 000 - то что это за цифры тогда ??? Это время исполнения ?
пипец ты все-таки тупой
пипец ты все-таки тупой
Okay, okay, okay ... Тогда как измерить время исполнения кода ??
Тогда как измерить время исполнения кода ??
какого?
Время работы Лора отдельно от остального кода - вы уже измерили в коде #12. Если вам надо время работы вашей реальной программы - добавляйте в код все "датчики и дисплеи" и измеряйте с ними. В конце концов. ваша конечная программа будет использовать эти датчики или нет? если да - то какой смысл измерять время работы ардуины без них?
Мужики, жесть - это
Она уже отожжённая! Зачем вы тут ещё отжигаете-то?
Oh holy jesus, Асинхронный режим работает ! Смотрите
Теперь на передатчике Циклов/c 132 тис с 1с выполнения асинхронного режима!! и на приемнике получаю Пакетов/с: 27 Циклов/с: 274 тис это КАЛОСАЛЬНАЯ РАЗНИЦА
Так если жесть лаком покрыта, или полимером как ща модно, то один из способов очистить - снова отжечь.
Жгите! Повышайте скорость выполнения пустого цикла!
Так если жесть лаком покрыта, или полимером как ща модно, то один из способов очистить - снова отжечь.
Жгите! Повышайте скорость выполнения пустого цикла!
Он не пустой, а занят обновлением отправляемого массива packet[] что не столь здраво..
Oh holy jesus, Асинхронный режим работает ! Смотрите
это не асинхронный режим.
Вы. Дима, простите, идиот...
Oh holy jesus, Асинхронный режим работает ! Смотрите
это не асинхронный режим.
Вы. Дима, простите, идиот...
А что это ? Сложно объяснить ? аа это таймер асинхронный.
А что это ? Сложно обяснить ?
умному человеку - не сложно было бы... а вам, извините, без шансов. Не вижу смысла чего-то обьяснять человеку, который изо всех сил борется за накручивание пустых ЛУПов в программе... зачем вам асинхронный режим?
Не заметил в вашем коде строчку 9... тут еще и борьба с переполнением миллис :) Полный комплект ардуино-халтурщика...
А что это ? Сложно обяснить ?
умному человеку - не сложно было бы... а вам, извините, без шансов. Не вижу смысла чего-то обьяснять человеку, который изо всех сил борется за накручивание пустых ЛУПов в программе... зачем вам асинхронный режим?
Не заметил в вашем коде строчку 9... тут еще и борьба с переполнением миллис :) Полный комплект ардуино-халтурщика...
Ну я никогда не щитал себя каким-то сверх умным или вовсе умный)) Да нет на свете человека который не ошибался .. И если человек в чём-то ошибаться не думаю что он тупой.. Ладно спасибо и на этом. Смотрю никто тут объяснить что-то не может или опуститься до "такогоо" что кому-то что-то подсказать.)
изучайте внутренности библиотеки лора. И прочтите внимательно мое сообщение 19
Удачи