实时系统介绍

本文介绍了实时系统的基本概念,包括关键术语、系统分类和实时应用编程注意事项。详细讨论了C++开发实时应用时的内存管理、异常处理、虚表与指针、多线程等方面的问题。此外,还探讨了ROS2在实时应用编程中的支持,如DDS通信中间件、rttest工具和TLSF内存分配器。总结了编写实时应用的挑战和性能分析工具的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实时系统介绍

最近准备将之前开发的应用从 TX2 移植到 S32V 上,实验室同学负责 RTLinux 的移植以及 ROS2 到 RTLinux 的移植,我则负责将软件从 ROS1 迁移到 ROS2 上,并针对部分应用开发实时版本。这一方面是为了保证部分应用的执行是确定(determinism)的,另一方面也是为了提高编写的自动驾驶应用的质量,更合理地利用开发板硬件资源。因此,这里就把我最近学习实时应用编程的一些知识整理成文档以便日后查阅以及探讨学习。

本文将从实时计算的定义、实时应用编程的注意事项、ROS2 对实时应用编程的支持进行介绍,最后对本文的主要内容做一个总结。
在这里插入图片描述

实时计算的定义

这部分主要会介绍实时系统中的关键术语、理解实时系统时的两个注意事项以及实时系统的分类[1]。

关键术语

首先介绍实时系统中的几个关键术语,对于从概念上直观了解实时系统的特点还是有帮助的。

  • Determinism: 给定一个已知输入,一个确定性系统的输出永远都是相同的,而非确定性系统的输出则可能存在随机变化。
  • Deadline: 一个特定任务必须在 deadline 规定的有限时间窗口内完成
  • Quality of Service: 描述网络的整体性能,包括:带宽、吞吐量、可用性、抖动率、时延、错误率等

注意事项

这里需要注意的有两点:

  1. 实时系统经常被拿来与低延时(low-latency)系统相关联,确实很多实施应用同时也是低延时应用,但是实时系统并不是定义为低延时的,而是确定性调度:系统必须保证在特定的时间完成特定的任务。因此在编写实时应用时,我们需要对任务的执行延时进行多次测量,然后为任务设置一个合适的最大可允许延时
  2. 一个实时系统不仅需要底层操作系统是实时的,也需要用户代码的执行也是实时的,两者缺一不可

系统分类

对于实时性的不同要求,可以分为这么几种实时系统:

  1. 硬实时(hard real-time)系统:硬实时系统有着一系列严格的 deadline,错过一个 deadline 就被认为是系统崩溃。典型例子包括:飞机自动巡航系统、汽车安全气囊系统
  2. 软实时(soft real-time)系统:软实时系统会尽力满足 deadline,但错过一个 deadline 不会导致系统崩溃。典型例子是娱乐直播应用,即使网络延时导致丢帧也不会太大影响
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值