Autor Tema: Detectar en el código si estamos con el emulador o no  (Leído 2546 veces)

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

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 236
Detectar en el código si estamos con el emulador o no
« en: 26 de Junio de 2019, 07:10:15 »
Saludos al foro!

No se si ha alguien le ha surgido este problema, se trata de identificar desde el propio programa si estamos corriendo el programa mediante un emulador tipo ICD, PicKit, etc o es la versión compilada ejecutándose.

Supongo que habrá métodos más elegantes, pero ésta es la función que yo utilizo y me funciona muy bien:

Código: [Seleccionar]
// -----------------------------------------------------------------------------------------------------------
// Función que devuelve TRUE si estamos emulando con el ICD, PicKit, etc
// -----------------------------------------------------------------------------------------------------------
short   Hay_Debugger() {                                            // Devuelve true si estamos depurando
    long   i;                                                       // Contador genérico
    char  Buffer[8];                                                // Buffer de lectura

    i = getenv("PROGRAM_MEMORY");                                   // Carga el final de la memoria

    Read_Program_Memory(i-0x100, Buffer, 8);                        // Leemos 8 bytes de la memoria reservada

    for (i=0;i<8;i++) {                                             // Comprobamos los bytes
        if (Buffer[i]!=0xFF) {                                      // Miramos si alguno no es 0xFF
            return(true);                                           // Algún valor no es 0xFF, hay Debug
        }
    }
    return (false);                                                 // Todas son 0xFF, no hay Debug
}


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Detectar en el código si estamos con el emulador o no
« Respuesta #1 en: 27 de Junio de 2019, 07:04:56 »
Hola, si la idea del emulador es ver como se comporta el programa, porque quisieras determinar si justamente esta corriendo sobre el emulador o no? Es como si quisieras cambiar el programa debido a que esta sobre el emulador, pero eso iría en contra de lo anterior ya que no es lo mismo que se esta ejecutando ahora.. Ademas serias vos el que sabes que esta en un emulador...

En fin.. no logro entender cual motivo seria el que te llevaría a desarrollar esto..
Pero si lograste encontrar la función entonces genial... A alguno le servirá seguramente.

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 236
Re:Detectar en el código si estamos con el emulador o no
« Respuesta #2 en: 01 de Julio de 2019, 05:15:16 »
Gracias por tu interés!

En mi caso concreto se trata de que hice un programa que en modo ejecutable permite entrar en un modo especial de trabajo al llevar a cero una de las líneas de programación (MCLR, PGC, PGD). Esto era molesto con el emulador ya que me obligaba a utilizar compilación condicional si lo estaba usando o no y a veces se me olvidaba quitar la condición al compilar. Este caso se puede dar en micro con pocas patillas en las que hay que utilizar todas las disponibles.


Usando esta función al comienzo del código no necesito controlar nada ya que el propio código "sabe" que no debe de entrar en ese modo en la versión de depuración.

Saludos!
« Última modificación: 01 de Julio de 2019, 05:19:03 por PicMinor »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Detectar en el código si estamos con el emulador o no
« Respuesta #3 en: 01 de Julio de 2019, 06:46:53 »
Entiendo. Yo siempre destine los pines de programacion a unicamente eso, o siempre utilice PICs con mas pines debido a que jamas tuve una requisito de tamaño. Por eso mismo no le veia la utilidad, pero por lo que comentas es entendible, gracias por sacarme de la duda.


 

anything