【RTOS】

【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM

【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym

【嵌入式八股】三、硬件篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM

【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0

RTOS

基础

01.实时系统和linux系统有什么区别

实时操作系统设计以实时性为前提进行设计,高优先级任务一定会优先执行。实时操作系统的主要目标是创造一个可预见的、确定的环境。所有的任务从它被创建开始它就是可预见的,比如它必须在截止时间内返回结果。一个实时操作系统可以保证完成计算的最坏情况下的时间是预先已知的,并且完成计算的时间不会超过限制。所以可预见性和确定性是实时操作系统最突出的特点。

实时操作系统中

  • 多个任务按优先级执行,高优先级一定会优先运行
  • 多种中断优先级,中断嵌套

而非实时操作系统以保证系统性能为前提进行设计。如Linux系统中

  • 任务过多,会有不同的调度机制,比如防止饿死

  • 中断分上下文,中断上文按顺序执行,不能抢占

02.Linux为什么不能称为实时操作系统?

Linux是一个开放源代码的操作系统,其设计目标主要是通用性和灵活性。尽管Linux具有许多强大的功能和广泛的应用领域,但它通常不被认为是一个真正的实时操作系统(RTOS)。

实时操作系统的主要特点是能够以可预测的时间范围内对事件作出响应。这对于需要在严格的时间限制下进行任务处理的应用程序非常重要,例如航空航天、工业自动化和医疗设备等。

然而,Linux内核的设计目标是提供一个通用的操作系统,适用于各种硬件平台和应用场景。为了实现这个目标,Linux内核中包含了许多复杂的调度算法和功能,如抢占式调度和虚拟内存管理。这些功能使得Linux能够更好地处理多任务、多用户环境下的需求,但也导致了对实时性的牺牲。

实时性需要确保任务在特定时间内得到执行,而Linux内核的调度机制并不能提供对任务的绝对实时保证。它的调度策略是基于优先级和时间片轮转,这意味着较低优先级的任务可能会经历一定的延迟,并且高优先级任务无法保证获得即时的响应

另外,Linux具有较高的系统延迟,这意味着任务可能会在特定时间限制内无法得到及时执行。这是由于多种因素造成的,如中断处理、设备驱动程序等。

为了满足实时性要求,人们通常会选择使用专门的实时操作系统或RTOS,这些系统经过优化和特殊设计,能够提供更可靠、更精确的任务调度和响应时间。然而,Linux也提供了一些实时扩展,如PREEMPT-RT和Xenomai等,可以在某种程度上增强其实时性能,但与专门的RTOS相比还是存在差距。

03.RTOS有哪些模块?

ZYNQ-RTOS(一)从HelloWorld开始 - 知乎 (zhihu.com)

任务、队列、软件定时器、任务调度器

04.FreeRTOS四种任务状态

Running—运行态 当任务处于实际运行状态被称之为运行态,即 CPU 的使用权被这个任务占用。 Ready—就绪态 处于就绪态的任务是指那些能够运行(没有被阻塞和挂起),但是当前没有运行的任务,因为同优先级或更高优先级的任务正在运行。 Blocked—阻塞态 由于等待信号量,消息队列,事件标志组等而处于的状态被称之为阻塞态,另外任务调用延迟函数也会处于阻塞态。 Suspended—挂起态 类似阻塞态,通过调用函数 vTaskSuspend()对指定任务进行挂起,挂起后这个任务将不被执行,只有调用函数 xTaskResume()才可以将这个任务从挂起态恢复。

alt

移植

05.FreeRTOS的移植与配置以及使用。

1.1移植到哪些平台,讲讲移植过程,占用哪些硬件资源。

可以移植到多种平台,包括单片机、嵌入式处理器、微处理器等等。

1.2移植过程

  • 选择对应目标处理器架构的FreeRTOS版本。
  • 安装相应的工具链。
  • 对FreeRTOS进行配置。
  • 实现FreeRTOS底层函数。
  • 搭建FreeRTOS应用程序,实现任务调度。

1.3.占用硬件资源

移植FreeRTOS对硬件资源的占用,与具体的应用场景有关。需要根据具体应用调整FreeRTOS的配置,需要根本具体应用调整FreeRTOS的配置,如调整任务堆栈大小、内存管理配置、中断控制器等等。

06.移植FreeRTOS过程中学到了什么?有遇到什么问题吗?

在移植FreeRTOS的过程中,可能会学到以下几点:

  1. 熟悉目标平台:移植FreeRTOS需要深入了解目标平台的硬件和操作系统特性。这包括处理器架构、内存管理、中断控制器、计时器等方面的知识。
  2. 理解RTOS概念和特性:移植FreeRTOS之前,建议对实时操作系统的概念、任务调度、同步机制等方面有一定的理解。这将帮助您更好地理解FreeRTOS的工作原理和使用方法。
  3. 配置和编译:FreeRTOS提供了丰富的配置选项,可以根据目标平台的需求进行定制。学习如何正确配置和编译FreeRTOS是非常重要的一步。
  4. 硬件抽象层(HAL):在移植FreeRTOS时,通常需要实现与目标平台相关的硬件抽象层。这涉及到底层驱动程序、中断处理函数、时钟设置等方面,以适应不同的硬件环境。
  5. 调试和故障排除:移植FreeRTOS过程中,可能会遇到一些问题,如任务调度错误、内存管理问题、中断处理异常等。学习如何调试和排除这些问题是非常重要的,可以借助调试器、日志输出等工具进行故障排查。

一些常见问题包括:

  1. 中断处理:正确处理中断是移植FreeRTOS的一个重要方面。确保中断服务程序的正确实现,并与RTOS的上下文切换机制配合良好。
  2. 任务优先级:合理设置任务的优先级,以确保实时性需求得到满足。错误的任务优先级设置可能导致优先级反转、饥饿等问题。
  3. 内存管理:FreeRTOS提供了多种内存管理模式,需要根据目标平台的特点选择合适的模式并正确配置。内存管理问题可能导致内存泄漏、内存碎片等。
  4. 硬件驱动:移植FreeRTOS可能需要编写或修改与目标平台相关的硬件驱动程序。确保驱动程序的正确性和稳定性是一个挑战。
  5. 调度策略:选择合适的调度策略以满足系统的实时性要求。不同的调度策略可能需要对源码进行修改和调整。
07.FreeRTOS都需要配置哪些,中断是怎么配置的,需要注意什么?

需要配置

内存管理:需要为FreeRTOS分配一定的内存空间。

任务管理:需要配置任务的堆栈大小、优先级等。

时钟和定时器:需要配置FreeRTOS使用哪个时钟源和定时器。

信号量和队列:需要配置信号量和队列的大小和类型。

调度器配置:需要选择FreeRTOS的调度器类型和优化设置。

在配置中断时,需要首先了解目标处理器的中断控制器的工作原理和寄存器的使用。

一般,可以按照以下步骤进行中断配置。

  1. 开启中断:需要将处理器中断控制器相应的中断开关打开。

  2. 设置中断优先级:需要设置中断请求的优先级,以保证高优先级中断的及时响应。

  3. 写入中断向量表:需要在处理器的中断向量表中写入中断处理程序的地址。

配置中断时需要注意以下几点

  1. 中断控制器的操作必须是原子的,需要使用响应的临界区代码区。

  2. 不同处理器的中断控制器操作方式可能不同,需要根据具体的处理器来中断控制器的驱动程序。

  3. 中断处理程序应该简短,有效率,最好不要在中断中调用太多的函数,以免影响处理器系统的响应性能。

08.什么是任务栈? 它的大小如何决定?

使用freertos如何确定分配堆栈空间大小_51CTO博客_stm32堆栈空间大小设置

RTOS 任务栈的大小应根据任务的需求和硬件平台的限制来决定。任务栈的大小取决于以下几个因素:

  1. 任务的复杂性:任务所执行的操作越复杂,它所需要的栈空间就越大。例如,如果任务需要调用多个函数、使用大量局部变量或递归调用函数,那么任务的栈大小可能需要更大。
  2. 数据类型和数据结构:任务中使用的数据类型和数据结构也会影响栈的大小。较大的结构体、数组或指针等数据类型需要更多的栈空间来存储。
  3. 嵌套调用深度:任务中函数的嵌套调用深度也会影响栈的大小。每个函数调用都会在栈上分配一些空间,如果任务中存在较深的嵌套调用,那么栈的大小可能需要相应增加。
  4. 中断处理:如果任务需要处理中断,在中断处理程序中也需要使用栈空间。因此,需要考虑任务栈的大小以及中断处理程序栈的大小之和。
  5. 硬件平台:不同的硬件平台可能对任务栈的大小有限制。例如,某些微控制器可能只提供有限的内存用于任务栈,因此需要根据硬件规格确定任务栈的最大大小。

在确定任务栈的大小时,一般的做法是根据任务的需求进行估计,并考虑到以上因素。可以通过实验和测试来确认任务栈的大小是否足够满足任务的运行需求,以及是否会发生堆栈溢出等问题。此外,一些RTOS还提供了工具和配置选项来帮助确定任务栈的大小。

09.平时工作中任务优先级如何划分?

以下是一些常见的原则和方法来划分任务优先级:

  1. 任务分类:首先,将任务按照其性质和功能进行分类。例如,可以将任务分为实时任务和非实时任务,或者按照其处理的数据类型进行分类。
  2. 实时需求:识别并评估任务的实时需求。某些任务可能会有严格的时间限制,需要以最高优先级运行,以满足实时要求。其他任务可能具有较低的时间敏感性,可以以较低的优先级运行。
  3. 依赖关系:考虑任务之间的依赖关系。有些任务可能依赖于其他任务的结果。在这种情况下,被依赖的任务通常具有较高的优先级,以确保它们能够及时完成并提供所需的结果。
  4. 资源需求:考虑每个任务对系统资源(如处理器时间、内存、设备等)的需求。一些任务可能需要更多的资源,因此它们可能具有较高的优先级。
  5. 响应时间:评估任务对系统响应时间的要求。较紧急的任务需要更快的响应时间,因此它们通常具有更高的优先级。
  6. 公平性:确保任务之间的公平性。在划分优先级时,要尽量避免某个任务长时间占用系统资源,使其他任务无法得到执行的情况发生。
  7. 功能需求:考虑任务之间的功能需求。一些任务可能需要持续运行,而其他任务可能只需要

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

【嵌入式八股】三、硬件篇 文章被收录于专栏

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础 3.硬件篇【本专栏】 4.嵌入式Linux (建议PC端查看)

全部评论

相关推荐

浪潮 通信信息 20k
点赞 评论 收藏
转发
1 13 评论
分享
牛客网
牛客企业服务