硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1801|回复: 2
收起左侧

[Linux] 关于LINUX的串口的实时性问题

[复制链接]

4

主题

6

回帖

18

积分

新手上路

积分
18
发表于 2021-9-30 13:39:37 | 显示全部楼层 |阅读模式
各位好!
       硬件平台:IMX6ULL
       内核:LINUX 4.15
       波特率:38400
       现在在用IMX6ULL 通过串口读取外面的探头数据:
       1. 主控IMX6ULL 发送一帧数据出去,数据长度大概是8ms
       2. 大概在1.5ms-2ms 的时候,从机会返回一帧大概9ms的数据。
       我现在软件的做法是:
       write数据到串口的时候,
       如果连续22ms没有数据,那么认为探头没有应答。
       在这22ms内,如果接收buff有数据,那么延时1ms以后,再判断接收buff的数据数目是否有变化,如果没有变化,那么说明接收成功了,读取接收的数据,如果有变化,那么在延时1ms,以此类推。
       问题:
       如果只是延时22ms ,那么,会出现数据数据接收不到,或是接收不全的问题,如果把这个22ms加长到26ms,那么就不会有问题。
       但是按逻辑分析仪看,应该是发送8.5ms发送完以后,在接下去的10ms内就已经回来了,所以按道理,我延时22ms是够的。
       现在给我的感觉是,底层收到了uart的数据,但是上报给应用程序,应该有延时,这个延时看上去,差不多是10ms。
       我有试着把内核的接怕从100HZ,更改为250HZ,但是发现没有改善。

file:///C:\Users\vincent.xie\AppData\Local\Temp\SGPicFaceTpBq\10828\0031E0DC.gif
回复

使用道具 举报

41

主题

214

回帖

337

积分

高级会员

积分
337
发表于 2021-9-30 18:05:30 | 显示全部楼层
select或者epoll试一下
回复

使用道具 举报

58

主题

118

回帖

292

积分

高级会员

积分
292
发表于 2022-4-14 08:27:51 | 显示全部楼层
(1)内核需要实时补丁,提升为实时内核。(2)驱动上需要将数据提交的延时去掉。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-20 09:03 , Processed in 0.270927 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表