stm32+djyos下串口缓冲区配置

    就这行简单代码:
    write(UartFd,DataBuf,100);
    执行时间有时候长,有时候短,直接影响了后续代码的执行,why?函数

    进一步了解到,用户发送数据,是间歇式的,连续发完一组数据后,会间歇比较长的一段时间,每组数据,会分好屡次write发送,总共大概几百字节。blog

    带着这个问题,咱们来谈谈通讯缓冲区,顾名思义,缓冲区是用来调和CPU运行速度和通讯端口速度的,缓冲区设置不足,缓冲做用就会打折扣,设置过大,则浪费内存空间。该用户使用stm32f767+djyos,地球人都知道,stm32f767跑起来有多快,而串口通讯有多慢,用户的问题,其实就是缓冲区设置的问题。内存

    djyos的串口设备,都有一个环形缓冲区,write时,若是buffer有空闲空间,则把数据copy到buffer中,而后返回;若是buffer没有空间,则阻塞等待buffer空闲。write函数执行时间,与调用时buffer是否有足够的空间有关,因为用户发送的间歇性,只要buffer可以容纳一组数据就不会有问题。打开djyos的图形化配置界面,检查其工程配置,果真发现其发送缓冲区只配置了128字节,改为512后,问题解决。it

欢迎转载,转载注明出处。class