Velocidad de escritura de variables indexadas

Buen día a todos.
Es mi primer hilo. Les comento el problema que tengo.
Estoy probando algunas cosas con arduino NANO y arduino MEGA. tengo ambos. Necesito tomar algunos valores de entradas y guardarlos en un array.
El problema que tengo es que cuando intento guardarlos toma 300uS por cada dato que quiero guardar y es prohibitivo para el programa que quiero hacer. ¿Hay alguna forma de acelerar estas escrituras? He probado con "volatile" y no veo ninguna diferencia. En todos los casos, cuando agrego a mi programa la instrucción:
VECTOR[i] = VALOR;
me agrega 300uS al ciclo. Mientras que cuando la variable no es un array el tiempo es muchísimo menor. El problema es solo en la escritura, pues cuando hago lectura de un valor del vector, es muy rápido.

No si no pones tu código para observar que estas haciendo es dificil entender que estas usando o cómo consumes ese tiempo.

Estaba por mencionar un buffer y me encuentro con

VECTOR[i] = VALOR;

Lo que ya explica que usas un buffer.

Nota: Por favor aunque sea una sola línea posteala como he hecho yo, siempre usando etiquetas como lo piden las normas.

Coincido con @Surbyte. Sin código no sabemos que estás haciendo.

A modo de ejemplo he escrito un sketch para ver el tiempo en recorrer un array:

/* 
 *  MIDIENDO VELOCIDAD.
 */
#define MAX_VECTOR 100
int vector[MAX_VECTOR];
int x = 100;
uint32_t m1, m2;

void setup() {
  // Para mostrar la información a través del puerto serie.
  Serial.begin(9600);
}

void loop() {
  m1 = micros(); // Medimos el tiempo de inicio.
  for (int i=0; i<MAX_VECTOR; i++) {
    vector[i]=x;
  }
  m2 = micros(); // Medimos el tiempo de final.
  
  // Muestro la información.
  Serial.print(F("La velocidad ha sido: "));
  Serial.print(m2-m1);
  Serial.println(F(" uS"));
  delay(100);
}

No he utilizado un Arduino real, sino una simulación en proteus que debe ser mucho mas lenta. El resultado es de 4uS en recorrer haciendo la asignación. He probado con diferentes tipos: float, int, byte.. con el mismo resultado.

También he probado varios tamaños, dejando al Arduino casi sin memoria y no he obtenido tiempos superiores.

Ten en cuenta que en este caso, la variable "x" es como una constante y siempre vale lo mismo. El cuento cambia cuando esa variable se le asigna el valor de un sensor. Por ejemplo:

x = analogRead(A0);

Solo esa línea hace que el tiempo se dispare, pero no es la asignación, simplemente es la lectura del sensor, la que hace que eso ocurra. La función analogRead tiene un tiempo de ejecución de 100uS y no se puede "cambiar" y hay que recurrir a alternativas usando "fast ADC".

Así que sin ver el código te puedo decir que lo único que veo posible es que tengas una lectura de sensor lenta y eso hace que dure tanto tiempo.

Muchísimas gracias por responder sin que haya puesto el código. El problema real no estaba en la escritura del array sino en que cuando escribía el valor luego lo usaba para unos productos. Dependiendo del valor que pusiera en el array, los productos se realizaban más rápido o más lento.

@gabriel_diy lee las normas y cuando plantees un problema aporta toda la información y no esperes a que hagamos de detectives para intentar ayudarte.
Creo que te ha quedado claro para la proxima.
Si esta resuelto indica solucionado.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.