He estado pensando en mi diseño por un tiempo pero no pude encontrar una mejor manera de lidiar con el desbordamiento de búfer en múltiples interrupciones.
Un chip dsPIC33EP está conectado a una pantalla TFT, un sensor UART, una tarjeta micro-SD y una cámara UART. La velocidad en baudios del sensor UART es 921600 y la cámara (50k por foto) es 57600 . El tiempo de escritura del sector de la tarjeta SD (512 bytes) es un poco menos de 2 ms. La pantalla (EVE FT800) tarda 20ms en actualizarse.
El objetivo es responder al sensor UART (al menos cada 30 ms) y actualizar la pantalla según corresponda (etiquetas de actualización) y al mismo tiempo escribir imágenes en la tarjeta SD.
Para desglosar la tarea, he guardado con éxito múltiples imágenes en la tarjeta SD usando interrupciones cuando solo la cámara y la tarjeta SD están funcionando.
La rutina de interrupción:
volatile unsigned char buff[512];
volatile unsigned int ptr=0;
volatile unsigned char EOF=0;
volatile unsigned char buffReady=0;
void ISR(){
static unsigned char temp;
temp=UART_Read();
buff[ptr++]=temp;
if(ptr==512){ptr=0;buffReady=1;}
if(...){EOF=1;}
}
Mientras el programa está bloqueado en un bucle para comprobar el indicador de EOF
while(1){
if(buffReady){SD_Write_Sector(buff);buffReady=0;}//write 512 bytes of image to SD card
if(EOF){break;}//jump out if the image has been finished
}
Mi preocupación es, ¿cómo incorporo las rutinas para actualizar la pantalla mientras recibo datos del sensor UART? Parece que la bandera buffReady debe ser verificada constantemente. Cualquier retraso entre cada comprobación puede perder un par de bytes, ya que se sobrescriben con nuevos bytes.
Dado que el tamaño de la imagen es de alrededor de 50K y la velocidad en baudios es de 57600, habrá seis bytes provenientes de la cámara cada milisegundo. Si la pantalla presenta un retardo de 20 ms entre , la imagen se corromperá.
Pensé en usar un búfer más grande para almacenar imágenes, pero un búfer más grande necesita más tiempo para escribir en la tarjeta SD.
¿Cómo debo organizar la pantalla de actualización y escribir la imagen en la tarjeta SD?