Нужен отдельный котёл для эмбеддеров, делающих фрейминг в serial link (будь то uart или еще что-то) тупо на счётчике байтов, без какого либо стаффинга. Зато там црц есть. Если удастся его найти в потоке-то.
This entry was originally posted at
https://ex0-planet.dreamwidth.org/102228.html. Please comment there using
OpenID.
ЗЫ: вообще упустил, что сейчас в большинстве случаев Serial не физический, а эмулированный. Сам я, когда что-то делаю, всегда по старинке подразумеваю, что он физический.
Reply
Таймауты... ну, я бы сказал что грамотный фрейминг не сложнее плясок с таймаутами. Можно и на таймаутах, конечно, и в большинстве случаев всё будет работать потому что пакет скорее всего пролезет в буфер целиком и прочее в таком духе, но вообще это наслоения текущих абстракций. И когда это сломается, никто не будет разбираться - "просто передёрните питание".
Reply
Reply
Ну вот послали мы заголовок "щас пришлю картинку", потом полезли за картинкой в память, а она возьми да и засвопься. Вот и таймаут. А потом утилита наваливает в ничего не подозревающую стейт машину какие-то байты.
Сам дурак и надо было ставить ssd?
Reply
А вообще, такого заголовка на уровне канального протокола быть не должно. На его выходе должно быть N байтов, свободных от ошибок, и точка. С тем, картинка это или её фрагмент, должен разбираться протокол более высокого уровня.
Reply
Это по большому счёту та же проблема что и в TCP, когда молодые программисты считают что сколько write() вернул, столько и передано. Не-а. Эти байты могли вообще потеряться в эфире; приёмник должен сам сказать сколько он услышал.
Эх, если б все протоколы делались по уму и молодые программисты всегда слушали старших хотя б учитывали предыдущий опыт, а не топтались по одним и тем же граблям....
Reply
Reply
Девятый бит вкупе с нестандартной скоростью это редкая пидерсия, я б за такое выступающие части отрывал.
Reply
Reply
Leave a comment