嵌入式开发工程师笔试面试指南-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。