比如:
unsigned char flag;
unsigned char buf[50];
中断:
//串口中断
void hander(state)
{
//
if(state == 1)
{
//将数据读进buf
read(buf);
flag = 1;
}
}
main()
{
if(flag)
{
//需要运行的代码
fun(buf);
flag = 0;
}
}
问题来了,假如在fun(buf)执行完后,进入中断,导致buf区加入了新的值,然后flag = 1了,退出中断,程序再执行flag = 0,这样会使得fun(buf)不能被执行,问题严重了。
有人说,直接将fun(buf)加入在中断里面执行,这样虽然不会漏掉执行,但是如果这个fun执行时间很长,会导致后续的串口接收的中断进不了,数据丢掉了。
也有人说,加入关中断,开中断,这样问题解决了,程序中因为用定时中断做了时间功能,关了中断,时间不准了。。请问大家是怎么解决的? |