Самое сложное в безделье – это то, что нельзя остановиться и передохнуть.

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

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

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

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

Shaman

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

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

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

Slabovik

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

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

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

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