ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
947264 Топик полностью
fk0, легенда (20.09.2019 11:53, просмотров: 675) ответил Codavr на FreeRTOS. По многим причинам она была для меня оптимальна, посему не поленился портировать ее на свой процессор. Очень понравилось с ней работать. Оси для которых нет нихуя кроме самой оси и те что хотят денех не рассматривал за ненадобностью. И
Оптимальна??? Типичный пример уебищной недооси, когда авторы прочитали Таненбаума, Дейкстру и ещё кого-то и намешали всего в кучу. Но при этом не сделано элементарно нужных вещей. Во-первых что ты называешь операционной системой? В классическом определении там и загрузка программ, и управление памятью есть. Здесь же только функции "многозадачности". Управление памятью на уровне malloc/free в лучшем случае. В этом смысле ОС -- например nuttx. А с многозадачностью всё совсем не очень. Ряд элементарных базовых алгоритмов, известных всем программистам нормально реализовать -- проще свой шедулер уж сделать. Камнем преткновения является как всегда какой-то аналог "WaitForMultipleEvents" из Win32 API. В юниксе -- select(2). В ITRON -- event flags. А что здесь? Как мне строить архитектуру, когда я не могу одновременно ждать более чем одного события? Какой смысл в такой многозадачности? В итоге они таки сделали event bits, по аналогии с ITRON. Только сколько там этих битов? Штуки 32 обычно, не больше. Не говоря уж о том, что динамически создавать невозможно. Скажешь очередь? Но принципиальная проблема очереди, что в ней обработка событий собственно возможна только в порядке очереди... В итоге приоритеты умножены на ноль. И поверх той же очереди нужно организовывать какие-то свои более сложные механизмы. И тут приходит понимание, что ту же условную переменную (conditional variable) эффективно сделать можно только с помощью thread local storage, которого у них тоже изначально не было. Неэффективно можно на семафорах, как это сделано в SDL, там по два переключения контекста на каждый ожидающий поток (не быстро). А если нужен rwlock например, то что делать? Нормальная реализация тянет за собой ту же condvar. Ну и вишенкой на торте там является то, что своей libc у них нет, предполагается использование какого-нибудь IAR, а libc последнего об наличии вытесняющей ОС ни сном, ни духом и вся из себя такая непотокобезопасная, разумеется. Программировать без libc? Например, в nuttx, поэтому своя libc.
[ZX]