-
- Буферизация флагов плюс проверка первичных флагов до засыпания вроде должны решить проблему. Vladimir Ljaschko(318 знак., 09.07.2012 08:43)
- Это понятно, просто сталкивался с возникновением событие ПОСЛЕ проверки event перед самым уходом в спячку! Блин, не ожидал, что такая маловероятная ситуация будет возникать часто что бы напрягать :) - Aлexин Aлeкcaндp(09.07.2012 08:54)
- как не потерять ясно. не ясно как не уснуть при наличии флага, который еще не обработан! Потому что уснув - я проснусь фиг знает когда и обработаю флаг, который уже может и обрабатывать не надо! - Aлexин Aлeкcaндp(09.07.2012 09:29)
- Да запретить прерывания ДО GetEvent() - "вот и нет проблемы"! ;) - Vladimir Ljaschko(09.07.2012 09:27)
- Это понятно, просто сталкивался с возникновением событие ПОСЛЕ проверки event перед самым уходом в спячку! Блин, не ожидал, что такая маловероятная ситуация будет возникать часто что бы напрягать :) - Aлexин Aлeкcaндp(09.07.2012 08:54)
- Оставьте одно из прерываний таймера для регулярной побудки. Получите настраиваемый параметр "допустимая задержка обработчика". - Скрипач(08.07.2012 23:42)
- не могу - на потреблении очень жестко завязан. Регулярная пробудка все сведет на нет. Только просыпание по событиям. - Aлexин Aлeкcaндp(09.07.2012 08:26)
- В том-то и фигня что с момента проверки до засыпания событие может возникнуть. Вариант одни - запрещзать прерывания, проверять флаги и засыпать БЕЗ разрешения прерываний! Потому что между разрешением прерываний и засыпанием прерывание может Aлexин Aлeкcaндp(98 знак., 09.07.2012 08:44)
- В некоторых камнях после РАЗРЕШЕНИЯ прерываний гарантированно выполняется одна команда. Не ваш случай? - Скрипач(09.07.2012 16:04)
- Не после разрешения, а после выхода из прерываний. Довольно наворочено получается. =AlexD=(349 знак., 10.07.2012 08:07 - 08:11)
- хорошо, читаю! - Aлexин Aлeкcaндp(09.07.2012 09:14)
- Настаиваю, что Вам нужно прочесть это --> - Vit(09.07.2012 09:12, ссылка)
- В некоторых камнях после РАЗРЕШЕНИЯ прерываний гарантированно выполняется одна команда. Не ваш случай? - Скрипач(09.07.2012 16:04)
- Разбейте программу на модули. И сделайте разрешение засыпания. Проц проснулся, пробежался по модулям. В конце карусели опрос флага разрешения засыпания. Пробежался опять. И до тех пор, пока все функции и автоматы не пройдут все состояния до mazur(22 знак., 09.07.2012 08:39)
- В том-то и фигня что с момента проверки до засыпания событие может возникнуть. Вариант одни - запрещзать прерывания, проверять флаги и засыпать БЕЗ разрешения прерываний! Потому что между разрешением прерываний и засыпанием прерывание может Aлexин Aлeкcaндp(98 знак., 09.07.2012 08:44)
- плюс оставьте включенным источник тактирования и собственно тикающий таймер... - Vit(08.07.2012 23:51)
- +1. О том же хотел упомянуть. - SciFi(08.07.2012 23:44)
- не могу - на потреблении очень жестко завязан. Регулярная пробудка все сведет на нет. Только просыпание по событиям. - Aлexин Aлeкcaндp(09.07.2012 08:26)
- А флаг признака ухода в спячку у вас имеется? Вам видимо некий менеджер энергопотребления требуется. - rezident(08.07.2012 23:24)
- А сколько уровней энергопотребления Вы собираетесь использовать? - Vit(08.07.2012 23:16)
- 2 комплекта флагов. В каждом комплекте флаг изменения и флаг "используется фоновым циклом". Указатель или индекс комплекта отдельно для прерываний и для фонового обработчика. Юрий_СВ(793 знак., 08.07.2012 15:58 - 16:59)
- WFE далеко не все производители кремния покупают - Vit(09.07.2012 09:23)
- Я не вижу проблемы. Если флаги у вас все равно выставляются в прерываниях, то и обработаются. mazur(416 знак., 08.07.2012 13:40)
- Элементарно: после любого прерывания засыпания не должно быть пока цикл не выполнится полностью ещё раз. Флаг может стоит заменить на счётчик и выполнять цикл всегда по N-раз после пробуждения (в т.ч. по факту прерывания) -- это потому, что fk0(226 знак., 08.07.2012 13:19)
- Вместо флага - счётчик. Прерывание увеличивает его, обработчик - уменьшает. Обрабатывать, пока счётчик не уменьшится до нуля. - SciFi(08.07.2012 12:12)
- Тут проблема скорее не в потере события, а в непрогнозируемой и очень большой задержке его обнаружения - ведь мы уходим в слип не обработав его, и не известно, когда из слипа вернемся что-бы увидеть его! - Алехин Александр(08.07.2012 12:17)
- Я правильно понял, что МК просыпается по прерыванию, а обработчик прерывания устанавливает флаг? Тогда SciFi(196 знак., 08.07.2012 12:23)
- В принципе вариант. Спасибо. - Алехин Александр(08.07.2012 12:32)
- Есть статья с вариантами засыпания - Vit(08.07.2012 23:37, ссылка)
- Туплю, критическую секцию можно оформить и иначе. Главное, чтобы в ней не выключался механизм выхода из сна. - SciFi(08.07.2012 12:28)
- В принципе вариант. Спасибо. - Алехин Александр(08.07.2012 12:32)
- Я правильно понял, что МК просыпается по прерыванию, а обработчик прерывания устанавливает флаг? Тогда SciFi(196 знак., 08.07.2012 12:23)
- Тут проблема скорее не в потере события, а в непрогнозируемой и очень большой задержке его обнаружения - ведь мы уходим в слип не обработав его, и не известно, когда из слипа вернемся что-бы увидеть его! - Алехин Александр(08.07.2012 12:17)
- Буферизация флагов плюс проверка первичных флагов до засыпания вроде должны решить проблему. Vladimir Ljaschko(318 знак., 09.07.2012 08:43)