рассчитать значение для ввода задержки звука в программе сборки - PullRequest
0 голосов
/ 03 мая 2019

Я смотрел программу, в которой есть секвенсор звуковых нот, который воспроизводит разные звуковые ноты с разной длительностью, в середине некоторых звуковых нот будет задержка примерно на 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 в каждом цикле.Но я действительно не могу понять, как происходит этот расчет.

Спасибо.

1 Ответ

0 голосов
/ 03 мая 2019

Просто отвечая на часть ..in fact really result in a 0.25s delay but I don't understand how does it work (на самом деле это единственный вопрос, который я могу распознать как вопрос):

Выполнение инструкции ЦП занимает некоторое фиксированное время (*) на данном тактовом процессорена заданной частоте.Зная эти данные, вы можете рассчитать количество итераций цикла, необходимое для получения необходимой вам задержки.Это простая арифметическая задача.

(*) Это не подходит для большинства современных процессоров, и этот метод реализации задержки настоятельно не рекомендуется по ряду причин.

...