英伟达Xavier调试记录_202209

本文详细记录了在英伟达Xavier平台上进行串口通信、线程调度、V4l2视频框架和Select多路IO复用的调试过程。在解决实时性、线程调度问题时,发现在指定CPU和优先级后,仍存在周期不稳定的现象。通过分析,推测可能是因为在8核ARM架构上无法保证预期的实时性能。同时,对于Select的使用不当可能导致CPU死循环,内核重启,产生异常照片。最后,还提到了在数据包中获取时间时遇到的问题及其解决方案。
摘要由CSDN通过智能技术生成
  1. 串口通信。和网口通信相比,不能一次返回接口协议定义的完整包。需要逐字节解析才能凑齐一包通信协议格式包。为防错,通常采用固定标识、长度校验、校验和的方式保证能够区分开数据。
  2. 线程调度。Linux线程调度分为实时和分时调度,实时包含SCHED_FIFO(优先级[1,99],越大级别越高)、SCHED_RR、SCHED_DEADLINE(更好的实时性);分时调度SCHED_OTHERS、SCHED_IDLE。默认是SCHED_OTHERS。在以时间戳做图片名称存图调试过程,存在周期不稳定,波动大现象。采图线程通过指定CPU和线程调度方式(设置SCHDE_FIFO)和优先级(设置 80)的方式期望提高实时性能,经过长时间反复测试发现,会出现超过期望的延时和波动(如周期3s,误差能到200ms),通过打印v4l2的buff的时间戳方式,分析42分钟内数据,发现两次buff间的最大误差是-400us 和 60us。因此,确定硬件可靠,数据到内核的延时可忽略,但是图片的名称相减得到延时却存在200ms。翻看8月17日挂飞40分钟的红外相机存图数据,不存在此现象。猜测是因为给线程指定CPU和优先级的方式在xavier这种8核arm结构 (Ubuntu 18.04  内核:4.9.201)不能保证期望的实时性。最终选择不指定CPU和不设置优先级(默认SCHED_OTHERS方式)组合。
<
设置优先级 不设置优先级
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值