Autor Tema: ayuda con niveles de stack  (Leído 3745 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado arlex

  • PIC10
  • *
  • Mensajes: 49
ayuda con niveles de stack
« en: 02 de Agosto de 2007, 11:03:23 »
hola amigos estoy trabajando con el pic 16f84a y tengo una duda con los niveles de satck; no se exactamente a que se refiere, por ejemplo el pic 16f84a tiene 8 niveles, esto me indica que en mi programa no puedo hacer esto: ejemplo1;
call retardo
call retardo
call retardo
call retardo
call retardo
call animacion
call limpiar
call retardo;;;;;;;;;;;; esto se puede hacer en un programa colocar 8 subrutinas seguidas? porque estaba simulando en mplab y lo hace bien.... ahora si coloco  una subrutina dentro de otra mas de 7 veces me aparece en los niveles de stack overflow...... a lo que me refiero es esto ejemplo:
call limpiar                                        limpiar    call tempo
                                                        tempo    call animacion
                                                    animacion   call mostrar
                                                        mostar    call toque
                                                         toque     call otros
bien amigos si yo lo anterior mas de 7 veces se desborda y como en el ejemplo 1 supuestamente funciona bien en el mplab; ahora amigos por favor ewspero que me puedan aclarar lo de la pila que es lo correcto puedo hacer lo del ejemplo1 porque lo del ejemplo 2 no creo que funcione.....

                                                           




Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: ayuda con niveles de stack
« Respuesta #1 en: 02 de Agosto de 2007, 11:49:12 »
Qeu tal Arlex,

Efectivamente el primer ejemplo que muestras no presentara ningun problema ya que ahi el nivel de stack simepre sera 1, esto porque llamas una subrutina, en ese momento cargas el primer nivel de stack, pero dentro de esa subrutina ya no llamas otras, por lo tanto solo el primer nivel de stack es usado. Una vez que terminas la subrutina, regresas, por elo tanto el nivel de stack nuevamente se limpia, entonces vuelves a llamar otra subrutina, pero el nivel de stack esta limpi, asi que el estack nuevamente vuelve a ser 1.

En el caso 2 no, ahi es donde se aplica los niveles de stack, el porque es simple. Porque llamas una subrutina dentro de otra subrutina, esto es:

Llamas a limpiar en ese momento el stack vale 1, entonces dentro de esa subrutina llamas a otra subrutina, por lo tanto el stack vale 2 y asi sucesivamente.

Espero haberte ayudado.

Saludos.

Elreypic.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: ayuda con niveles de stack
« Respuesta #2 en: 02 de Agosto de 2007, 11:50:42 »
el ejemplo1 es correcto y ahi estas usando solo 1 pila del stack.

en el ejemplo2 estas cayendo en la advertencia del stack overflow, obviamente el mplab lo compila normal pues no posee el pic un control de esto, pero si le activas el MPLAB SIM y le das RUN a tu aplicación te mandara ese mensaje de stack overflow.

hay que tener cuidado que los ejemplo1 y ejemplo2 son diferentes entre si, mientras en el primero llamas a subrutinas separadas siempre retornando, en el segundo ejemplo estas anidando rutina tras rutina hasta hacer más de 7 donde se produce el overflow.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: ayuda con niveles de stack
« Respuesta #3 en: 02 de Agosto de 2007, 13:24:04 »
Es simple.

Cada vez que haces un CALL, se ocupa la siguiente posición de STACK disponible. Cada vez que haces un RETURN o RETFIE, se libera una posición de STACK.

Tu primer ejemplo tiene un RETURN por cada CALL, por lo que una vez finalizados todos los CALL, deberias estar en el nivel0 del STACK.

Tu segundo ejemplo anida subrutinas, puros CALL y ni un RETURN. Eso produce que el STACK se vaya cargando hasta desbordarse.

Saludos.
         

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado arlex

  • PIC10
  • *
  • Mensajes: 49
Re: ayuda con niveles de stack
« Respuesta #4 en: 02 de Agosto de 2007, 18:09:33 »
gracias señores muy agradecido, hasta luego que esten bien; me agrada este foro se que se puede contar con ustedes


 

anything