ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
427247 Топик полностью
Evgeny_CD, Архитектор (24.07.2013 22:16, просмотров: 771) ответил SciFi на Давно холиваров не было. Как насчёт RTOS vs Main Loop? Поделитесь практическим опытом. Сам RTOS не применял, да и не очень хочется.
"Специалист подобен флюсу - полнота его одностороняя". Идеализм с полновытесняющей RTOS доступен только в толстых системах. Подход "без ОСи" достоин сжигания. На самом деле должно быть 3 ипостаси: * компактная вытесняющая RTOS * хороший менеджер памяти типа http://www.gii.upv.es/tlsf/main TLSF (Two-Level Segregate Fit) * кооперативная ОСька той или иной разновидности В режиме полного вытеснения нужно пускать: * малостекожрущие потоки, которые, в основном, работают с указателями на блоки в глобальной памяти * "софтовая" часть прерываний. Поясню. Есть драйвер UART. Который работает с принятыми|переданными символами и кольцевым буфером. Простой и короткий, работает по прерыванию. И есть "софтовая часть" Которая в этом потоке находит управляющие символы LCP (PPP, http://tools.ietf.org/html/rfc1661), восстанавливает кадры, разбирает все до IP пакетов и проверяет их суммы, сама херит битые пакеты. И есть IP стек, который имеет смысл дергать, только когда пришел полный IP пакет, или готов IP пакет для отправки, или истек таймер. Выход "софтового прерывания" можно использовать для шедулинга кооперативной OS. И есть один или несколько "тяжеловесных потоков", хорошо жрущих стек, но у которых RT - это миллисекунды. Там живут кооперативки. На мой взгляд, это и есть оптимальных подход. И еще одно. С++. В идеале было бы наговнокодить шаблонов, чтобы было пофиг, под что писать - кооперативка или вытеснение. Чтобы прикладной код не менялся вообще!