logo endorasoft
Developing the future

Fecha actual Mié Sep 08, 2010 2:01 am

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 7 mensajes ] 
Autor Mensaje
 Asunto: Pila desbordada.
NotaPublicado: Sab May 29, 2010 8:46 am 
Desconectado

Registrado: Vie Ago 01, 2008 11:13 am
Mensajes: 94
Ubicación: http://electronica-pic.blogspot.com/
uenas:

Tengo las 8 pilas usadas del PIC16F887 y me sale este mensaje.

CORE-E0001: Stack over flow error occurred from instruction at 0x000324

¿Cómo corrigo ese error?

Un abrazo.

PD: A ver si sacan al mercado los nuevos PIC que tienen 16 niveles de Stack.
http://www.microchip.com/stellent/idcpl ... s=enhanced

_________________
http://electronica-pic.blogspot.com/ Manuales de electrónica general y PIC.


Arriba
 Perfil  
 
 Asunto: Re: Pila desbordada.
NotaPublicado: Sab May 29, 2010 11:30 am 
Desconectado
Site Admin
Avatar de Usuario

Registrado: Lun Nov 01, 2004 11:39 am
Mensajes: 1206
Hola,

Una preguntita previa.... ¿Estas usando compilador de C o estas usando directamente ASM?

_________________
Saludos,
Xenu
Moderador Principal de los Foros de EndoraSoft.

Imagen Imagen

Web http://www.endorasoft.es
Web http://www.xblue.es


Arriba
 Perfil Email  
 
 Asunto: Re: Pila desbordada.
NotaPublicado: Sab May 29, 2010 4:48 pm 
Desconectado

Registrado: Vie Ago 01, 2008 11:13 am
Mensajes: 94
Ubicación: http://electronica-pic.blogspot.com/
Estimado amigo:

Uso ensamblador de toda la vida, ejjejeje. PRecisamente estaba mirando el 18F4550 con intención de programarlo en asm, porque tiene 31 niveles de pila para artarme. Antes que nada, prefiero aprender a corregir los errores del 16F887 antes que lanzarme a otro PIC a lo bestia.

Un cordial saludo.

_________________
http://electronica-pic.blogspot.com/ Manuales de electrónica general y PIC.


Arriba
 Perfil  
 
 Asunto: Re: Pila desbordada.
NotaPublicado: Sab May 29, 2010 7:46 pm 
Desconectado
Site Admin
Avatar de Usuario

Registrado: Lun Nov 01, 2004 11:39 am
Mensajes: 1206
Hola Mortal,

Pues si estas usando esamblador tu mismo te contestas a la pregunta. No hay mas que "arrascar" solo tiene 8 niveles de stack (por hardware) asi que ... estas usando mas que los que debes.

Tienes muchas llamadas recursivas (una dentro de otra) o bien estas "empilando" muchos datos.

Te comentaba lo del compilador de C, por que en algunas ocasiones la compilacion puede meter cosas extra que no tienes en cuenta, y que en algunos casos se pueden configurar. Pero si el codigo esta en ASM no hay nada que no tengas a la vista.

Tendras que ver, paso a paso donde se produce el desbordamiento y por que depurando.

Sin mas... No hay nada magico para solucionar ese problema.

_________________
Saludos,
Xenu
Moderador Principal de los Foros de EndoraSoft.

Imagen Imagen

Web http://www.endorasoft.es
Web http://www.xblue.es


Arriba
 Perfil Email  
 
 Asunto: Re: Pila desbordada.
NotaPublicado: Sab May 29, 2010 9:12 pm 
Desconectado

Registrado: Vie Ago 01, 2008 11:13 am
Mensajes: 94
Ubicación: http://electronica-pic.blogspot.com/
Hello:

Si me lo dice en todo momento, arreglo uno y me detecta otro. Estaba intentando poner sólo goto en vez del call. He comprobado que no obtienes buenos resultados.

Supuestamente para llegar a los niveles altos hay que poner un call dentro de otro call, también se les conoce como call anidados.

Me vuelve a decir esto:CORE-E0001: Stack over flow error occurred from instruction at 0x000324

Me llevó a una instrucción:

Código:
LCD_EscribeLCD
   andlw   b'11110000'            ; Se queda con el nibble alto del dato que es el
   movwf   LCD_Dato            ; que hay que enviar y lo guarda.
   movf   LCD_BusDatos,W         ; Lee la información actual de la parte baja
   andlw   b'00001111'            ; del Puerto B, que no se debe alterar.
   iorwf   LCD_Dato,F            ; Enviará la parte alta del dato de entrada
                           ; y en la parte baja lo que había antes.
   bcf      STATUS,RP1
   bsf      STATUS,RP0            ; Acceso al Banco 1.
   movf   TRISC,W               ; Guarda la configuración que tenía antes TRISB.
   movwf   LCD_GuardaTRISC
   movlw   b'00001111'            ; Las 4 líneas inferiores del Puerto B se dejan
   andwf   PORTC,F               ; como estaban y las 4 superiores como salida.
   bcf      STATUS,RP1
   bcf      STATUS,RP0            ; Acceso al Banco 0.
;
   movf   LCD_Dato,W            ; Recupera el dato a enviar.
   movwf   LCD_BusDatos         ; Envía el dato al módulo LCD.
   bsf      LCD_PinEnable         ; Permite funcionamiento del LCD mediante un pequeño
   bcf      LCD_PinEnable         ; pulso y termina impidiendo el funcionamiento del LCD.
   bcf      STATUS,RP1
   bsf      STATUS,RP0            ; Acceso al Banco 1. Restaura el antiguo valor en
   movf   LCD_GuardaTRISC,W      ; la configuración del Puerto B.
   movwf   TRISC
   bcf      STATUS,RP1
   bcf      STATUS,RP0            ; Acceso al Banco 0.
   return


Parece que los call ya no funcionan.

Intenté empezar de nuevo con el PIC18F4550 ya que tiene 31 niveles de pila o stack, pero requiere mucho tiempo para poner nombres de los registros compatibles. (Si puedo lo intento solucionar con el 16F887, en caso que no logre nada, pues al 18F4550).

Sigo investigando.

Saludo.


Adjuntos:
Comentario: .asm con ejemplo proteus 7.6 SP0.
PicRS232 16F887.zip [91.71 KiB]
13 veces

_________________
http://electronica-pic.blogspot.com/ Manuales de electrónica general y PIC.
Arriba
 Perfil  
 
 Asunto: Re: Pila desbordada.
NotaPublicado: Dom May 30, 2010 8:13 am 
Desconectado
Site Admin
Avatar de Usuario

Registrado: Lun Nov 01, 2004 11:39 am
Mensajes: 1206
Hola,

En algun momento estas usando mas pila cuando crees que no...

Citar:
Supuestamente para llegar a los niveles altos hay que poner un call dentro de otro call, también se les conoce como call anidados.

A eso me referia en el anterior post: Tienes muchas llamadas recursivas (una dentro de otra)...

Tambien te comentaba que puede ser que algun dato lo puedas empilar. En ASM del PIC no creo que tengas muchas posibilidades, pero en C o en otros ASM (otro conjunto de memotecnicos de otros micros) es bastante frecuente el empilar datos temporales (locales).

Citar:
Intenté empezar de nuevo con el PIC18F4550 ya que tiene 31 niveles de pila o stack, pero requiere mucho tiempo para poner nombres de los registros compatibles. (Si puedo lo intento solucionar con el 16F887, en caso que no logre nada, pues al 18F4550).

Por eso la gente usa C. Eso permite hacer codigo portable de un micro a otro.

Yo, con los tiempos que corren, me permitira aconsejarte dar el salto y pasarte a micros mas potentes y estables. Todo ello ya con un conjunto de herramientas de programacion en C (el compilador IAR por ejemplo).
Un buen micro para poder compilar y sobre todo depurar sin problemas es el Atmel AT128. Tienes memoria, y todo lo que la familia PIC te pueda aportar...

Por lo demas el tema, me temo, no tiene mas misterio que ir poco a poco detectando donde te has pasado y cambiando el codigo en consecuencia.

_________________
Saludos,
Xenu
Moderador Principal de los Foros de EndoraSoft.

Imagen Imagen

Web http://www.endorasoft.es
Web http://www.xblue.es


Arriba
 Perfil Email  
 
 Asunto: Re: Pila desbordada.
NotaPublicado: Dom May 30, 2010 8:24 am 
Desconectado

Registrado: Vie Ago 01, 2008 11:13 am
Mensajes: 94
Ubicación: http://electronica-pic.blogspot.com/
Hola:

Aún con problemas. Tenía esperanzas en solucionar el problema sobre el desbordamiento del PIC16F887. Como tiene 8 niveles decidí optar por el PIC18F4550 con 32 niveles de pila o stack.

Tanta adaptación de un PIC a otro que me da el mismo problema de desbordamiento, sobre pasa los 32 niveles.

Al compilar:
Citar:
----------------------------------------------------------------------
Debug build of project `I:\PIC16F84A\PicRS232 16F4550\18F4550.mcp' started.
Language tool versions: MPASMWIN.exe v5.35, mplink.exe v4.35
Preprocessor symbol `__DEBUG' is defined.
Sun May 30 07:54:28 2010
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "I:\PIC16F84A\PicRS232 16F4550\PicRS232v2.o".
Clean: Deleted file "I:\PIC16F84A\PicRS232 16F4550\PicRS232v2.err".
Clean: Deleted file "I:\PIC16F84A\PicRS232 16F4550\PicRS232v2.hex".
Clean: Deleted file "I:\PIC16F84A\PicRS232 16F4550\PicRS232v2.lst".
Clean: Deleted file "I:\PIC16F84A\PicRS232 16F4550\PicRS232v2.cof".
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPASMWIN.exe" /q /p18F4550 "PicRS232v2.asm" /l"PicRS232v2.lst" /e"PicRS232v2.err" /d__DEBUG=1
Warning[202] I:\PIC16F84A\PICRS232 16F4550\PICRS232V2.ASM 533 : Argument out of range. Least significant bits used.
Warning[202] I:\PIC16F84A\PICRS232 16F4550\PICRS232V2.ASM 676 : Argument out of range. Least significant bits used.
Warning[202] I:\PIC16F84A\PICRS232 16F4550\PICRS232V2.ASM 705 : Argument out of range. Least significant bits used.
Warning[202] I:\PIC16F84A\PICRS232 16F4550\PICRS232V2.ASM 740 : Argument out of range. Least significant bits used.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\mplink.exe" /p18F4550 "PicRS232v2.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"PicRS232v2.cof" /M"PicRS232v2.map" /W /x
MPLINK 4.35, Linker
Copyright (c) 1998-2010 Microchip Technology Inc.
Errors : 0

Loaded I:\PIC16F84A\PicRS232 16F4550\PicRS232v2.cof.
----------------------------------------------------------------------
Debug build of project `I:\PIC16F84A\PicRS232 16F4550\18F4550.mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.35, mplink.exe v4.35
Preprocessor symbol `__DEBUG' is defined.
Sun May 30 07:54:58 2010
----------------------------------------------------------------------
BUILD SUCCEEDED


Imagen

Parece provocado por una subrutina. Más me creo que sobrepasa el límite de la tabla.

En cuanto a AVR de Atmel, lo he pensado y el ensamblador es más complejo, pesado y molesto. En cuanto a C, el siguiente año del ciclo formativo que estoy haciendo de programación, empezaremos con C para PC normal. Cuando aprenda C a fondo, me meteré el C de PIC y por supuesto de AVR que tanta fama tiene de ser el mejor que los PIC de Microchip. No dudes que los probaré.

Un cordial saludo.


Adjuntos:
Comentario: EJemplo .asm con el PIC18F4550 y ejemplo Proteus 7.6 SP0.
18F4550.zip [89.1 KiB]
9 veces

_________________
http://electronica-pic.blogspot.com/ Manuales de electrónica general y PIC.
Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 7 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron