Módulo convertidor analógico a digital de MCU - Pregunta conceptual

4

Por favor considere los siguientes códigos:

//Code Sample 1
void func_val(void) 
{
  unsigned int val;
  ADCSC1 = 0x00; // sets the required channel.
  while(!ADCSC1_COCO); //check for conversion complete flag.
  val= ADCRL;
}

//Code sample 2
void EvalProx()
{
  unsigned int proxval;
  ADCSC1 = 0x02; // sets the required channel.
  while(!ADCSC1_COCO); //check for conversion complete flag.
  proxval = ADCRL;
}

Ahora ambas muestras son fragmentos de un código más grande, que compila y funciona. Mi pregunta es sobre el concepto de convertidores analógicos a digitales en MCU. ADCRL y ADCRH son los registros en los que se almacenan los valores convertidos. ADCSC es el registro de control de estado en el que he especificado dos canales diferentes para usar.

Pregunta: los ADCRL / ADCRH son iguales para los dos ajustes diferentes de ADCSC , es decir, iguales para los dos canales . Entonces, ¿el valor de proxval influye en el valor de val cuando se accede? es decir, si func_val() se ejecuta y luego EvalProx() , ¿está el valor de proxval influenciado por val ? (cuando ambos valores dependen de ADCRH y ADCRL )

Espero que esté claro. Antes de votar hacia abajo esta pregunta, solicito, por favor tómese un tiempo para decirme por qué ha votado abajo, para que pueda mejorar mi pregunta.

Hoja de datos de la MCU usada: MC9S08DZ60

Números de página específicos: Capítulo 10: - Página 181,182- para ADCRH y ADCRL .

    
pregunta sheetansh

2 respuestas

0

Dudo que ese fuera el caso. Generalmente, en un caso como este, el compilador leerá el valor de ADCRL y lo almacenará en una ubicación en la memoria asociada con la variable val o proxval. Puede verificar esto mirando el código de ensamblaje generado por el compilador. Pero si te preocupa eso, declararía val y proxval como variable volátil. Si val y proxval están donde los punteros a ADCRL, sí, llamar a una función afectaría a la otra, pero como variable regular, el valor de ADCRL se almacena realmente en la variable

    
respondido por el Kvegaoro
7

Esta pregunta no tiene nada que ver específicamente con el ADC; lo que realmente estás preguntando es sobre el uso de variables automáticas dentro de las funciones de C. El hecho es que val y proxval ni siquiera existen al mismo tiempo, cada uno solo existe cuando su función correspondiente se está ejecutando realmente.

Las variables automáticas (las variables declaradas dentro de una función y no declaradas como static ) se asignan en la pila de la CPU (o una simulación de una pila si el hardware de la CPU no lo admite).

Es posible que se use la misma ubicación física en la pila para ambas variables, si las dos funciones se llaman desde el mismo nivel en la jerarquía de llamadas y tienen los mismos parámetros.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas