sir999
New member
Эх, божешь ты мой.... Это еще и через ардуиновские библиотеки все пропихивается? ... Нахрена?Arduno ESP8266:
Arduno ESP32:Код:Start Test at 44 (millis)... Average data 61.60 (61), worked time: 2916 ms Start Test at 3060 (millis)... Average data 61.60 (61), worked time: 2916 ms ...
И врет время. Пишет 16 сек, а проходит более 20... Т.е. даже все потроха FPU сбивает... В зависимости от сборки и включения питания модуля показывает и 0 ms. При этом счет millis() идет только на delay(50+50) в приложенном коде. Выходит нечто такое:Код:Start Test at 47 (millis)... Average data 122.02 (121), worked time: 16912 ms Start Test at 17059 (millis)... Average data 122.02 (121), worked time: 16909 ms Start Test at 34068 (millis)......
Arduno RTL серии "A" ~ 2300 ms (нет FPU, нет XIP)Код:Start Test at 47 (millis)... Average data 122.02 (121), worked time: 0 ms Start Test at 147 (millis)... Average data 122.02 (121), worked time: 0 ms Start Test at 247 (millis)......
Arduno RTL серии "B" ~ 300 ms (есть FPU, есть XIP)
Навеяно гонять double и float массивами этим -> https://esp8266.ru/forum/threads/rtl8710bn-potreblenie-cpu.3190/page-6#post-49118Код:#if defined(ARDUINO_AMEBA) #include "flash_api.h" #define flash_read_dword(faddr, pdata) flash_read_word(&flashobj, faddr, pdata); #else #include "Esp.h" #define flash_read_dword(faddr, pdata) ESP.flashRead(faddr, pdata, 4); #endif void setup() { Serial.begin(115200); } #define count (1024*1024) uint32_t summ = 0; float f = 0.0; void test(void) { uint32_t faddr = 0; uint32_t dw; while (faddr < count) { flash_read_dword(faddr, &dw); faddr += 4; for (int i = 0; i < 4; i++) { uint8_t b = (uint8_t)dw; f += (float)b; summ += (uint32_t)b; dw >>= 8; } } f /= (float) count; summ /= count; } void loop() { Serial.print("Start Test at "); Serial.print(millis()); Serial.println(" (millis)..."); delay(50); volatile uint32_t mm0 = millis(); test(); mm0 = millis() - mm0; Serial.print("Average data "); Serial.print(f); Serial.print(" ("); Serial.print(summ); Serial.print("), worked time: "); Serial.print(mm0); Serial.println(" ms"); delay(50); }
Конкретно tpm_server/main.c at master · MBleiders/tpm_server · GitHub
На RTL скомпилил это путем мелких замен названий процедур и получил скорость в десятки кsps... А с ESP32 - не выходит...
Вообще, знаете сколько выполняется команда в arduino "Serial.print" ? И до кучи библиотеки "delay"... Как выражаются у нас профи-программисты:- "Говнокодище!"
Берите SDK и используйте хотя бы макросы оттуда, если уж сами не можете человеческий таймер написать, и никогда не используйте ардуиновский "Serial.print" при подсчетах времени.
Поэтому все относительно. Можно через кучу библиотек управлять включением светодиода, и плакаться, что все тормозит, а можно прямым управлением регистра это делать и не создавать себе буфера из море выполняемых библиотек.
Так что Вы тут говнокодом сами себя подставили.
Чем чморить ESP, kучше бы предоставили информацию а-ля "быстрый старт на RTL" со всеми вкусняшками.