Вставил картинку, а не листинг чтобы было видно результаты работы программы.
Решил сравнить скорость работы функции map() и простого вычисления. На картинке строки 14 и 15. Простое вычисление получается быстрее. При этом заметил что map() не выводит значение после запятой. Первые четыре строки в Мониторе порта. Если поставить в Serial.print(sensorValue,1); количество цифр после запятой, к примеру четыре, будет выводить четыре 0. Но если закомментировать строку 14 и раскомментировать строку 15 , оставив простое вычисление, то знаки после запятой показывает как должно быть. Строка 2 объявление переменной не меняется.
Некорректное сравнение: Вы сравниваете результат выполнения функции, производящей 6 арифметических операций с выражением, содержащим единственную математическую операцию с использованием заранее вычисленной константы.
Кстати, самая продолжительная операция в map - это целочисленное деление, она одна выполняется дольше, чем любая арифметическая операция с плавающей точкой. И еще: типы double и float для AVR одинаковы.
В общем, внимательнее следите за типами, участвующими в выражении и имейте в виду, что время выполнения различных арифметических операций соотносится примерно так:
Быстрее всего - целочисленные сложение, вычитание и умножение.
Заметно медленнее - операции с плавающей точкой.
Медленнее всего - целочисленное деление чисел типа long int.
нельзя сравнивать несравнимое, ESP32S3 делает STM32F4 в целочисленной арифметике почти на порядок, вот к примеру я измеряю напряжение, ну скажи нахрена его держать во float, умножай на тысячу и держи в милливольтах, два байта экономии, а так как нужны вообще-то % переводим в 0-100 и одного байта достаточно )))
Учитывая, что аналогрид считывает далеко не во флоат и стм нигде не упоминалась, то в принципе всё норм. А с умножением на тыщу и проценты - согласен. Удобненько
Мкей, побуду ..Хм-хм. Хотяяя, да вы совершенно правы! Молодцом! Ведь Esp32 и esp32s3 абсолютно идентичные вещи. Да и стм первой и четвёртой серии тоже копии!
Можно чем-то подтвердить это высказывание?
ESP32 не гонял, а ESP8266 чуть быстрее (в расчете на такт) выполняет сложение, вычитание и умножение - процентов на 20, зато деление - медленнее в 12 раз. А, учитывая, что деление сама по себе медленная операция, ESP не выигрывает, а, наоборот, проигрывает STM32F4 примерно в 10 раз, т.е. на порядок.
Это, повторюсь, в расчете на такт, в абсолютных единицах ESP8266 проигрывает STM32F407 уже раз в 30.
Только небольшое замечание: 32-разрядные процессоры оперируют с 8- и 16-разрядными числами медленнее, чем с 32-разрядными.
И потом - откуда взялись 1000 или 100? Удобнее всего хранить в естественных единицах - т.е. тех, которые отдает датчик.
Отнюдь.
У них и настройка периферии выполняется по-разному (у F4 - намного логичнее), и время выпjлнения в тактах различается (F4 ощутимо быстрее, чем F1).
Так это для плавающей точки, хотя речь шла о:
Что же касается плавающей точки, у меня сложилось впечатление, что компилятор просто не в курсе, что у STM32F4 может быть FPU, поэтому он все делает на целочисленных командах.