5000
frame
6000
frame
7000
frame
8000
frame
repeat
sub frame
0 servo
500 delay
return
Usando la subrutina recortamos el script 31 bytes: 4 por la posición y 11 bytes por el bucle y la
definición de FRAME. Podemos ir más allá: al inspeccionar el código compilado nos muestra que
poner cada número en la pila requiere 3 bytes: un byte como comando y dos para el número de dos
bytes. Números del 0 al 255 pueden cargarse en la pila con sólo dos bytes. Supongamos que en
nuestra aplicación no necesitamos la resolución completa 0.25 μs del dispositivo ya que todos
nuestros valores son múltiplos de 100. Entonces podemos usar números más pequeños para guardar
en un byte:
# Move servo 0 to five different positions, in a loop.
begin
40 frame
50 frame
60 frame
70 frame
80 frame
repeat
# loads a frame specified in 25 us units
sub frame
100 times
0 servo
500 delay
return
Este programa tiene 29 bytes, con 3 bytes para la posición y 14 para la cabecera. Tenemos la misma
eficacia que usando el comando SERVO_8BIT, que necesita un byte de argumento de 0 a 254.
Podemos rebajar más poniendo todos los números juntos:
# Move servo 0 to five different positions, in a loop.
begin
80 70 60 50 40
frame frame frame frame frame
repeat
# loads a frame specified in 25 us units
sub frame
100 times
0 servo
500 delay
return
Si paso a través de esta versión del programa, también se dará cuenta que los cinco números se
colocan en la pila en un solo paso, esto es porque el compilador puede utilizar un comando único
para poner varios números en la pila. Utilizando un único comando para varios números ahorra
espacio, ahora estamos a sólo 26 bytes. Sólo 12 bytes se usan para los 5 frames, con una media de
de 2,4 bytes para cada. Esto es probablemente lo suficientemente compacto – duplicando esta
estructura podríamos ajustar hasta 420 posiciones diferentes en la memoria de 1024 bytes de Micro
Maestro, sin embargo, el código puede ser aún más pequeño.
Fijate en esta secuencia que utiliza 31 frames para hacer un movimiento suave de ida y vuelta:
# Moves servo in a sine wave between 1 y 2 ms.
begin
60 64 68 71 74 77 79 80 80 79 78 76 73 70 66 62
31