Código de bloqueo frente a código de no bloqueo - VEX Coding Studio

Obtenga más con VEXcode
Le recomendamos que realice la transición a nuestro nuevo software. VEXcode tiene opciones basadas en bloques y en texto, que funcionan en Chromebooks, iPads, tabletas Android, Windows y Mac. Visite code.vex.com para obtener más detalles sobre cómo descargar VEXcode.
El estudio de codificación VEX ha sido descontinuado y ya no está disponible para descargar. ¿Ya descargado? El programa seguirá funcionando pero ya no será compatible.
Los usuarios que hacen la transición a VEXcode pueden migrar sus proyectos de C ++ / C ++ Pro a VEXcode Pro V5 siguiendo este artículo.

Paso 1: reconocer si el código es bloqueante o no bloqueante

  • Mire los dos comandos de Motor.spin superiores junto a las flechas verdes. Las flechas verdes indican comandos sin bloqueo.
  • Tenga en cuenta que no hay un estado de objetivo incluido en esos comandos de acción, solo para hacer girar el motor derecho hacia adelante y el motor izquierdo hacia atrás. Son comandos sin bloqueo que continuarán ejecutándose a medida que el programa continúe con los siguientes comandos.
  • Mire los comandos Motor.rotateFor y Motor.rotateTo junto a las flechas rojas. Las flechas rojas indican los comandos de bloqueo.
  • Observe que hay un estado objetivo incluido en esos comandos de acción: girar 270 grados o girar 270 grados. Están bloqueando comandos porque el programa hará esto hasta que termine antes de continuar con el siguiente comando.
  • Observe los comandos Motor.rotateFor y Motor.rotateTo junto a las flechas verdes.
  • Tenga en cuenta que hay un parámetro booleano waitForCompletion incluido en esos comandos y que se establece en falso. Eso significa que la configuración predeterminada de hacer que el comando espere hasta que se complete (como un comando de bloqueo) está desactivada (establecida en falso) y, por lo tanto, ahora no son bloqueantes. El programa los iniciará y continuará con el siguiente comando.

NOTA: Nuevamente, los comandos del motor izquierdo (rotateTo y rotateFor) junto a las flechas verdes inferiores están configurados para no -bloqueo estableciendo el parámetro waitForCompletion en falso. Pero, también puede usar un startRotateTo o startRotateFor en lugar de esos. Ambos comandos startRotate no bloquean y permiten que el programa continúe con el siguiente comando antes de completar.

NOTA: Hay muchos otros ejemplos de comandos de bloqueo frente a comandos de no bloqueo en VCS. Estos ejemplos fueron elegidos por su simplicidad.

NOTA: Algunos comandos son fáciles de reconocer como bloqueadores o no bloqueantes según su código. Por ejemplo, Motor.startRotateTo y Motor.startRotateFor son, obviamente, comandos que no bloquean por diseño porque la acción se inicia pero no necesariamente se completa antes de que el programa pase al siguiente comando.

Paso 2: use código sin bloqueo para iniciar comandos y continuar

  • Mire los dos comandos Motor.spin sin bloqueo junto a las flechas verdes superiores.
  • Observe que se inicia el comando LeftMotor.spin y luego el programa continúa inmediatamente con el comando RightMotor.spin. Esto es importante para que ambos motores giren al mismo tiempo.

NOTA: Si estuvieran bloqueando comandos, primero el motor izquierdo giraría hacia adelante hasta que terminara. Luego, el motor derecho giraría en reversa hasta que estuviera listo. Entonces el programa continuaría.

  • Observe los comandos Motor.rotateFor y Motor.rotateTo junto a las flechas verdes inferiores.
  • Observe que el parámetro booleano waitForCompletion incluido en esos comandos se establece en falso y, por lo tanto, los hace no bloqueantes.

Paso 3: Use código de bloqueo y no bloqueo juntos para tener procesos paralelos

  • Mire nuevamente los comandos Motor.rotateFor y Motor.rotateTo ahora junto a las flechas azules. Las flechas azules se utilizan para indicar comandos paralelos.
  • Observe que debido a que los parámetros waitForCompletion de los comandos del motor izquierdo se establecen en falso, el motor derecho comienza a girar inmediatamente después del motor izquierdo. Esto es importante para que el robot se mueva hacia adelante o hacia atrás en línea recta.

NOTA: La razón por la que los comandos del motor izquierdo se configuraron para no bloquear es porque sus comandos estaban antes que los del motor derecho comandos. Para que un par de comandos de motor funcionen al mismo tiempo, el primero debe ser sin bloqueo y el segundo debe ser bloqueante. 

Paso 4: use el código de bloqueo para ejecutar los comandos hasta que termine

  • Observe que para que el programa termine antes de continuar, los comandos del motor derecho se bloquean.

NOTA:Son solo los comandos de bloqueo del motor derecho los que hacen que el programa espere hasta que ese comando se complete antes de continuar.Es ese bloqueo lo que le permite al programador ver que el robot se detiene antes de continuar con los siguientes comandos.

Paso 5: comprender cómo funcionan los comandos de bloqueo y no bloqueo con otros comandos

NOTA: Los comandos Motor.spin inician el motor izquierdo y el motor derecho girando en direcciones opuestas.La tarea de reposo permite que los motores giren de esa manera durante 3 segundos antes de que los motores izquierdo y derecho sean detenidos por los comandos Motor.stop. Luego, el motor izquierdo y el motor derecho giran hacia adelante 270 grados y frenan antes de continuar porque el comando del motor derecho está bloqueando. Luego, el motor izquierdo y el motor derecho giran en reversa a 270 grados por completo y frenan antes de finalizar el programa porque el comando del motor derecho se bloquea.