ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
427478 Топик полностью
Д.ARMоед (25.07.2013 14:14, просмотров: 438) ответил Ксения на Это не поможет. Число на дисплее приходится обновлять каждую секунду, а беда в том, что почти половину из этой секунды пожирает Display_Step(). Причем расходуется не на дело, а на таймауты. Не будь этих таймаутов, то Display_Step() можно было хоть
Поможет. Display_Step() рубить нельзя.  Для Display_Step(): Вам известно, после каких действий начинать таймаут. Именно после них запоминаем номер "точки выхода" и сразу переходим в конец процедуры, где устанавливаем DISPLAY_LAZY_TIME = RTC_TIME + TIMEOUT_VALUE. Усё. Выходим из Display_Step(). При следующем заходе в Display_Step() проверяем DISPLAY_LAZY_TIME > RTC_TIME: true : тупо выходим. false: продолжаем после запомненной "точки выхода". Естественно, это не вся логика - ещё нужно дополнить реакцией на DISPLAY_UPDATE_BIT и правильно учитывать переход RTC через ноль. Таким образом, Ваш дисплей - это асинронный конечный автомат с состояниями по номерам "точек выхода". И эти состояния не "макаронят" Main loop своим расписанием, а обрабатываются только в процедуре дисплея, не блокируя выполнение других процедур на время таймаутов.