stm32+djyos下串口缓冲区配置

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

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

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

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

stm32+djyos下串口缓冲区配置_第1张图片

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

 

你可能感兴趣的:(djyos相关,编程方法,硬件点滴)