嵌入式开发工程师笔试面试指南-RTOS

1 前后台程序与实时操作系统的区别是什么?

  • 前后台程序:在前后台系统中,通常只有一个后台任务和一个前台任务。前台任务响应中断或事件,而后台任务则在没有事件时运行。整个系统结构简单,但对时间敏感的任务响应较差。
  • 实时操作系统:在实时操作系统(RTOS)中,多个任务可以被调度,系统通过任务调度器管理任务的执行顺序。RTOS可以保证高优先级任务得到及时的处理,更适合复杂系统中的实时响应需求。

2 实时系统的基本特性有哪些?

  • 确定性:系统能够在确定的时间内完成指定任务,确保任务按时完成。
  • 可预测性:系统能够预测在特定条件下的行为,保证在任何情况下系统都能做出可预见的响应。
  • 高可靠性:系统能够长时间运行且不出错,尤其在关键应用中,可靠性至关重要。

3 什么是不可剥夺型内核?它的特点是什么?

不可剥夺型内核:任务一旦获得CPU资源,就会持续运行直到它自愿放弃控制权(例如任务完成或主动让出)。这种内核简单且容易实现,但响应性较差,容易引发优先级反转问题。

可剥夺型内核的定义及适用场景是什么?

可剥夺型内核:任务在运行时可以被更高优先级的任务打断,从而提高系统的响应能力。适用于需要快速响应外部事件且多任务并行处理的实时系统中。

4 什么是可重入型函数?它有什么特点?

可重入型函数:指在任何时刻被多个任务并发调用时都能正确执行的函数。特点是:

不使用静态或全局变量。

不依赖于单独的资源或使用互斥机制保护共享资源。

使用可剥夺型内核时,为什么不应直接使用不可重入型函数?

在可剥夺型内核中,不同任务可能会同时调用同一个函数。如果该函数是不可重入的,会导致任务间数据共享和竞争,进而引发未定义行为或数据损坏。

5 为什么应用程序一定要使用空闲任务?

空闲任务:空闲任务是RTOS内核自带的最低优先级任务。当没有其他任务执行时,调度器会运行空闲任务。空闲任务的主要功能是进行系统维护,如回收堆内存、低功耗模式等。确保系统资源得到有效管理。

volatile关键字的作用是什么?在什么情况下需要使用?

volatile:用于告知编译器不要对该变量进行优化,每次访问都要从内存读取。通常用于访问硬件寄存器、信号量、或者被多个任务或中断处理程序修改的变量。

6 变量声明时使用volatile修饰的情况有哪些?

硬件寄存器映射的变量。

可能在中断程序中改变的变量。

多任务环境下,任务之间共享的全局变量。

7 一个参数可以同时是const和volatile吗?为什么?

可以。const表示该参数不能被程序修改,而volatile表示每次访问该变量时都要重新读取。典型应用是只读的硬件寄存器,它们的值可能会随时改变,但程序不能修改它们。

8 一个指针可以是volatile吗?请解释。

可以。volatile修饰指针时,表示指针本身所指向的地址是不可预测的。编译器不能优化指针的解引用操作,每次都需要重新读取。

*9 函数int square(volatile int ptr)能实现预期目标吗?为什么?

能实现预期目标。volatile确保在每次计算时都重新读取ptr的值,避免编译器优化掉对ptr的访问,保证函数每次都使用最新的值来计算平方。

10 临界区和临界资源的定义是什么?

临界区:指访问共享资源的代码段,必须保证一次只允许一个任务进入,以防止数据竞争。

临界资源:被多个任务共享且可能引发竞争的资源,访问它时需要保护机制(如互斥锁)。

11 什么是原子操作?原子性如何影响临界资源的保护?

原子操作:指不可被中断的操作,能够一次性完成。原子操作保证在多任务环境中不引发竞争,从而保护临界资源。

12 如何通过关中断来保护临界资源?

自旋锁:在等待锁释放时,任务会忙等待(不断检查锁的状态),适用于短时间锁定的场景,避免任务切换带来的开销。

13 死锁的概念是什么?如何避免死锁?

死锁:指多个任务互相等待对方释放资源,从而都无法继续执行。避免死锁的措施包括:按固定顺序请求资源、使用超时机制、或者使用死锁检测机制。

14 uCOS操作系统中的任务是如何组成的?

uCOS中的任务由任务控制块(TCB)、堆栈空间、任务代码和任务状态组成。TCB保存任务的优先级、状态、堆栈指针等信息。

15 什么是空任务控制块链表?它与任务控制块链表有什么区别?

空任务控制块链表:保存系统中未使用的任务控制块。任务控制块链表则保存当前正在运行的或等待运行的任务控制块。

16 uCOS的启动过程是怎样的?

uCOS启动过程包括:

1 系统初始化,创建任务控制块和堆栈。

2 创建空闲任务和其他应用任务。

3 启动任务调度器,开始调度任务。

17 任务的五种状态分别是什么?

就绪态:任务可以立即执行。

运行态:任务正在执行。

阻塞态:任务等待资源或事件。

挂起态:任务被挂起,暂时不会执行。

终止态:任务已完成或被删除。

18 FreeRTOS的调度方式是什么?

FreeRTOS采用优先级抢占调度方式,最高优先级的任务会被立即调度执行。也支持时间片轮转调度,以在同优先级任务间分配CPU时间。

19 FreeRTOS的任务栈是如何设定的?参考依据是什么?

任务栈的大小在创建任务时设定,依据任务所需的最大栈空间(包括局部变量、函数调用深度等)来设置。如果栈空间不足,可能导致栈溢出和不可预测的行为。

20 FreeRTOS中使用的IPC通信方式有哪些?

队列(Queue):用于任务间或任务与中断间传递数据。

信号量(Semaphore):用于同步任务或保护共享资源。

互斥锁(Mutex):用于任务间互斥访问资源。

事件组(Event Group):用于任务间的多条件同步。

21 操作系统采用缓冲技术的目的是什么?

缓冲技术通过暂时存储数据,减少I/O操作的频率,从而提高系统性能和资源利用率。

22 FreeRTOS移植到哪些平台,移植过程占用哪些硬件资源?

FreeRTOS可以移植到多种微控制器平台,如ARM Cortex-M、AVR、PIC等。移植过程中,主要占用的硬件资源包括:

内存:任务堆栈、任务控制块和系统堆栈。

处理器时间:用于任务调度和上下文切换。

定时器:用于时间片调度和定时操作。

#rtos##嵌入式#

该专栏面向嵌入式开发工程师,包括C语言、C++,操作系统,ARM架构、RTOS、Linux基础、Linux驱动、Linux系统移植、计算机网络、数据结构与算法、5篇面试题目、HR面试常见问题汇总和嵌入式面试简历模板等18篇文章。超全的嵌入式软件工程师笔试面试题目和高频知识点总结!招聘so easy。

全部评论

相关推荐

野猪不是猪🐗:把你的学校加黑,加粗,斜体,下划线,描边,内阴影,内发光,投影,外发光,再上渐变色,居中,放大到最大字号,再把简历里其它内容删了,就行了
点赞 评论 收藏
分享
Cassifa:发的字比你都多的一律视为骗子或者想白嫖压榨实习生的
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务