Ну, как баг: при первом после старта запуске трехинтерфейсного USB-CDC (первый интерфейс - команды, второй - датчик оси Х, третий - датчик оси У) примерно в трети случаев в ответ на первую команду вылезает мусор..
Командный интерфейс еще и немножко отладочный, и там появляются сообщения об активации/деактивации других интерфейсов (и в т.ч. его самого). Использую разные кольцевые буферы: по 2 буфера на каждый интерфейс (чтение/запись). ХЗ, как это возможно, но кусок от "Interface 0 connected" иногда попадается на самом первом вызове (т.е. вместо команды "help" я вижу "Interface 0 connhelp").
Если ставлю на функции записи в кольцевой буфер точку останова, вообще ни разу не воспроизводился баг. И ладно бы, он был всегда после сброса, но ведь в паре случаев из трех все ОК!
Попробовал вместо -O2 компилять с -O0. Та же история. Появляется и в debug-режиме (без -flto) и в release (с -flto).
На других железках с тем же стеком USB (самопальный) такого не видел. Правда, остальные железки у меня на эмуляции pl2303, а здесь сдуру сделал "классический" CDC (который ни фига не шлет BREAK при отключении, а только лишь SET_CONTROL_LINE_STATE с нулем).
И, что обидно, даже совета у коллег не спросишь: никто у нас в обсерватории STM32 baremetal не программирует (хотя, есть у меня подозрения, что и "не-baremetal" тоже, т.к. есть еще "полтора" железячника, которые до сих пор на аврках сидят или даже хуже - абдуринах)…
Если кому интересно, что за железяка - контроллер двух энкодеров с монтировки телескопа:
https://github.com/eddyem/stm32samples/tree/master/F1%3AF103/BISS_C_encoders