Это должно быть легко ответить любому, кто знаком с C. Я хочу отобразить предыдущие значения переменной (регистр приема UART (RS-232) на микроконтроллере) на ЖК-дисплее. Это моя текущая реализация, и она работает нормально. Но я хотел бы знать, есть ли способ провести меньше времени в моей процедуре прерывания. В настоящее время периферийное устройство настроено на переход к процедуре прерывания, как только он получает один новый символ в канале UART. Предложения кто-нибудь?Отображение ранее полученных значений UART
//Initialization
char U1RX_data = '\0';
char p0_U1RX_data = '\0';
char p1_U1RX_data = '\0';
char p2_U1RX_data = '\0';
char p3_U1RX_data = '\0';
char p4_U1RX_data = '\0';
char p5_U1RX_data = '\0';
char p6_U1RX_data = '\0';
char p7_U1RX_data = '\0';
char U1buf[] = {p7_U1RX_data, p6_U1RX_data, p5_U1RX_data,
p4_U1RX_data, p3_U1RX_data, p2_U1RX_data,
p1_U1RX_data, p0_U1RX_data, U1RX_data, '\0'};
disp_string(-61, 17, 1, U1buf); //X, Y, mode, string
void _U1RXInterrupt(void){
p7_U1RX_data = p6_U1RX_data;
p6_U1RX_data = p5_U1RX_data;
p5_U1RX_data = p4_U1RX_data;
p4_U1RX_data = p3_U1RX_data;
p3_U1RX_data = p2_U1RX_data;
p2_U1RX_data = p1_U1RX_data;
p1_U1RX_data = p0_U1RX_data;
p0_U1RX_data = U1RX_data;
U1RX_data = U1RXREG;
IFS0bits.U1RXIF = 0;
}
Спасибо за все ответы. Я посмотрю на круговой буфер. Для любопытных это относится к dsPIC30F4013 с тактовой частотой 7,3 МГц. В этом случае оптимизация может не понадобиться, но я буду знать, как это сделать, если у меня возникнут проблемы. – JcMaco