Autor Tema: Controlar la profundidad de la Pila en CCS  (Leído 573 veces)

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

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 172
Controlar la profundidad de la Pila en CCS
« en: 29 de Noviembre de 2019, 06:59:24 »
Saludos al grupo!

Sospecho que tengo un desbordamiento de la pila pero no consigo detectarlo. ¿Sabe alguien cómo monitorizar la profundidad de las llamadas a la pila en CCS?
Otra opción es que estoy trabajando en modo debug con el MPLAB. ¿Podría ver el valor ahí?

Gracias de antemano!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7813
Re:Controlar la profundidad de la Pila en CCS
« Respuesta #1 en: 29 de Noviembre de 2019, 09:42:21 »
Voy a hablar del stack de llamadas.

Usualmente en los PICs16, no tenes acceso al stack, ni siquiera como registros, por lo tanto lo que te queda a vos, o en realidad al compilador es no hacer demasiado uso y reservar uno para la interrupcion si es que se utiliza.

Por lo tanto con el debugger tampoco lo vas a ver... Podrias verlo si es que esta en ASM y comenzar a contar los CALL cuando entra y los RETURN cuando sale, de esa forma nunca superar el limite. Pero a veces el mismo compilador te indica que hay demasiados saltos.

En los PICs 18 podes observar el tope del stack mediante unos registros. Pero no todo el stack.
Y bueno luego tenes micros que stack esta sobre la memoria RAM, ni hablar lo bueno que es esto...


Desconectado remi04

  • PIC18
  • ****
  • Mensajes: 431
Re:Controlar la profundidad de la Pila en CCS
« Respuesta #2 en: 01 de Diciembre de 2019, 19:31:43 »
Saludos al grupo!

Sospecho que tengo un desbordamiento de la pila pero no consigo detectarlo. ¿Sabe alguien cómo monitorizar la profundidad de las llamadas a la pila en CCS?
Otra opción es que estoy trabajando en modo debug con el MPLAB. ¿Podría ver el valor ahí?

Gracias de antemano!


  ¿Te puedes creer la de veces que me he preguntado eso? ¿Por que la stack no se implementa en la ram directamente??? 

Sería casi ilimitada.

Desconectado Eduardo2

  • PIC18
  • ****
  • Mensajes: 361
Re:Controlar la profundidad de la Pila en CCS
« Respuesta #3 en: 01 de Diciembre de 2019, 21:24:37 »
Saludos al grupo!

Sospecho que tengo un desbordamiento de la pila pero no consigo detectarlo. ¿Sabe alguien cómo monitorizar la profundidad de las llamadas a la pila en CCS?
Otra opción es que estoy trabajando en modo debug con el MPLAB. ¿Podría ver el valor ahí?

Gracias de antemano!

Como ya te dijeron, el Stack Pointer no es accesible.  Lo mas cercano que tenés en CCS para controlar es fijarte en el .lst el máximo número de niveles utilizados.

Como ejemplo copypego la primer parte de un listado cualquiera:

Código: [Seleccionar]
CCS PCM C Compiler, Version 5.008, 5967               01-dic-19 21:11

               Filename:   V:\CCS\test\7segAC.lst

               ROM used:   326 words (8%)
                           Largest free fragment is 2019
               RAM used:   24 (9%) at main() level
                           42 (16%) worst case
               Stack used: 4 locations (2 in main + 2 for interrupts)
               Stack size: 8

Fijate en el peor caso (interrupciones simultáneas dentro de subrutinas) solamente usa 4 niveles. 

Si fueran mas de 8 niveles ya tendría que entrar a desparramar CLIs  y tener cuidado con las funciones usadas porque en general implican un CALL.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7813
Re:Controlar la profundidad de la Pila en CCS
« Respuesta #4 en: 02 de Diciembre de 2019, 13:55:39 »
¿Te puedes creer la de veces que me he preguntado eso? ¿Por que la stack no se implementa en la ram directamente??? 

Sería casi ilimitada.

Son distintas arquitecturas, el no tener un stack en la RAM permite que sea mas sencillo para el usuario la programación. Y también imagino que sera mas sencilla la complejidad del hardware del micro.

Aquellos que implementan el stack en la RAM poseen un stack pointer, el cual hay que iniciarlo, manejarlo si se quieren usar para datos.
Para esos momentos donde se programaba en ASM considero que era como el Arduino de ahora: mas sencillo de manejar, tambien otras particularidades: mas facil de contar tiempos de instrucción y menos instrucciones. Hoy con lenguajes de "alto nivel" (ahora no se como considerarlo a C) ya no te importan esas cosas. Y es cuestion del compilador.

De todas formas yo también considero mucho mas util que debe implementarse en la RAM, los PIC18 deberian realizarlo, pero se siguio con el mismo sistema. Recien los PICs de 16 bits toman esa otra arquitectura.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5416
Re:Controlar la profundidad de la Pila en CCS
« Respuesta #5 en: 02 de Diciembre de 2019, 14:54:09 »
Los Atmega si que tienen stack en ram. Eso permite que sea más sencillo hacer compiladores C para ellos.
Por esa razón y alguna otra, los Atmega tienen un compilador GCC libre y los PIC no lo tienen.
Como núcleo, el Atmega es bastante superior a los PIC tanto en ensamblador como en C.
Un saludo.

PD. Para mí el c es lenguaje de alto nivel, aunque está bastante cerca de la máquina.


 

anything