关于串口接收程序的优化。
void UARTInrerrupt(void) interrupt 4
{
unsigned char ch;
if(RI)
{
RI=0;
ch=SBUF;
Buff[count++]=ch;
count=count%100; //100为缓冲区大小
}
if(TI)
{
TI=0;
busy=0;
}
}
上面是我一般运用的串口接收中断程序。然后去主程序中或者中断里去写个Judege_SeriesData()解析数据。
各位有什么好的方法,确定缓冲区大小开辟多大才合适呢,如果一次我接收96个字符,多大才合适呢。不会溢出,不会因为过大而影响使单片机工作效率降低呢。
[最优解释]
各位有什么好的方法,确定缓冲区大小开辟多大才合适呢,
//通常,我习惯于采用定长,或者能明确数据长度的通信协议。我不太习惯在MCU里搞可变长数据通信。
如果一次我接收96个字符,多大才合适呢。不会溢出,
//会不会溢出,看你缓冲的取长短。当然,是直接取上限。不超过当然不会溢出。
不会因为过大而影响使单片机工作效率降低呢。
//其实,协议的解析,看着代码行很多,很复杂,但是,由于多是条件的识别和分支,执行效率很高的。一般的应用下,不用太担心解析过程中的效率问题
[其他解释]
该回复于2012-09-17 10:58:10被版主删除
[其他解释]
最好采用定长数据存储方式 或者最大缓冲区 不要采用变长
[其他解释]
该回复于2012-09-18 06:51:35被版主删除
[其他解释]
定长 是首选,malloc 更慢