Чем шире открываешь объятия, тем легче тебя распять.
Фридрих Ницше

Меню навигации для мобильных

Можно ли сократить исп. памяти при использовании цикла как тика счётчика?

Автор Shaman, 01 Дек., 2023, 14:36

« предыдущая - следующая »

Shaman

Уважаемые кто силён в математике?
Дано цикл длительностью 20us в конце которого переменная инкементируется, тем самым считая время. И если считать напрямую для длительности в минуту получаем 4-х байтное число. Будет ли выигрыш в использовании памяти и других ресурсов МК Atmega если делить это число? Допустим разделить на 2-х и однобайтное число, дабы переполнение одного увеличивало другое? Или может ещё какие приёмы есть?

Таймеры в МК заняты.

P.S.
Заодно спрошу, а как реализован аппаратно делитель железного таймера?

Slabovik

Боюсь, что тут не будет однозначного ответа. Си довольно аккуратно относится к работе с длинными переменными, что в итоге размен четырёх байт на три погоды не сделает. Но опять же - надо пробовать, ибо в разном контексте может генерироваться разный код.

По-умолчанию сравнение переменной с константой начинается со старших байт, а когда они относительно долго не меняются (а меняются только младшие), такое сравнение по факту пустопорожнее, но на высоком уровне с этим ничего не сделать, да и на самом деле оно проходит быстро - там только вычитание и переход по Z/C либо на равно/не равно, либо исполнение следующего сравнения.

Слегка ускорить сравнение выходит тогда, когда счётчик работает не на увеличение, а на уменьшение. В этом случае в счётчик заносится нужное число (та самая константа, с которой обычно сравниваешь), а в процессе счётчик уменьшается, и когда становится 0 - что-то происходит. Сравнение с 0 чисто с точки зрения низкоуровневого исполнения получается быстрее - не нужно каждый раз вытаскивать константу (она заносится вообще один раз в самом начале).

С точки зрения железа счётчиков, то тут много нету. Их основа - триггеры, включенные в счётный режим и сгруппированные для получения нужной разрядности. У разных триггеров есть свои нюансы, которые надо учитывать. Я полагаю, вопрос надо уточнить.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.