嵌入式八股-FreeRTOS面试30题(20240814)

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

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

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

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

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

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

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

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

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

  • 可重入型函数:指在任何时刻被多个任务并发调用时都能正确执行的函数。特点是:
    • 不使用静态或全局变量。
    • 不依赖于单独的资源或使用互斥机制保护共享资源。

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

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

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

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

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

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

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

  • 硬件寄存器映射的变量。
  • 可能在中断程序中改变的变量。
  • 多任务环境下,任务之间共享的全局变量。

10. 一个参数可以同时是constvolatile吗?为什么?

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

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

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

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

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

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

  • 临界区:指访问共享资源的代码段,必须保证一次只允许一个任务进入,以防止数据竞争。
  • 临界资源:被多个任务共享且可能引发竞争的资源,访问它时需要保护机制(如互斥锁)。

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

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

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

关中断可以阻止中断处理程序打断当前任务,从而防止在访问临界资源时发生竞争。但关中断的范围和时间要控制得当,否则会影响系统的实时性。

16. 什么是自旋锁?它的主要用途是什么?

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

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

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

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

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

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

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

20. uCOS的启动过程是怎样的?

uCOS启动过程包括:

  1. 系统初始化,创建任务控制块和堆栈。
  2. 创建空闲任务和其他应用任务。
  3. 启动任务调度器,开始调度任务。

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

  • 就绪态:任务可以立即执行。
  • 运行态:任务正在执行。
  • 阻塞态:任务等待资源或事件。
  • 挂起态:任务被挂起,暂时不会执行。
  • 终止态:任务已完成或被删除。

22. FreeRTOS的调度方式是什么?

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

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

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

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

  • 队列(Queue):用于任务间或任务与中断间传递数据。
  • 信号量(Semaphore):用于同步任务或保护共享资源。
  • 互斥锁(Mutex):用于任务间互斥访问资源。
  • 事件组(Event Group):用于任务间的多条件同步。

25. Linux中FTP服务和SMTP服务的默认端口分别是多少?

  • FTP服务:默认端口是21。
  • SMTP服务:默认端口是25。

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

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

27. 红黑树与AVL树的主要区别是什么?

  • 红黑树:通过颜色属性(红/黑)保证在插入或删除后树的高度近似平衡,插入和删除操作更快。
  • AVL树:严格平衡二叉树,高度平衡因子为-1、0、1,查询性能稳定但插入和删除操作可能更复杂。

28. Servlet的生命周期可以分为哪几个阶段?

  • 加载和实例化:Servlet类被加载并实例化。
  • 初始化:调用init()方法,Servlet被初始化。
  • 请求处理:每次请求调用service()方法。
  • **销

毁**:调用destroy()方法,Servlet被销毁。

29. Linux执行ls命令时,会引起哪些系统调用?

执行ls命令时,可能涉及的系统调用包括open()read()write()getdents()(读取目录内容)、close()等。

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

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

  • 内存:任务堆栈、任务控制块和系统堆栈。
  • 处理器时间:用于任务调度和上下文切换。
  • 定时器:用于时间片调度和定时操作。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sagima_sdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值