ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
6 мая
159014 Топик полностью
Evgeny_CD, Архитектор (14.06.2009 12:57, просмотров: 244) ответил Evgeny_CD на Ветка для идей по продвинутому API для RTOS
Блокирующий вызов юзеровской функции. Способ избеганий лишних критических секций. В примере про логгер -> попытка отказа от критической секции при выделении блока памяти привелка к некоей возне с записью и проверкой переменных, а также к потенциальной проблеме при хаотичной передаче управления. Было бы проще, если бы можно было сделать так: * есть некая юзеровская функция, реентерабельная, которая (в идеале - на этапе написания кода) регистрируется как специальная блокирующая. Ось делет так, что вызов этой функции означает монопольную передачу ей управления, т.е. конкурирующим кодом, которые лезет в ту же память, она не прерываеся, а прерывания - они у нас всегда разрешены :) * поток при жалании аллокировать буфер пишет флаг - временное повышение приоритета до максимума на время t, оно же мягкая критическая секця * если в это время случится системный тик, то он отрабатывает вхолостую, и прерывание тика переставляется на время t * вызывается наша специальная функция. Она пишет в системные параметры, что прерывать ее нелья, делает свое дело, перед возвратом делат мягкую притическую секцию, снимает свой родной запрет, возвращяется * блок в этот момент четко аллокирован, и никто его на заховает * поток в обычном режиме работает с блоком, прервали - так прервали.