Autor Tema: Errores MPLAB con 16F877  (Leído 4107 veces)

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

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Errores MPLAB con 16F877
« en: 02 de Marzo de 2007, 12:16:19 »
Buenas a todos, hace un tiempo que llevo desconectado y vuelvo a la carga con estos cacharros...
Estoy haciendo un programita para el PIC 16F877 y cuando compilo veo que en la ventana de resultados, en el apartado MPLAB SIM, me aparecen muchas líneas que indican "CORE-E0001: Stack over flow error occurred from instruction at 0x000150", la última dirección la varía.
¿Que es esto? ¿De ser un desbordamiento de pila, como puedo localizarlo?
En el MPLAB, ¿donde me indica lo que llevo consumido de memoria de página para saber si tengo que saltar parte del programa a otra página?
Me alegra estar por aquí de nuevo.

Un saludo a todos.

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Errores MPLAB con 16F877
« Respuesta #1 en: 02 de Marzo de 2007, 12:54:18 »
¿Tú programa tiene saltos a subrutinas o a tablas? Me parece que te indica, que dicha subrutina o tabla está en otra página. Por lo tanto, tendrás que adecuar el PC a la dirección adecuada para el salto.


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

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Errores MPLAB con 16F877
« Respuesta #2 en: 02 de Marzo de 2007, 13:47:04 »
guanacho2002 es un desbordamiento de pila producido por un call que va a una sección del código de la cual seguramente vuelves con un goto, también puede ser que hagas más que 8 calls anidados, OJO CON ESTO ULTIMO.

Si tu problema es de más calls que returns, la manera de detectarlo, no es tan simple, depende de cuán grande sea tu código y de cómo esten anidadas las llamadas.

Incluso podría ser un problema de mal manejo de interrupciones, que el pic vuelva  una página errada y que por alguna razón haga un overflow del ProgramCounter y que éste se haga 0 y allí tengas algún call nuevamente.

Si te ocurre en el simulador es porque es algo simple de detectar, yo que tu habilito la opción TRACE y puedes ver paso a paso cuantos calls hiciste y cuantos returns le correspondieron a esos calls.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Errores MPLAB con 16F877
« Respuesta #3 en: 02 de Marzo de 2007, 13:59:16 »
La verdad es que lo del salto de página no lo llevo muy bien pero según leí en unos documentos, utilizando "lcall" en vez de "call" el te localiza automáticamente la página donde intentas hacer la llamada. ¿Puede ser?
Gracias por vuestra rápida respuesta.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Errores MPLAB con 16F877
« Respuesta #4 en: 02 de Marzo de 2007, 15:00:24 »
lcall es un macro que he visto en algunos ejemplos del MASM.  Ese macro simplemente hace un seteo del PCLATH y luego un call.  No es una instrucción en sí.

pero este no es tu principal problema!, tu problema es que de alguna forma hay mas calls que returns...
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Errores MPLAB con 16F877
« Respuesta #5 en: 02 de Marzo de 2007, 17:18:38 »
lo mejor es que escribas el codigo.

saludos

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Errores MPLAB con 16F877
« Respuesta #6 en: 05 de Marzo de 2007, 10:07:17 »
Perdonadme por la tardanza pero es que he estado fuera unos días. Voy  a revisar el número de call y los return.
Ya os contaré.
Gracias.

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Errores MPLAB con 16F877
« Respuesta #7 en: 05 de Marzo de 2007, 12:11:59 »
Ya estoy de vuelta por aquí,
os comento:
después de estar revisando lo que me habeis comentado no he observado nada raro pero... son ejemplos que están hechos para trabajar con el 16F84A y que estoy intentando adaptar al 16F877, lo que ocurre es que cuando cambio el tipo de microcontrolador, tanto en el MPLAB como en las líneas de código, me aparecen los siguientes errores de simulación: CORE-E0001: Stack over flow error occurred from instruction at 0x000150.
He probado con un simple ejemplo que lo único que hace es escribir una línea y lo hace pero me dá esos errores.
Os dejo el código para que le echeis un vistazo.

Desconectado guancho2002

  • PIC16
  • ***
  • Mensajes: 113
Re: Errores MPLAB con 16F877
« Respuesta #8 en: 06 de Marzo de 2007, 13:11:40 »
Ya lo tengo!!!!! :-/ :-/
La solución la he encontrado en estos foros...
El problema lo he solucionado subiendo las líneas de mensajes después del ORG 0 y GOTO inicio. La verdad es que leyendo por ahí me he enterado de cosas que aunque parezca mentira desconocía, como por ejemplo, que cada banco lleva dos páginas y que los mensajes no deben solapar páginas. Que los mensajes no deben pasar de la dirección FF o de ser así hay que controlar el PCLATH... en fin cosas que conforme estudias observas que tienen su sentido.
Pero bueno, me alegro de encontrar soluciones por estos lugares en los que además de que te solucionen los problemas también te motivan a seguir aprendiendo.
  :-/ :-/
Gracias por vuestro tiempo... y espero estar por aquí pronto... :D :D