Autor Tema: Microcursillo en C  (Leído 178995 veces)

0 Usuarios y 6 Visitantes están viendo este tema.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Microcursillo en C
« Respuesta #435 en: 03 de Enero de 2007, 18:45:47 »
Saludos amigos de este microcursillo de c
bueno la verdad que yo soy nuevo en esto de la programacion en c, pero bueno estoy tratando de aprender de sus ejemplos y empesando a programar mis propias aplicasiones

tengo una duda... estuve leyendo las primeras notas d este curso.. hay unas notas de Nuestro amigo modulay.. que por cierto son muy explicativas.. pero algo que no entinedo ... por ejemplo en sus notas sobre las variables globales y localizadas .. mas especificamente en su codigo en la ultima linea
for(; :wink:    {} 
que significa esa linea... es acaso algun tipo bucle infinito como
while(true) {
puedo remplasarlo por este... esque saben.. cuando trato de compilar el codigo original, me bota un error en esa linea de codigo....

ojala puedan resolver mi duda... la verdad ya estoy un poco cabezon .. con esto.... gracias de antemano por su antencion..



Por un problema de no estar escrito dentro de un segmento CODE aparecen los smiles (carita guiño es un punto y coma y cierre de parentesis).
El codigo es este:
Código: [Seleccionar]
for(; ; ) {} 
Y realmente es un bucle infinito similar al While(true){}

Suerte!!! :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Microcursillo en C
« Respuesta #436 en: 03 de Enero de 2007, 19:18:12 »
 Hola johnnybravo, las variables globales pueden ser vistas y utilizadas en todo el proprama, tanto para la función principal como las funciones auxiliares.

Por ejm si declaras la variable valor dentro del void main(), será vista y utilizada solo por la función principal, pero si la declaras fuera es vista por todas las funciones principales, auxiliares y subprogramas.
 
void main()
{ int32 data;   

Y la otra forma:

int32 data;    // variable global
void main()
{ //programa principal
}


Modulay utuliza el for de esa forma y funciona pero pienso que de esa forma no se debe usar, ya que para eso no ha sido hecho el for sino para bucles finitos, para un bucle infinito sería while (1)  o  while (true).

Alguién podría responderme mi pregunta, nos vemos.
control de movimiento

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
Re: Microcursillo en C
« Respuesta #437 en: 03 de Enero de 2007, 20:09:58 »
 :shock: Si que es verdad :-/ gracias por responder amigos .. muchisimas gracias  :D
me han quitado un peso de encima.. ya me estaba haciendo bolas con esa linea de comando..jajaja.. gracias..tansimple como eso...
pero a la vez muchas gacias por confirmar lo que yo estaba pensando tambien...
Atte.
Johnny Bravo

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Microcursillo en C
« Respuesta #438 en: 03 de Enero de 2007, 20:42:02 »
Quizá no sea elegante pero no veo por qué no se debe usar.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Microcursillo en C
« Respuesta #439 en: 04 de Enero de 2007, 00:37:15 »
Modulay utuliza el for de esa forma y funciona pero pienso que de esa forma no se debe usar, ya que para eso no ha sido hecho el for sino para bucles finitos, para un bucle infinito sería while (1)  o  while (true).

Alguién podría responderme mi pregunta, nos vemos.

La elegancia es muy relativa. Particularmente en los micros habría que buscar con mucho mas ahinco la eficacia, vista tanto en tamaño de código cuando sea crítico, como en ciclos de instrucción.
Para ello habría que compilar ambas opciones y examinar cuál "chupa" más. Lo he hecho y ambas se compilan exactamente igual: un BRA a si mismas, o lo que es igual, un salto incondicional permanente.
A partir de ahí, que cada cual utilice la fórmula que más "elegante" le parezca.

Con respecto a la duda que preguntabas, si no has colocado la sentencia #FAST_IO, el compilador se encargará de colocar los TRIS adecuados antes de cada sentencia de lectura/escritura. No obstante, para leer un pin en CCS hay un comando específico. Yo cambiaría tu línea por esta:
    if (input(PIN_B0)==1)

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Microcursillo en C
« Respuesta #440 en: 04 de Enero de 2007, 19:00:59 »
 hola Nocturno, voy a hacer lo que me dices poner if (input(PIN_B0)==1) para chequear el estado del pin B0, este pin lo he configurado como salida y al inicio del programa he puesto #FAST_IO B. Te comento que en todos los ejemplos que he visto en el Microcursillo cuando chequean el estado de un PIN este siempre esta configurado como entrada, pero en mi caso el B0 está como salida, da igual...?

 Para tener más resumido el microcursillo me he hecho una recopilación de las explicaciones y codigos más importantes, hasta la pág. 28 asi puedo tener a la mano y encontrar más rápido lo que han explicado, lo pongo aquí, nos vemos.
control de movimiento

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Microcursillo en C
« Respuesta #441 en: 05 de Enero de 2007, 15:10:39 »
Hombre, si un pin está declarado como salida, de poco vale leer su estado, ya que por soft, el programador le indica el estado que debe estar, en cambio, si el pin está configurado como entrada, si es interesante, en un determinado tiempo, ver que estado tiene dicho pin.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Microcursillo en C
« Respuesta #442 en: 05 de Enero de 2007, 15:27:20 »
Hombre, si un pin está declarado como salida, de poco vale leer su estado, ya que por soft, el programador le indica el estado que debe estar, en cambio, si el pin está configurado como entrada, si es interesante, en un determinado tiempo, ver que estado tiene dicho pin.


Suerte!!! ;)

Una de las cosas que permite la instruccion Input (pin) es de multiplexar una entrada utilizandola como salida y en un momento especifico tembien usarla como entrada.
Cuando tienes pocas patillas disponibles es muy comun hacerlo... :? :?
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Microcursillo en C
« Respuesta #443 en: 06 de Enero de 2007, 02:48:42 »
Para que te funcione como entrada / salida tienes dos opciones:
- modo standard_io para dejar que el compilador establezca si un pin estará como entrada o salida según convenga
- poner modo fast_io y asegurarse del estado de cada pin con set_trix_x() antes de utilizarlo

Para tu objetivo, y hasta que domines bien el tema, te recomiendo el standard_io.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Microcursillo en C
« Respuesta #444 en: 06 de Enero de 2007, 05:26:58 »
Amí me gusta ser rudimentario  :mrgreen: si un pin está configurado como salida, no creo que sea de interés la lectura de dicho pin (ya que por soft la sabemos), y si un pin está declarado como entrada, pues sí, ahí es su misión el leer que estado tiene.

A parte, me reitero en lo de rudimentario jeje, si tenemos un pin definido como entrada y en un momento determinado queremos usarlo de salida, pues a la fórmula de siempre, ponemos un set_tris_x y lo declaramos como salida y al finalizar la operacion pues el correspondiente set_tris_x y definido como entrada.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Microcursillo en C
« Respuesta #445 en: 08 de Enero de 2007, 18:22:54 »
 hola, con respecto a mi duda ya la pude solucionar me estaba haciendo bolas por las puras, debo haber tipeado mal, si se puede chequear si un pin està en alto o en bajo cuando es declarado como salida, esto es ùtil por ejm para hacer bascular un led.

 Hace un tiempo estaba leyendo un subforo donde estaban hablando de la nueva versiòn del CCS, pero ahora no la puedo encontrar, alguièn sabe donde se ha metido.

 saludos desde lima.
control de movimiento

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Microcursillo en C
« Respuesta #446 en: 10 de Enero de 2007, 12:51:37 »
Desde la página web del fabricante podrás encontrar la información más acutalizada.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Microcursillo en C
« Respuesta #447 en: 10 de Enero de 2007, 13:09:31 »
...
 Yo cambiaría tu línea por esta:
    if (input(PIN_B0)==1)

Nocturno ¿no se podría simplicar mas esa línea?

Código: [Seleccionar]
    if (input(PIN_B0))    // pregunta si RB0 está a uno

el caso contrario sería así

Código: [Seleccionar]
    if (!input(PIN_B0))    // pregunta si RB0 está a cero

Salu2
Pedro
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Microcursillo en C
« Respuesta #448 en: 10 de Enero de 2007, 16:55:59 »
Sí, se puede cambiar por la que tú dices. Creo que es cuestión de gustos.

Mira cómo compila CCS las cuatro opciones siguientes:

Código: [Seleccionar]
.................... if (input(PIN_B0)==1);
0048:  BSF    F93.0
004A:  BTFSS  F81.0
004C:  BRA    004E
.................... 
.................... if (input(PIN_B0));
004E:  BSF    F93.0
0050:  BTFSS  F81.0
0052:  BRA    0054
.................... 
.................... if (input(PIN_B0)==1);
0054:  BSF    F93.0
0056:  BTFSS  F81.0
0058:  BRA    005A
.................... 
.................... if (!input(PIN_B0));
005A:  BSF    F93.0
005C:  BTFSC  F81.0
005E:  BRA    0060

En definitiva, aunque lo pongamos como nos de la gana, siempre se compila en tres ciclos, así que no hay más simplificación posible.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Microcursillo en C
« Respuesta #449 en: 11 de Enero de 2007, 11:41:32 »
cierto, cierto. ya está comprobado por ensamblador.    :mrgreen:

Salu2
Pedro
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek