Цитата(bmf @ Jun 11 2005, 01:39)
И еще, посмотрите как в uCos ищется самая приоритетная задача, и как в smcRTOS или freeRTOS и увидите что время поска при любом переключении (через swithtask или при установке семафора) будет в 10 раз меньше.
Насчет freeRTOS не скажу, давно уже не смотел в ее сторону. А про uCOS, конечно, знаю. Две итерации по таблице. При количестве процессов менее 8 это ДОЛЬШЕ, чем в scmRTOS, где просто тупой перебор-поиск признака активного процесса. В scmRTOS всего максимум может быть 15 пользовательских процессов, реально их бывает не более 8 (я не знаю никого, кто бы использовал больше на мелких МК с килобайтом-двумя ОЗУ). Поэтому в ее случае можно позволить себе максимально простой и легкий алгоритм поиска. С 64-мя задачами такого делать уже нельзя. В этом и состоит их главное отличие - бОльшая масса обладает бОльшей инерцией.
Насчет реальных времен переключения процессов: я проводил такой эксперимент: один процесс, более приоритетный, встает на ожидание флага. Другой процесс устанавливает ножку МК в 1 и сигналит флаг. Когда после этого ожидающий процесс получает управление, он сбрасывает ножку МК в 0. По длительности импульса и определяется время передачи уплавения между процессами. На MSP430F149 при тактовой частоте ~5 МГц на scmRTOS время было порядка 26-27 мкс, на uCOS - около 50 мкс (или около того, могу уже точные цифры наврать, давно было, но запомнилось, что где-то порядка двух раз). Комплятор в случае scmRTOS был IAR v2.0x, в случае uCOS - 1.26. Качество кодогенерации смотрел, никаких нареканий к 1.26 не помню. Причина, по которой использовалсь разные компиляторы - для scmRTOS нужны ++, для uCOS был порт под 1.26.
Т.ч. Ваши заявления про 10 раз - извините, бред с любой стороны (ни одна из ОС не имеет такого преимущества перед другой - максимум раза в три), и uCOS медленее. Не верите - возмите и проверьте сами.
«Отыщи всему начало, и ты многое поймёшь» К. Прутков