前言

  Linux与RTOS是校招八股的时候很喜欢考察的知识,在这里并没有把两个操作系统完全的独立开去讲,放在一起对比或许可能加深印象。我们讲Linux的内核有五部分组成:进程调度、内存管理、文件系统、网络接口、进程间通信,所以我也将从这五方面出发 + 中断管理去对比和RTOS的不同。本篇只是一个开始的介绍。

  1. RTOS是什么?和前后台程序的区别是什么?
  • 前后台程序: 前台就是中断 后台就是while循环。 整个系统的结构简单,但是对时间敏感的任务相应较差。比如在中断响应结束后想要快速执行某项任务也得等while循环到
  • 实时操作系统:是一种专门设计用于实时应用程序的操作系统。实时应用程序需要在特定的时间约束内对事件作出快速响应,因此RTOS旨在提供可靠、可预测的系统响应性能
  • 实时操作系统的特点就是:确定性:(能在确定时间完成指定任务) / 可预测性 / 高可靠性
  1. 如何移植FreeRTOS?
  • sysTickHandler PendSVHandler 与 SVCHandler 的移植
    sysTickHandler : 任务调度 延时任务处理
    PendSVHandler : 任务切换 堆栈的保存
    SVCHandler : FreeRTOS中用来进入第一个任务
  • 选择一种内存管理算法
    后面会细讲
  • FreeRTOSConfig.h的配置
    使能什么调度原理
    CPU的时钟频率
    sysTickHandler调用的频率
    受FreeRTOS管理中断的
  1. RTOS的启动流程
  • 4.1首先是裸机上电后的启动流程

    • step1 给SP指针和PC指针赋值 PC指针指向Rest_Handler
        cortex-M3规定 起始地址必须存放堆顶指针 第二个地址是复位中断向量入口地址,因为启动的时候会从0x00000000取出值传给SP指针 0x00000004的值赋给PC指针

      • SP指针的值是怎么出现在bin文件开头?
        来自startup.s中这样定义的段,这个段会在链接过程放在bin文件的开头
        在这里插入图片描述

      • ResetHandler是谁写的
        也在startup.s中
        在这里插入图片描述

    • step2:执行Rest_Handler

      • 2.1 执行SystemInit
        初始化时钟这个核心外设
      • 2.2 执行__main函数
        主要是用来初始化程序运行必要的堆/栈环境 把bin文件中的DATA段搬到内存,清空ZI段,最终跳转main函数–这是直接用汇编写的
  • 4.2main函数创建开始任务 开启任务调度函数vTaskStartScheduler();

  • 4.3vTaskStartScheduler()做了什么事情?

    • 创建空闲任务线程
    • 创建定时器服务任务线程
    • 设置PendSV 和 sysTick优先级为最低
    • 初始化一些全局变量,设置调度器状态为Ture
    • 初始化时钟节拍计数器、初始化临界区嵌套计数器,如果ARM内核支持FPU,还会使能FPU
    • 启动第一个任务–通过使能SVC异常
    • 通过SVCHandler跳转第一个任务
  1. Linux的启动流程
    5会放在一个专门的篇章—启动与升级篇去讲
  2. 硬实时与软实时的区别
    硬实时严格限定在规定时间完成任务
    软实时允许出现一定的时间偏差,在随着时间偏差的增大 整个系统的正确性就开始了下滑
  3. RTOS和Linux的区别?
    关于这个问题 我希望后面把五个Linux内核子系统讲清楚之后,就明了了
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐