Цитата(Corvus @ Jul 11 2015, 08:52)

Спасибо за ссылку.
Ну тут я посмотрю позже.
Я под гнутым или кейлом, а тим ИАР - зверь мне неведомый.
Частично проблемма решена...
1. Ошибкой было использовать QSerialPort в качестве приемника со стороны PC.
Насколько я понял, он сильно тормозит и тупо перестает передавать данные из буфера ядра в мой буфер, a первый оч быстро переполняется.
Так же он , как мне кажется, не совсем адекватно работает с буферами большого размера.
За сим, чисто виндовыми средствами (ReadFile, WriteFile) пользуюсь теперь. Опять же в MinGW QT для простоты.
2. С передающей стороны я передаю по 64 байта за раз, а потом жду окончания передачи вот так:
Код
GPIOB->BSRR = GPIO_PIN_8;
int k = 0;
char *a = (char *)l1;
while( k < 512*4)
{
CDC_Transmit_FS(a,64);
while(USBD_CDC_Busy());
a += 64;
k += 64;
}
dsaved += 2048;
GPIOB->BSRR = (uint32_t)GPIO_PIN_8 << 16;
////
....
int USBD_CDC_Busy()
{
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) hUsbDevice_0->pClassData;
return hcdc->TxState;
}
При тактовой ~168 МГц (у меня клок проца 4096кГц. так надо.) передача 2048 байт пакетами по 64 байта занимает 2.5мс (смотрю осциллом на порту Б пин 8).
это значит, что реально скорость передачи получается 2048 * 8 * (1/0.0025) =~ 6.5 МБит/сек.
При этом ничего не теряется и не сбивается, что радует.
Ну и, если кому вдруг интересно (сие позволило измерить), у pcm3500 кросс-талк получается около -92дБ.