TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: migsantiago en 02 de Febrero de 2007, 15:04:06

Título: Goto CCS
Publicado por: migsantiago en 02 de Febrero de 2007, 15:04:06
Hola

Solicito la amable ayuda de algún experto en CCS  :mrgreen:. Solo me gustaría recibir una mini explicación de cómo se usa el comando goto en CCS.

Nunca lo he usado solo en VBasic, y pues no sé que consideraciones haya que tener en CCS.

Gracias

PD Solo que sea una mini explicación jeje  :D
Título: Re: Goto CCS
Publicado por: maunix en 02 de Febrero de 2007, 15:09:37
Tal vez este hilo te brinde algo de información sobre porqué algunos pensamos que el goto en C es una "mala palabra".

http://www.todopic.com.ar/foros/index.php?topic=14474.0

Saludos
Título: Re: Goto CCS
Publicado por: Nocturno en 02 de Febrero de 2007, 16:38:09
Mejor no lo aprendas, Migsantiago  :lol:

Siempre da un poco de repeluco verlo en un programa.
Título: Re: Goto CCS
Publicado por: maunix en 02 de Febrero de 2007, 17:31:15
Mejor no lo aprendas, Migsantiago  :lol:

Siempre da un poco de repeluco verlo en un programa.

Manolo, esta frase "da un poco de repeluco" debiera ir en el hilo frases populares de cada región con la aclaración correspondiente!!

 :) :) :mrgreen: :mrgreen:
Título: Re: Goto CCS
Publicado por: IIIC en 02 de Febrero de 2007, 17:47:39
Apoyo la propuesta de Nocturno.

La instruccion Goto es un recuerdo de la programacion de antaño y generaba el muy conocido codigo "espagetti".

La recomendacion es que utilices la programacion estructurada (llamada a funciones) y la tan citada frese "divide y venceras".

Solo es recomendable si tu programa es muy pequeño y le piedes seguir la pista a los goto's.

Saludos.
Título: Re: Goto CCS
Publicado por: PalitroqueZ en 02 de Febrero de 2007, 19:13:38
Mi opinión es que la conozcas Migsantiago para que veas si en algún código es realmente necesario usarla.

Salu2
Pedro
Título: Re: Goto CCS
Publicado por: migsantiago en 03 de Febrero de 2007, 00:03:11
ummm...

Como que a nadie le gusta el goto...  :shock:

Pensé que era una instrucción útil por eso la quise estudiar.

Pali, ya que eres el único a favor del goto... a favor de que la estudie... ¿me podrías explicar qué hace? ¿nadamás brinca el apuntador de programa a otro lado? ¿no es mejor que un salto a subrutina ya que no llena el apuntador de pila? ¿basic es un "lenguaje" malo porque usa goto?  :)

Bueno... también los otros pueden contestar  :D
Título: Re: Goto CCS
Publicado por: IIIC en 03 de Febrero de 2007, 01:56:35
No es que no me guste,  al inicio de mi aprendizaje me facilitaba o solucionaba muchos problemas y de hecho me acostumbre tanto a ella, que al iniciar el estudio de programacion estructurada me costo suplirla.

Pronto te daras cuenta que existen formas aun mas organizadas y estructuras que erradican su uso.

De hecho te invito a que la conozcas porque hay algo muy cierto  "no puedes renegar su uso si no la conoces",

Los demas compañeros a lo mejor quieren ahorrarte el ir por un camino infructuoso, muchos programadores la dejaron fuera hace aproximadamente 28 años.

Suerte.

Título: Re: Goto CCS
Publicado por: IIIC en 03 de Febrero de 2007, 02:12:00
A qui te pongo un estracto de wiki


Controversia generada

A diferencia de la llamada a una función, no se requiere ningún tipo de preparación o estructura de código para utilizar un GOTO. Como resultado, es más sencillo obtener código inconsistente, incompleto o complicado de mantener. Justamente por ello en los años 60 y 70, cuando surgió la programación estructurada, la comunidad informática se expresó a favor de otras sentencias de control (if ó bucles for y do/while) en lugar del GOTO.

Tal creencia está tan arraigada que el GOTO es muy criticado por los dedicados a la enseñanza de la programación, que lo suelen desaconsejar. Por el otro lado, algunos que si bien admiten el uso de un GOTO como una práctica desaconsejable, reconocen que éste es la mejor opción para algunas pocas tareas puntuales en algunos lenguajes de programación (manejo de excepciones por ejemplo). Además, por lo general se programan macros o equivalentes para evitar la utilización del GOTO.

Una crítica famosa a la sentencia en cuestión es una carta redactada por Edsger Dijkstra llamada "Go To Statement Considered Harmful" (Sentencia Go To Considerada Dañina). En ella Dijkstra argumenta que el uso irrestricto del GOTO debería ser prohibido en lenguajes de alto nivel ya que dificultan el análisis y la verificación de la corrección de los programas (especialmente aquellos que contienen ciclos). Por el otro lado, Donald Knuth en su libro "Structured Programming with goto Statements" (Programación estructurada con sentencias Goto), toma en cuenta ciertas situaciones en las que el GOTO sería la sentencia a utilizar. Por lo general, éstas son situaciones en las que una estructura de programación en particular no se encuentra disponible y el GOTO puede simularla eficientemente.

El abuso de esta, aparentemente ágil sentencia, da lugar a los que se suele denominar como código espagueti, por que ese es el aspecto del seguimiento del programa, un plato de "espagueti", esta es una descalificación de una aplicación informática, equivalente a "chapuza indescifrable".

Los compiladores e intérpretes de lenguajes de programación aún la tienen, como recurso de programación, pero las técnicas de programación desaconsejan o prohíben su uso.
Título: Re: Goto CCS
Publicado por: PalitroqueZ en 03 de Febrero de 2007, 13:00:28
ummm...

Como que a nadie le gusta el goto...  :shock:

Pensé que era una instrucción útil por eso la quise estudiar.

Pali, ya que eres el único a favor del goto... a favor de que la estudie... ¿me podrías explicar qué hace? ¿nadamás brinca el apuntador de programa a otro lado? ¿no es mejor que un salto a subrutina ya que no llena el apuntador de pila? ¿basic es un "lenguaje" malo porque usa goto?  :)

Bueno... también los otros pueden contestar  :D

si exacto migsantiago es el típico salto en ensamblador, también te comento que he visto personas que vienen del asm y que cuando quieren mudarse a un lenguaje de alto nivel: C, basic y al no adaptarse al nuevo lenguaje usan el acostumbrado goto a diestra y siniestra :D

yo alguna vez lo usé pero lo hice por flojera. me explico, ya tenía un código mas o menos enredao (¿ofuscado?) y tuve que hacerle una modificación y para no estar cambiando muchas lineas, opté por usar un goto que simplificó la cosa.

seguro que ya vendran algunos programadores experimentados por aquí a darme un azote  :D :D

te voy a decir como leí en un manual de C que tengo "cada quién si quiere que la use (respecto al goto), el caso es no abusar de ella"

si quieres usar el goto en C, podría ser:

Código: [Seleccionar]
main(){
...
a:
 bit_set(*6,1); // A crude way to set pin B1 high
 delay_ms(1000); //retardo de 1 segundo
 bit_clear(*6,1); // A crude way to clear pin B1 high
goto a;
...
}

nota: dentro de la función, no he probado que pasaría si saltara fuera

pero cualquier buen programador automaticamente te regañaría primero, y después de un discurso te cambiaría por esto:

Código: [Seleccionar]
main(){
...
 while(1){ // una forma de bucle infinito
  bit_set(*6,1); // A crude way to set pin B1 high
  delay_ms(1000); //retardo de 1 segundo
  bit_clear(*6,1); // A crude way to clear pin B1 high
 }
...
}

Salu2
Pedro
Título: Re: Goto CCS
Publicado por: migsantiago en 03 de Febrero de 2007, 15:31:17
jejejeje

Gracias Pali y IIIC por su información  :mrgreen: