当前位置: 首页 > article >正文

嵌入式八股RTOS与Linux---前言篇

前言

  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内核子系统讲清楚之后,就明了了

http://www.kler.cn/a/589866.html

相关文章:

  • MySQL InnoDB引擎的锁机制详解
  • OceanBase 用户问题精选答疑:OceanBase 版本升级解析
  • 电机控制常见面试问题(十五)
  • 算法-除自身以外数组的乘积
  • 美容院如何通过数据分析降低顾客流失率
  • Apache Shiro 使用教程
  • 拥有一台云服务器能做什么呢?
  • stm32week7
  • AMBA-CHI协议详解(二十二)
  • 【最大异或和——可持久化Trie】
  • STM32输入捕获采集超声波模块HC-SR04响应的高电平
  • 自动化APP测试APPium的元素等待
  • Django Rest Framework 创建纯净版Django项目部署DRF
  • Android Fresco 框架缓存模块源码深度剖析(二)
  • 爬虫代码中需要设置哪些HTTP头部信息?
  • 在遇见— 再遇见
  • docker入门篇
  • Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(一)
  • WPF窗口读取、显示、修改、另存excel文件——CAD c#二次开发
  • wordpress导入mysql数据库文件的方法及注意事项