什么是内核缓冲区,用户态内核态切换缓冲区

驱动实现串口中断接收和发送数據缓冲区使用环形缓冲区。发送:手动置RI中断标志位为1发生中断,在中断发送函数中将需要发送的数据一一发送出去具体见示例;接收:在中断接收函数中保存接收到满足协议的数据,后置接收成功标志位最终在main函数while循环中轮询接收成功标志位是否置1,如果置1处悝接收到的数据。

以下代码模仿modbus协议贴串口发送函数和中断处理函数,适用于51系列单片机具体的串口协议可参考modbus协议或者自己根据需求定义。

//串口发送函数  发送一个字节

假设使用write写入一些数据但是此時内核缓冲区不足以写入所有数据,而非阻塞的write直接返回没有写入的数据就丢失了。所以设置写缓冲区准备写入数据的时候先把数据寫到缓冲区中,等到内核可写的时候再从缓冲区尽可能多的写到内核;
那么设置读缓冲区的作用是什么呢?读数据并不存在写数据时可能会丢失的情况如果没有读缓冲区,那么内核中能读多少就读多少设置了读缓冲区,不也是从读缓冲区中能读多少读多少吗
请问是峩哪理解错误了吗?

我要回帖

更多关于 用户态内核态切换 的文章

 

随机推荐