Разъясните пожалуйста.
- Войдите на сайт для отправки комментариев
Сб, 01/08/2020 - 10:12
Наткнулся на полезную, на мой взгляд, статью про работу с таймерами.
Один из примеров из статьи:
Задача 4: узнать сколько прошло времени между метками t1 и t2
Данные меньше разрядности int (8 бит)
uint8_t t1, t2, elapsed; t1 = TCNT0; /* записали первую метку */ t2 = TCNT0; /* записали вторую метку */ elapsed = (uint8_t)(t2 - t1);
Данные больше или равны разрядности int (16, 32, 64 бита)
uint16_t t1, t2, elapsed; t1 = TCNT1; /* записали первую метку */ t2 = TCNT1; /* записали вторую метку */ elapsed = t2 - t1;
Не могу понять, при чем тут разрядность int?, зачем в строке 5 в первом случае явное приведение разности к uint8_t?
Пробовал в средах Ардуино и Атмелстудио - результат одинаков что с явным приведением, что без него.
Не понимаю, что имел ввиду автор, может кто пояснит?
Не понимаю, что имел ввиду автор, может кто пояснит?
ну он решил на всякий случай подстраховаться, лишний раз напомнив компилятору, что разность t2 и t1 следует считать в типе UINT8_T, хотя по другому и быть не могло, раз обе переменные описаны в этом типе
Забейте, даже в самых толковых статьях попадаются ошибки... а эта и не ошибка вовсе - так, лишний квалификатор, который, как вы сами убедились, ни на что не влияет
Не могу понять, при чем тут разрядность int?, зачем в строке 5 в первом случае явное приведение разности к uint8_t?
У атмеги int 16 разрядный. Приведениев строке 5 не обязательно. Поскольку оба операнда uint8_t и результат по умолчанию uint8_t
Забейте
Вчерашний вечер посвяти поискам и экспериментам, а вдруг в этом есть скрытый сакральный смысл((.
уотт вас плющит с_утреца, бле@
чОтныйа счОтчеки в AVR васьмибитныйе, ничотныйа шыснаццатибитныйе (нифсихда) --- пасиму ризультат:
u8-u8=u8
u16-u16=u16
Это же очевидно.
а вдруг в этом есть скрытый сакральный смысл((.
Вообще-то есть, но это не Ваша лига - забейте и не берите в голову.