errores IAR sobre vriables externos y globales

0

Quiero obtener los valores de una matriz global en un archivo c. La pantalla de impresión de código se muestra a continuación:

'datos'eslamatrizglobaly'slave_buffer_rx'esotramatrizglobaldefinidaenestearchivoparaobtenervaloresde'datos'.cadacruzrojatienedoserrores:

  1. Error[Pe094]:eltamañodeunamatrizdebesermayorquecero
  2. Error[Pe028]:laexpresióndebetenerunvalorconstante

Sécómodeshacermedeloserrores:realizarasignacionesenunafunciónlocal.Elcódigosinerrores.semuestraacontinuación:

Pero no conozco las razones exactas y cómo puede IAR considerarlo como una matriz de longitud cero. ¿Alguien puede darme algunas ideas?

    
pregunta oilpig

1 respuesta

2

Hay algunos problemas, toma la primera línea, por ejemplo:

__IO uint8_t Slave_Buffer_Rx[0]=data[0];

Esto intenta declarar una matriz de longitud cero y también asignarle un valor no constante. El primer [0] está especificando la longitud de la matriz como cero. Lo que está intentando arriba es una inialización estática, por lo que usar data[0] no tiene mucho sentido en ese momento porque durante la inicialización del programa no se conocerá el valor del puntero.

Debido a que está usando punteros y los valores serán los mismos, no veo una razón inmediata para usar variables diferentes. Si su rutina ISR necesita escribir datos en su búfer global, podría usar algo como lo siguiente, por ejemplo:

INTERRUPT_HANDLER(I2C_IRQHandler, 19)
{
    data[0] = I2C_read();
    data[1] = I2C_read();
    data[2] = I2C_read();
}

Si realmente necesita una copia separada de los datos (por ejemplo, para modificarlos sin cambiar el búfer principal), lo que haya hecho en el segundo ejemplo está perfectamente bien. Deberá copiar el contenido del búfer en cada llamada ISR en caso de que los datos hayan cambiado entre llamadas.

    
respondido por el PeterJ

Lea otras preguntas en las etiquetas