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后,问题解决。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值