Я смотрел программу, в которой есть секвенсор звуковых нот, который воспроизводит разные звуковые ноты с разной длительностью, в середине некоторых звуковых нот будет задержка примерно на 0,5 с или 0,25 с, тогда я не могу понять,способ вычислить значение для загрузки в регистр, чтобы достичь желаемой продолжительности.
Я искал вики и некоторые другие онлайн-ресурсы, например, с этого сайта: https://www.avr -tutorials.com/ Assembly / Calculation-Execution-Time-Sequential-Code , чтобы узнать, как рассчитать время выполнения для функции.
delay:
push {lr}
ldr r10, =12000 @ in fact this function will result in a delay of 0.25s
b loop
loop:
..... @ some instructions to play sound
subs r10, #1 @ in each loop the time counter is subtracted by 1
cmp r10, #0 @ when time counter reaches zero, branch to a end function
beq end
b loop @ loop the function until time counter hits zero
например, вышеупомянутая функция с регистром r10
в качестве счетчика времени и в другой функции loop
значение 0
(означающее, что звук 0 Гц вводится в register
для создания задержки между звуковыми нотами) добавляется к регистру r0
на mov r0, #0
и я хочу узнать, какое значение мне нужно загрузить в счетчик времени r10
, чтобы позволить мне воспроизводить звук с частотой 0 Гц, например 0.5s
или 0.25s
, и как мне это сделать.Вычислите это значение для загрузки. Я не знаю, как именно это сказать, но, возможно, я скажу это как «вычисление времени задержки в программе?»
Функция delay
, которую янайденное где-то еще действительно приведет к задержке 0.25s
, но я не понимаю, как это работает.Я предполагаю, что для счетчика времени r10
требуется 0,25 с, чтобы достичь 0, вычитая из него 1 в каждом цикле.Но я действительно не могу понять, как происходит этот расчет.
Спасибо.