Autor Tema: Un efecto de la RAM de los PIC's peligroso para incautos como yo.  (Leído 5878 veces)

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

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
No me canso de decirle a los amigos que yo, en esto de la Picmanía, no dejo de ser un novato mas. En el fondo todos los somos siempre, ya que cuanto mas intentas profundizar mas cosas nuevas aprendes y/o descubres.  :D

Dicen que la juventud comete la permanente impertinencia de creer que aquello que descubre por primera vez es la primera vez que se descubre. No soy nada joven y creo que tampoco impertinente. Así que aquello que descubro doy por supuesto que ya ha sido conocido por todos mis predecesores en esto, pero puede no ser verdad del todo y haber aún alguien que aún no lo sepa.

Es mi obligación y mi devoción ponerlo en común y compartirlo con todos ustedes. Para los que no lo sepán me complace ayudarles un poquito, para los que hace mucho tiempo que ya lo saben me consuelo en pensar que piensen de mi que al menos sirve para algo.

El tema que quiero comentar, y que ha dado paso a esta larguísima introducción, consiste realmente en algo que es de cajón, pero que hasta no haberlo sufrido en mis propias carnes no lo he tomado en cuenta.

Me he dado cuenta de que: Tras programar el PIC y resetearlo por hardware tirando a masa el correspondiente pin de reset ... ¡¡¡¡ la RAM continúa intacta !!!!  :shock:

Si no inicializo a un valor conocido todas y cada una de las variables en la parte inicial de mi programa, que se ejecuta siempre tras un reset o al dar corriente al PIC, entonces aquellas que no haya inicializado tendrán aún el valor que tomaron antes de re-programar el PIC o pulsar el botón Reset.

Esto puede ser fuente de errores absolutamente incomprensibles ya que heredaremos valores de variables que es imposible que los hayan podido alcanzar tras una ejecución normal de nuestro programa.

Por lo tanto y como moraleja: Inicializa los valores de las variables al inicio de tu programa, asi te asegurarás de que siempre partiras de unos valores conocidos.  :mrgreen:

En la imagen que os pego mas abajo aparece una monitorización sobre el canal serie de un PIC al que acabo de re-programar y resetear. El último valor que aparece estaba almacenado en la RAM y provenía de la ejecución anterior del programa:



Ea, hasta otra.

Un saludo.
« Última modificación: 08 de Enero de 2007, 18:42:00 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #1 en: 08 de Enero de 2007, 19:39:11 »
No me canso de decirle a los amigos que yo, en esto de la Picmanía, no dejo de ser un novato mas. En el fondo todos los somos siempre, ya que cuanto mas intentas profundizar mas cosas nuevas aprendes y/o descubres.  :D

Dicen que la juventud comete la permanente impertinencia de creer que aquello que descubre por primera vez es la primera vez que se descubre. No soy nada joven y creo que tampoco impertinente. Así que aquello que descubro doy por supuesto que ya ha sido conocido por todos mis predecesores en esto, pero puede no ser verdad del todo y haber aún alguien que aún no lo sepa.

Es mi obligación y mi devoción ponerlo en común y compartirlo con todos ustedes. Para los que no lo sepán me complace ayudarles un poquito, para los que hace mucho tiempo que ya lo saben me consuelo en pensar que piensen de mi que al menos sirve para algo.

El tema que quiero comentar, y que ha dado paso a esta larguísima introducción, consiste realmente en algo que es de cajón, pero que hasta no haberlo sufrido en mis propias carnes no lo he tomado en cuenta.

Me he dado cuenta de que: Tras programar el PIC y resetearlo por hardware tirando a masa el correspondiente pin de reset ... ¡¡¡¡ la RAM continúa intacta !!!!  :shock:

Si no inicializo a un valor conocido todas y cada una de las variables en la parte inicial de mi programa, que se ejecuta siempre tras un reset o al dar corriente al PIC, entonces aquellas que no haya inicializado tendrán aún el valor que tomaron antes de re-programar el PIC o pulsar el botón Reset.

Esto puede ser fuente de errores absolutamente incomprensibles ya que heredaremos valores de variables que es imposible que los hayan podido alcanzar tras una ejecución normal de nuestro programa.

Por lo tanto y como moraleja: Inicializa los valores de las variables al inicio de tu programa, asi te asegurarás de que siempre partiras de unos valores conocidos.  :mrgreen:

En la imagen que os pego mas abajo aparece una monitorización sobre el canal serie de un PIC al que acabo de re-programar y resetear. El último valor que aparece estaba almacenado en la RAM y provenía de la ejecución anterior del programa:



Ea, hasta otra.

Un saludo.


Si es verdad que los jovenes creen descubrir la polvora a cada paso que dan, pero no menos cierto es que los viejitos acostumbramos olvidar comentar lo que nos ha pasado dando por obvio que al resto ya les paso... :lol: :lol: :lol:

Esto que comentas creo que es parte de los cambios de la linea 18F, y explico porque lo creo asi:
Estuve trabajando en un proyecto en el cual inicialmente empece con un PIC16F876, en el cual NUNCA necesite borrar la memoria al resetear o reiniciar.
Por quedar muy justo en ROM y RAM (programo en C y no escatimo recursos ni lineas) pase a un PIC18F252, y alli empezaron mis problemas...

Primero no funcionaba el LCD, esto porque los puertos del PIC tienen otras direcciones diferentes, luego no escribia la EEPROM, tambien era un problema de otra direccion de memoria de inicio.
Cuando creia que ya estaba todo bien ¡¡Que paso!!... Me aparecian valores en la RAM a pesar del reset !!!

Solucion: Uso la instruccion #ZERO_RAM al iniciar y adios al problema!!

Verifique en el 16F876 si hacia falta comentandola y no era necesario usarla, pero con la linea nueva mas vale que la utilizes...

Eso si, yo creo que la operacion mas conveniente es hacerlo SIEMPRE ya que es la unica manera que el programador tenga el control de como inicia el PIC.

Gracias por comentarlo... :mrgreen: :mrgreen: :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #2 en: 09 de Enero de 2007, 14:38:05 »
Vaya amigos!!!
 :shock:
esas son palabras mayores... es increible como uno puede tener tiempo trabajando con cosas (como los PIC's) y desconocer detalles tan simples como ese...  de verdad no lo sabia... cuando aprendia programacion, pero para correr los programas en un PC siempre me decian, preferible realizar una doble inicializacion de una variable, que dejarla al azar...   ahora veo que tambien se aplica en PIC...

 de hecho, porque siempre inicializo, nunca me he topado con ese error, pero me sorprende no haberlo visto antes :-/

pero lo mejor, es que ese "error" tiene potencialidades...  si una data en la RAM, se resiste al Reset, entonces no podria funcionar como una EEPROM más? es decir, almacenar data que no quiero que se pierda con el reseteo? como transacciones o registros de un sensor? algo me dice que la realidad no es tan bonita, pero, y si es así? y asi tengo doble memoria EEPROM!!!! bueno, ustedes diran si es absurdo, y me deje llevar por la emocion...

Saludos
Daniel 
Caracas, Venezuela 

-----------------

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #3 en: 09 de Enero de 2007, 15:47:01 »
No, amigo Dancrazy, no es como la EEPROM porque al quitar la corriente ... puf adíos la RAM  :)

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado psykhon

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 823
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #4 en: 09 de Enero de 2007, 15:47:16 »
las sram no se volatilizan mientras tengan alimentacion, distinto son las dram que necesitan un ciclo permanente de refresco
No, no se lo que estoy haciendo. Nadie sabe que estoy haciendo. Por eso se llama "Investigacion".

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #5 en: 09 de Enero de 2007, 16:34:24 »
Hola a todos. Ya lo decía el gran sabio Socrates, "yo solo se que no se nada" queriendo decir que mientras mas se aprende, mas se averígua que le falta aún para conocer, o como lo decía Einstein:
"Cada día sabemos más y entendemos menos"
"El misterio es la cosa más bonita que podemos experimentar. Es la fuente de todo arte y ciencia verdaderos"

por si puede servir de algo, hay un capítulo en la datasheet pagina52 (del cual apenas estoy leyendo) que habla sobre los efectos de un reset en los SFR, y no se si mencionan a la RAM (no lo he leido todo), pero a ver si sirve de punto de partida para ver porque sucede esto.


Salu2
Pedro
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #6 en: 09 de Enero de 2007, 18:57:52 »
Supongo que es muy natural tender a pensar que un Reset es una inicialización completa de todo el sistema, quizás porque estamos acostumbrados al Reset del PC.

Pero como bien ha detectado Don Diego, nada más lejos de la realidad.

Para mí fue un gran descubrimiento el otro día que los dsPIC33F tienen un registro que puede consultarse cuando arrancan y que te indican cuál fue la causa del Reset.

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #7 en: 10 de Enero de 2007, 10:46:54 »
Bueno,

amigo nocturno...  el pic tambien guarda un registro cuando usas el watchdog timer de cual fue la causa del reset, y (teoricamente) cuando pasas por la parte inicial del programa (en CCS PIC C) puedes colocar un switch-case para realizar acciones distintas si es "un encendido normal" o si es "un reset porque se colgó el programa" esperando algo que no llegó.  y se encuentra documentado en la ayuda, solo que yo lo use y como que lo hice mal, porque no lo hizo bien, pero de todas formas, está previsto...

es maravilloso ¿no? pues sirve para enviar mensajes de error, y muy util cuando hay mas de una comunicacion serial, donde a veces llegan señales "fantasma" acopladas en el cable y entonces se queda el programa eternamente esperado algo que no iba a venir...

Saludos a todos
Daniel 
Caracas, Venezuela 

-----------------

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #8 en: 10 de Enero de 2007, 11:40:56 »
 :-/ :D o sea que el reset "infalible" es quitarle la alimentacion!!!!  :mrgreen: :D

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 498
    • Software Electronica Microncontroladores
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #9 en: 03 de Febrero de 2007, 20:55:52 »
Bueno amigos a mi me paso una ves y es seguro que siempre hay que inicialisar una variable antes de utilisarlas.
Y ni siquiera con quitar la corriente quedaran en cero.
Yo me meto por que antes que los pic yo trabaje con microprosesadores 8085, y tenia que ponerles una memoria externa hm6116, se acuerdan bueno estas eran memorias ram solamente, y tambien es lo mismo.
Yo entiendon que una memoria es una coleccion de flipflops, lo se por que antes de cualquier dispositivo avansado trabaje con muchos integrados digitales, y si se hase el experimento con un grupo de flipsflops, dara lo mismo. es que eso es cuestion de asar de equilibrio de cargas y esas cosas.
La moraleja para mi es clrf registro antes que nada.
bye un saludin :-/
Necesitas ayuda para tu proyecto electronico?
buscame, tal ves pueda colaborarte.
Blog: http://electronicosembebidos.blogspot.com.co/
mail: electronicosembebidos@gmail.com
Mi grupo de facebook: https://www.facebook.com/groups/ProgramandoPics/

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #10 en: 04 de Febrero de 2007, 12:59:59 »
Diego, no entiendo el post y no quiero sonar ni soberbio ni nada, simplemente me atrapó la curiosidad de que seguro algo se me está escapando y no lo alcanzo a ver.

El tema es, si uno hace un código para que funcione bien cuando arranca un pic con cualquier condición, ¿porqué habría de fallar o cual es el peligro si uno lo resetea al pic y tienen  dichas variables el mismo valor que antes?

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 ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #11 en: 04 de Febrero de 2007, 14:35:15 »
Hola, yo lo sabia pero no por haberlo descubierto ni nada, en el curso de PIC que hice en la facultad nos comentaron esto, y expresaron un reset, como un simple reinicio del contador de programa(PCL), nada mas. Por ende si al comiendo del proa asumimos que las variables estén en cero, tendremos errores.

También expresaron la importancia de la inicialización de las variables, justamente por eso. En mi caso siempre inicializo el bloque de ram destinado a las variables agregando este codigo:

   movlw   0x20      ;Borrado de memoria, direccion inicial.
   movwf   FSR
DelRAM   
   clrf   INDF
   incf   FSR,1      ;FSR ++
   btfss   FSR,7
   goto   DelRAM


Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado psykhon

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 823
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #12 en: 04 de Febrero de 2007, 20:33:34 »
delayms 200 'siempre esperar que se estabilize el micro en el arranque

var1 = 0
var2 = 0

etc....
no falla

quienes programan en bajo o medio nivel para pc saben que aun arrancando la maquina de apagada puede haber basura en la ram debido a que las ram dinamicas son bastante "raras" en su arranque, las ram estaticas como las que usan los pics son mas estables y en arranque de cero estan en null pero ante un reset no se volatilizan
No, no se lo que estoy haciendo. Nadie sabe que estoy haciendo. Por eso se llama "Investigacion".

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #13 en: 19 de Diciembre de 2008, 09:02:32 »
Vengo de otro hilo y me he topado con algo interesante que desconocía.

Afortunadamente, cada vez que trabajo con la RAM. siempre utilizo instrucciones que no suman los datos a pasar a la ram con los datos de la pocición de la ram. Simpre utilizo MOVWF. En cambio, si tengo que utilizar una pocición de RAM como bandera, antes de empezar, la coloco en 0 para partir de un valor conocido, esto lo he echo por instinto y al ser verdad, eh tenido suerte, porque como uno bien sabe, más los que trabajamos en ASM sabemos bien como avanza en todo momento el CP, si yo hubiera pensado que ni bien empiezo ya asumo las RAM en cero, de seguro me hubiera topado con este error.

No es de sobervio ni nada por el estilo, lo que intento expresar, es la suerte de seguir al instinto.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Un efecto de la RAM de los PIC's peligroso para incautos como yo.
« Respuesta #14 en: 19 de Diciembre de 2008, 12:06:44 »
En cambio, si tengo que utilizar una pocición de RAM como bandera, antes de empezar, la coloco en 0 para partir de un valor conocido, esto lo he echo por instinto y al ser verdad, eh tenido suerte, porque como uno bien sabe, más los que trabajamos en ASM sabemos bien como avanza en todo momento el CP, si yo hubiera pensado que ni bien empiezo ya asumo las RAM en cero, de seguro me hubiera topado con este error.

No es de sobervio ni nada por el estilo, lo que intento expresar, es la suerte de seguir al instinto.

Exacto. Tambien por sentido común al iniciar un programa se debe inicializar solo las variables que consideras importantes, porque a veces tenemos otras variables que en el transcurso del programa entra en una subrutina en la que se inicializa ahi mismo, entonces para que inicializar esta variable en el inicio del programa si ésta sola se va a inicializar dentro de una subrutina.

Los registros que usaremos como banderas son de vital importancia inicializarlos al comienzo del programa.

Javicho.


 

anything