Autor Tema: Stack Pointer en PIC's, ¿Es realmente distinto?  (Leído 5117 veces)

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

Desconectado cucarachero

  • PIC10
  • *
  • Mensajes: 11
    • Espai Metodic
Stack Pointer en PIC's, ¿Es realmente distinto?
« en: 15 de Agosto de 2011, 15:44:32 »
Hola,

esta es mi pregunta,

¿Cómo funciona el Stack Pointer en los Pic?

Mi duda es por ignorancia a saber como funciona el puntero del Stack en un Pic, conozco los stack pointers de varias familias de micros y habitualmente trabajo en 87C51, 80C31, tambien programé algo en 6502 en mi epoca con el Oric, y nunca he tenido problemas de comprensión del funcionamiento de interrupciones, igual en las familias Intel, ya programando dentro de un PC, para mi el Stack Pointer era una lección sabida.

Y ¿por que mi pregunta?, pues por que un buen amigo me dijo que el Stack Pointer de los PIC no funciona igual, tiene pequeñas diferencias que hay que tener en cuenta en las insterrupciones.

Consecuencia de este comentario jamás tuve ganas de aventurarme en un micro que podria ser distinto y me aportara sorpresas, y la verdad me pregunto por que me compre el Pick Start plus en la epoca y por que tantos libros...

¿Es verdad que el Stack Poiner es distinto?

Espero me comprendan y agracezco de antemano su ayuda,

y felicidades por la buena marcha de esta web

Gracias y Saludos

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Stack Pointer en PIC's, ¿Es realmente distinto?
« Respuesta #1 en: 15 de Agosto de 2011, 16:41:07 »
Bueno el stack pointer es eso mismo un puntero a una pila, pila que guarda registros del micro y que en el caso de las ISR es utilizado por el mismo uC para meter contador de programas y bla, bla, bla.

Que haya diferencias, siempre las hay, pero no son de otro planeta como para impedir que entiendas su correcto funcionamiento cuando mires dentro de un datasheet, si ya sabes como funciona el de otros uC, entonces no tendrás problemas con estos otros.

Lo que si te puede resultar interesante es que los micros que no son PIC32, tienen un puntero de pila exclusivo para el contador de programas, los PIC16 no se pueden modificar por sw, pero el resto sí. Esa diferencia se debe a que al ser arquitectura harvard, los PICs utilizan buses diferentes para datos e instrucciones, y además de tamaño diferente por lo que es mejor hacer una pila específica para instrucciones. Pero normalmente eso no es un problema serio de comprender.

Los PIC32 al estar basados en un núcleo MIPS con arquitrectura Von Neumann no tienen pila independiente para el contador de programas.

Un saludo
Reinier

PD: Le das una ojeada al datasheet de tu uC y listo, tud dudas serán aclaradas.
« Última modificación: 15 de Agosto de 2011, 16:43:40 por reiniertl »

Desconectado cucarachero

  • PIC10
  • *
  • Mensajes: 11
    • Espai Metodic
Re: Stack Pointer en PIC's, ¿Es realmente distinto?
« Respuesta #2 en: 16 de Agosto de 2011, 16:09:40 »
Hola Reinier,

Ante todo gracias por tu aproximación, me ha sido muy útil, pero ya sabes lo que ocurre con estas cosas... abres una puerta y te encuentras con cuatro más... ¡y si sólo fueran cuatro!

Asi que permiteme que lance otra pregunta, sin obligar a nada, claro está,

He observado que Harvard quiere decir Risc y pipeline, pero es que al no tener el bus en el patillage es un poco absurdo llamarlo asi, lo veo más como un pequeño plc donde a lo mejor internamente hasta tiene una máquina de Von Neumann con toda su estructura la cual queda transparente. Claro esta que el ciclo de scan lo tenemos que poner nosotros. A ver, no lo critico, si precisamente lo encuentro muy potente, pero es que me ha sorprendido, entonces programar estas "cucarachas" es muy fácil.

Al principio no te entendia con lo de que no se pueden modificar por software, pero esta tarde he estado mirando el set de instrucciones y está claro que no hay ni un solo PUSH o POP, seguramente les habrá en gama alta al ser Pic32 un Von Neumann y la verdad es que ahí estaba muy despistado.

Así que en materia de Pic, no estamos hablando de una única estrategia de procesadores, ademas es distinta para cada una de las 3 gamas. (he entendido que los de 8 patas son una gama todavia mas simple, ¡sólo dos subrutinas! )

Sigo pensando, pero, que mi amigo me lo dijo hablando de precisamente esta gama Pic32, no tengo información al respecto, asi que la pregunta es la misma pero dirigida a los Pic32,

Pero de verdad que me has sido muy útil, así que de momento me quedo con las siguientes conclusiones:

Hay casos en que manejar un 8751 es matar pulgas a cañonazos, es evidente que me interesan más las gamas bajas que las altas, así que las Pic 32 se van a continuar esperando en el baul de los recuerdos, a la espera de saber más sobre sus posibilidades.

Gracias Reinier


Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Stack Pointer en PIC's, ¿Es realmente distinto?
« Respuesta #3 en: 16 de Agosto de 2011, 17:29:26 »
Hola, no soy un experto en PIC pero lo que se respecto al manejo del stack, es que se lo denomina hardware stack porque no se puede acceder directamente a él y sirve solamente para almacenar las direcciones de retorno al entrar a subrutinas. Este funcionamiento es similar a los viejos Motorola 6805, la gran  restricción a este esquema es que es limitado el número de subrutinas que se pueden llamar en forma anidada, por lo demás es solamente un stacj pointer normal.

Lo que no se como hace el compilador C para pasarle parámetros a la funciones ?

Saludos !

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Stack Pointer en PIC's, ¿Es realmente distinto?
« Respuesta #4 en: 16 de Agosto de 2011, 18:51:23 »
Antes que nada quisiera aclarar que existen dos grandes arquitetcuras de máquinas computadoras con procesadores: Von Neuman y Harvard. Lo que las distingue es que Von Neuman tiene un único juego de buses (datos, control y direcciones) se utilizan tanto para datos como para instrucciones (siendo la instruccion a ejecutar el dato cuando se realiza un ciclo de búsqueda y carga de instrucción). Por su parte la arq. Harvard separa las instrucciones de los datos (las variables) dedicando un juegos de buses a datos y otro a instrucciones. La arq. Harvard tiene com ventaja el paralelismo y optimización de los espacios de direcciones (p. ej. el bus de direcciones datos puede ser diferente al de instrucciones) sin embargo impone un uso extendido de los pines del dispositivo. Como los uC no suelen exportar los buses hacia el exterior, se puedenn beneficiar de la arquitectura Harvard, mientras que los uP tendrían que tener un número de patas masivos y el sistema tendría que tener memoria de datos y de programas separadas con el consiguiente aumento de su costo. Al final:

Los uC se benefician de la arq. Harvard porque no tienen los buses fuera, aumentan su velocidad por el paralelismo del acceso a datos e instrucciones y la optimización en los espacios de memoria, como todo queda dentro del encapsulado no hay problemas con los pines de E/S.

Los uP tienen el problema inverso.

En cuanto a las pilas de los PIC, bueno existe una pila donde se guarda el contador de programas cuando se hace un call o cuando ocurre una interrupción. Las familias base y PIC16 no dejan que se pueda leer la pila por sw, pero los PIC18, PIC24 y dsPIC sí lo permiten, y además permiten modificar la pila del contador de programas. Además se pueden implementar pilas por sw para guardar datos cuando se producen llamadas a funciones o cuando un planificador de un sistema operativo (FreeRTOS por ejemplo) hace un cambio de contexto. Por ejemplo los compiladores de C crean pilas para datos para guardar los registros que se van a utilizar en una llamada a función.

No estoy muy relacionado con el repertorio de instrucciones de los PIC porque uso C para programarlos, pero reconozco que existen instrucciones similares a push y pop de arquitecturas como la x86 y que existe el modo de direccionamiento indirecto, lo que permite utilizar un registro como puntero (si se carga en éste la dirección de la pila se puede utilizar como si fuese un SS [stack segment]).

Mi recomendación a todo el que no esté interesado en lidiar con el asunto de la pila y quiera utilizar PICs es que utilice un compilador de lenguaje de alto nivel y que no le ponga demasiado asunto a la cosa. Yo particularmente no he tenido que mirar mucho en esos detalles y aún así utilizo PICs sin problema alguno.

Los PIC32 son otra historia, porque no están basados en la arquitectura tradicional de Microchip, esos utilizan un núcleo Mk4 (MIPS) que es de arquitectura Von Neuman.

Saludos
Reinier

Desconectado cucarachero

  • PIC10
  • *
  • Mensajes: 11
    • Espai Metodic
Re: Stack Pointer en PIC's, ¿Es realmente distinto?
« Respuesta #5 en: 17 de Agosto de 2011, 05:41:30 »
Hola,

Gracias por las aclaraciones,

Quisiera dejar el hilo abierto a quien conozca en profundiad el funcionamiento del Stack Pointer en PIC32.

Entiendo que pueda ser mucho pedir una sintesis de ello, puede ser muy positivo disponer de links, carezco de infos, mi objetivo es localizar las diferencias entre el Stack Pointer de un Pic32 y las familias tradicionales de máquinas de Jhon Von Neumann, sin tener que estudiar la estuctura entera,

En el deseo de que sea un placer,

Gracias

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: Stack Pointer en PIC's, ¿Es realmente distinto?
« Respuesta #6 en: 17 de Agosto de 2011, 07:20:42 »
PIC16 e inferiores: A los que programan en lenguajes de alto nivel o solo trabajaron con PIC no les falta nada, no pueden sentir falta de algo que nunca tuvieron! Pero si vienes de programar en ensamblador sobre una cómoda arquitectura con pila te falta todo. La hoja de datos no miente, la pila esta, pero es oculta y exclusiva del sistema (la utiliza solo para direcciones como dijo RICHI777). Antes hacías push push push y llamabas a tu rutina, eso ya no existe, vas a tener que arreglarte con los registros directamente. Siempre esta la alternativa de implementar una pila por software, pero después te das cuenta que no hace falta, es otra arquitectura y para sacarle provecho vas a tener que adaptarte a ella.
PIC18 y superiores (no se si todos): reiniertl ya te dijo todo, la pila se manipula utilizando las instrucciones PUSH-POP y tanto el SP como la dirección a la que apunta puede ser accedida por software.
@fabianjsm is on twitter