Общая рекомендация - использовать таймеры для записи времени, некоторые утверждают, что прерывания могут привести к переводу микросхемы в режим пониженного энергопотребления. Но с такими процессорами, как PIC18, где вы можете посчитать инструкции и очень точно из них определить время выполнения, чтобы использовать простые циклы для записи времени.
Два способа сделать так, чтобы oop занимал больше времени, и я очень ржавею Кодирование PI C, поэтому рассмотрим этот psuedocode:
variable2 = 0
label:
decfsz variable2,1
goto label
Это, по сути, 256 циклов, да? и вы можете посчитать инструкции, включая дополнительные часы или что-то еще, для времени, когда оно равно нулю ...
variable2 = 0
label:
nop
nop
decfsz variable2,1
goto label
добавление nops может сжечь больше времени (да, я все еще не могу понять, настало ли время для записи) или просто хотите больше циклов).
Или если вы хотите сделать больше циклов, и у вас есть только 8 битов для подсчета, то вложите циклы
variable1 = 20
variable2 = 0
outer:
inner:
; other stuff goes here?
decfsz variable2,1
goto inner
decfsz variable1,1
goto outer
внутренний l oop будет подсчитывать 256 раз, внешнее l oop будет считать 20, поэтому вы получите 20 * 256 полных циклов
Я использовал этот тип подхода, чтобы сделать очень точные сигналы, которые не могут быть сделаны с помощью таймера с этим процессор гораздо более эффективный набор команд и более быстрый процессор должны были бы использоваться, чтобы сделать то же самое с таймером, если это возможно. Но вместо этого вы бы купили продукт, который имеет периферийное устройство таймера, которое выполняет то, что вы пытаетесь сделать, или его часть, например, инфракрасный пульт дистанционного управления, вы можете получить некоторые продукты ST, которые принимают два выхода таймера и имеют логический элемент и логический элемент в чипе, Таким образом, вы можете иметь аппаратно сгенерированный несущий сигнал и аппаратно сгенерированный вентиль, но генерировать длительность шлюза с помощью программного обеспечения. с пи c у меня просто было несколько маленьких циклов, чтобы сделать то же самое, и все это было приурочено к подсчету инструкций.
Я бы не использовал этот подход на cortex-m, может быть, msp430, может быть, avr, но не что-то конвейерное и не то, что было куплено IP у кого-то другого (arm не делает чипы, st и nxp и другие делают чипы и просто покупают IP с руки, так как большая часть остальных чипов не является IP руки и каждый вендор может настроить ip, когда его получают, чтобы одно и то же ядро (например, cortex-m0 + rev xy) в разных чипах не обязательно вели себя одинаково).