[STM32Generic] Serialusb Print (F (Speed ​​и доступен ForWrite ()

Пито
Солнце 18 июня 2017 г. 16:00
Объединяя пример Zmodem:
1. Мы скучаем по сериалу.Доступный метод offrite ()
2. Когда я смотрю на скорость Serialusb при печати кучу струн (через сериал.Печать (F (..))) мое впечатление, что он работает как 9K6, я думаю, это должен быть самый быстрый режим, который у нас есть.. Может я что -то сделаю не так?

Пито
Солнце 18 июня 2017 г. 16:59
Это скамейка для сериала.print (f ()) через serialusb (168mhz f407zet):
Обновление: println (f (vs. println ( // Serial.print(F()) via SerialUSB benchmark // Pito 6/2017 void setup() { Serial.begin(115200); delay(3000); uint32_t elapsed = micros(); for (uint32_t i = 0; i < 20; i++) { Serial.println(F("THIS IS A TEST THIS IS A TEST THIS IS A TEST THIS IS A TEST THIS IS A TEST")); } elapsed = micros() - elapsed; Serial.print("Elapsed with (F(: "); Serial.print(elapsed); Serial.println(" usecs"); Serial.println(" "); elapsed = micros(); for (uint32_t i = 0; i < 20; i++) { Serial.println("THIS IS A TEST THIS IS A TEST THIS IS A TEST THIS IS A TEST THIS IS A TEST"); } elapsed = micros() - elapsed; Serial.print("Elapsed: "); Serial.print(elapsed); Serial.println(" usecs"); } void loop() { }

Даниэфф
Солнце 18 июня 2017 г., 17:07
F407VE
...
Это тест, это тест, это тест, это тест, это тест
Истекло: 198278 USECS

Пито
Солнце 18 июня 2017 г., 17:09
Это в 8 раз быстрее.. :(
Мои часы конфигурация: RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 7;

Пито
Солнце 18 июня 2017 г., 17:42
Кто -нибудь может попробовать под Win7, плз?

Стивестронг
Солнце 18 июня 2017 г. 18:46
Не общее, но так же, как и сравнение с Libmaple F407VET6: Elapsed: 484 usecs

Пито
Солнце 18 июня 2017 г. 18:59
Это в 3100 раз быстрее, чем шахта.. Так что, похоже, что что -то не так с серийным сериалом F407ZET : D

Пито
Пн 19 июня 2017 г. 10:39
Я обновил эталон выше и:
1. с сериалом.println ("Это.. требуется 39971 usecs
2. с сериалом.println (f ("Это.. Это требует 1496123 USECS
Так кажется, что «F» - это проблема здесь.. (Black F407Zet)

Пито
Вторник 20 июня 2017 г., 23:57
@Daniel и Steve: Я не понимаю, как вы можете получить такие скорости с печати с «F».
При прохождении через его отладчиком «F» печатает каждый из них индивидуально через USB (после каждой записи (C) ниже я вижу новый символ в терминале Teraterm) size_t Print::print(const __FlashStringHelper *ifsh) { PGM_P p = reinterpret_cast(ifsh); size_t n = 0; while (1) { unsigned char c = pgm_read_byte(p++); if (c == 0) break; if (write(c)) n++; else break; } return n; }

Даниэфф
Ср 21 июня 2017 г., 4:31
Libmaple оптимизирует версию этого size_t Print::print(const __FlashStringHelper *ifsh) { return print(reinterpret_cast(ifsh)); }

Стивестронг
Ср 21 июня 2017 г., 4:40
Для Libmaple это время для копирования струн в буфер TX.
Только при 27 -м тесте... Строка получает буфер полного... :)

Пито
Ср 21 июня 2017 г., 6:26
[Даниэфф - Ср 21 июня 2017 г., 4:31] - Libmaple оптимизирует версию этого size_t Print::print(const __FlashStringHelper *ifsh) { return print(reinterpret_cast(ifsh)); }