|
昨天寫(xiě)串口中斷的程序,一直沒(méi)調(diào)好,才發(fā)現(xiàn)是串口中斷里的函數(shù)干的事情太多的原因。
我原來(lái)的程序:
void uart()interrupt 4
{
if(RI)
{
global_uart_table[global_i]=SBUF;
assign_gsm_net();
assign_gprs_table();
compare_gsm_net_sign(); //判斷是否獲取網(wǎng)絡(luò)時(shí)間
compare_gprs_net_sign();//判斷是否獲取GPRS服務(wù)器時(shí)間
assign_usb_table();
assign_fn_table();
compare_usb_sign(); //判斷是否收到幀結(jié)束符
compare_fn_sign(); //判斷電腦添加用戶(hù)是否結(jié)束
global_i++;
if(global_i>MAX_UART_TABLE_NUMBER-1)
{
global_i=0;
}
RI=0;
}
}
發(fā)現(xiàn)這個(gè)程序一直不安自己想的走,后來(lái)發(fā)現(xiàn)是我在中斷里做的事情太多了,因?yàn)槲以O(shè)定的波特率為115200.如果我在中斷了干活的時(shí)間太長(zhǎng)的話(huà),那下一次中斷來(lái)時(shí)我還沒(méi)有退出中斷,那么它的信息我將丟失掉。這就是原因的所在。
|
|