Вход
Наше всё
Теги
codebook
无线电组件
Поиск
Опросы
Закон
Четверг
18 сентября
О смысле всего сущего
0xFF
Средства и методы разработки
Мобильная и беспроводная связь
Блошиный рынок
Объявления
Микроконтроллеры
PLD, FPGA, DSP
AVR
PIC
ARM, RISC-V
Технологии
Кибернетика, автоматика, протоколы
Схемы, платы, компоненты
Микроконтроллеры
1542441
Топик полностью
IBAH
(16.09.2025 17:41, просмотров: 38)
ответил
Anvar
на
флаг обновления данных TimHigt (семафор). В прерывании устанавливаете. Перед чтением данных сбрасываете, если после чтения флаг установлен, еще раз сбрасываете и еще раз читаете данные, если и после этого флаг установлен, генерируете исключение.
я в принципе это и делаю TimH0=TimHigt; TimL=TIM2->CNT; TimH1=TimHigt; if(TimH0==TimH1) {return TimH0|TimL; }
Ответить
У вас обычное ошибочное предположение нереалтаймщика, что после "unsigned long TimH1=TimHigt;" TimHigt не увеличивается еще на 1.
-
Anvar
(16.09.2025 19:34
)
Это у вас мнение "реалтайм" операционщика что между TimH1=TimHigt; и
return TimH1|(TIM2->CNT);
может пройти больше 65536 тактов
-
IBAH
(Вчера, 11:23
)
И главное же никаких прерываний! Все будет хорошо)
-
Anvar
(Вчера, 11:47
)
Только надо do{....}while(TimH0!=TimH1);return TimH0|TimL;
-
AlexBi
(16.09.2025 18:43
)