-
- Ну ок, неправ я. Не написал явно, что результат этого func'а
возвращается и используется там, откуда его вызвали. Т.е. на самом
деле ar-elec(300 знак., 24.04.2024 16:40)
- Ну вот, уже что-то осмысленное. У задачи повышения разрядности
таймера, и получения правильного значения есть классическое
решение, без запрета прерываний вообще. il-2(489 знак., 24.04.2024 16:54)
- Да, согласен. Единственно, по переполнению таймера тоже прерывание.
Хотя, ему можно поставить приоритет ниже, чем у всех остальных,
чтобы они не блокировались, тогда, действительно, должно идеально
сработать. Спасибо! В эту сторону тоже смотрел, но до конца не
продумал. - ar-elec(24.04.2024 16:59)
- Наоборот - приоритет самый высокий... POV(44 знак., 24.04.2024 17:00)
- 3. Повторить чтение - убедиться, что прочитали оно и то же (что не было в момент чтения переполнения счетчика). - POV(24.04.2024 16:58)
- Да, согласен. Единственно, по переполнению таймера тоже прерывание.
Хотя, ему можно поставить приоритет ниже, чем у всех остальных,
чтобы они не блокировались, тогда, действительно, должно идеально
сработать. Спасибо! В эту сторону тоже смотрел, но до конца не
продумал. - ar-elec(24.04.2024 16:59)
- И в гиперлупе и в прерываниях это нужно? Ну запрети прерывание синк
на пару тактов - чему это может повредить? - POV(24.04.2024 16:44)
- Ну, там не пара тактов, конечно, а пара десятков. Может, и ничего.
Критическое время порядка 10 мкс, частота процессора порядка 30-40
МГц. По идее, да, вроде, можно и запретить. Если ничего не
придумается, так и сделаю, но вдруг чудо? - ar-elec(24.04.2024 16:49)
- У тебя несколько команд. В любой момент исполнение функции
чтения-коррекции счетчика может быть прервано прерыванием с вызовом
той же самой функции. И все вычисления идут лесом. Особенно со
статик переменными, которые уж точно в единственно экземпляре (см.
недавнее обсуждение вопроса mse). - POV(24.04.2024 16:52)
- Вычисления лесом можно, теоретически, продублировать и сравнить, ну, и выполнять до тех пор, пока не совпадут, это будет критерием, что их никто не прерывал. В другом месте программы я так и делаю, только там прерывания не меняют этих переменных, так что прекрасно всё работает. А здесь вот - другая ситуасьён. - ar-elec(24.04.2024 16:55)
- У тебя несколько команд. В любой момент исполнение функции
чтения-коррекции счетчика может быть прервано прерыванием с вызовом
той же самой функции. И все вычисления идут лесом. Особенно со
статик переменными, которые уж точно в единственно экземпляре (см.
недавнее обсуждение вопроса mse). - POV(24.04.2024 16:52)
- Ну, там не пара тактов, конечно, а пара десятков. Может, и ничего.
Критическое время порядка 10 мкс, частота процессора порядка 30-40
МГц. По идее, да, вроде, можно и запретить. Если ничего не
придумается, так и сделаю, но вдруг чудо? - ar-elec(24.04.2024 16:49)
- Ну вот, уже что-то осмысленное. У задачи повышения разрядности
таймера, и получения правильного значения есть классическое
решение, без запрета прерываний вообще. il-2(489 знак., 24.04.2024 16:54)
- Ну ок, неправ я. Не написал явно, что результат этого func'а
возвращается и используется там, откуда его вызвали. Т.е. на самом
деле ar-elec(300 знак., 24.04.2024 16:40)