当前位置: 华文世界 > 数码

为什么MCU一般跑RTOS,SoC一般跑嵌入式Linux?

2024-01-11数码

这篇文章很受欢迎:CPU、SoC、MCU什么区别

MCU(Microcontroller Unit)和SoC(System on a Chip)是两种不同的嵌入式系统,它们通常运行不同类型的操作系统,具体取决于其应用场景和硬件资源。

  1. MCU(Microcontroller Unit):

  • 类型: MCU是一种单一芯片集成了处理器核心、内存、外设和其他基本功能的微控制器。

  • 应用场景: 常用于简单、实时性要求较高的嵌入式系统,例如传感器控制、嵌入式设备等。

  • 操作系统: 多数情况下,MCU并不运行传统的操作系统,而是使用实时操作系统(RTOS)或裸机编程。RTOS可以提供实时性、轻量级的任务调度和事件处理。

  • SoC(System on a Chip):

  • 类型: SoC是集成了处理器核心、内存、外设以及可能的其他处理单元(如GPU、DSP等)的复杂芯片。

  • 应用场景: 通常用于更复杂、多用途的嵌入式系统,例如智能手机、嵌入式计算机、嵌入式系统-on-a-chip等。

  • 操作系统: SoC可以运行更复杂的操作系统,包括Linux、Android、FreeRTOS等。具体选择取决于应用需求和硬件资源。在一些资源有限的情况下,也可以选择裸机编程或轻量级RTOS。

  • 总的来说,MCU更倾向于在实时性要求高、资源有限的场景下使用RTOS或者裸机编程,而SoC则具有更大的灵活性,可以运行更复杂的操作系统,适用于多用途的嵌入式应用。选择操作系统的决策通常由具体的应用需求和硬件资源决定。

    1、MCU是选择跑裸机,还是跑RTOS?

    选择MCU跑裸机(Bare-Metal)还是跑RTOS(Real-Time Operating System)取决于具体的应用需求和项目要求。每种选择都有其优势和适用场景。

    裸机编程:

    1. 资源效率: 裸机编程通常更轻量级,不需要额外的操作系统开销,因此在资源有限的嵌入式系统中可能更为合适。

    2. 实时性: 对于对实时性要求极高的应用,裸机编程可以提供更精确的控制,因为没有额外的任务调度和中断延迟。

    3. 简单性: 裸机编程相对简单,没有操作系统的复杂性,适合一些简单的控制应用,如传感器控制、定时器应用等。

    RTOS:

    1. 多任务处理: 如果应用需要同时处理多个任务,RTOS提供了任务调度和管理机制,简化了多任务并发处理。

    2. 抽象层: RTOS提供了抽象层,简化了开发者对底层硬件的操作,提高了代码的可移植性。

    3. 易维护性: RTOS可以提高代码的可维护性,通过任务划分和模块化设计,更容易理解和调试。

    4. 时间管理: 对于需要精确的时间管理和处理的应用,RTOS可以提供更可靠的时间管理和调度。

    选择的考虑因素:

    1. 应用需求: 确定应用的性质和需求,如果是简单的、实时性要求高的控制任务,裸机编程可能足够。如果需要处理多个任务或复杂的控制逻辑,RTOS可能更合适。

    2. 资源限制: 考虑硬件资源的限制,如果MCU资源非常有限,裸机编程可能更为合适。如果有足够的资源,并且希望简化开发流程,RTOS可能是一个好的选择。

    3. 开发经验: 开发者对裸机编程或RTOS的经验也是考虑的因素。对于有经验的开发者,裸机编程可能更容易上手;而对于复杂的项目,RTOS提供了更高层次的抽象,可能更容易管理。

    最终的选择应该根据具体项目的需求、开发者的技能水平以及硬件资源等因素进行权衡。在一些项目中,也可以结合裸机编程和RTOS的方式,根据具体任务的需求选择合适的策略。

    很多刚毕业进入职场的同学,由于在学校一直开发裸机,所以对RTOS有一点畏惧。其实选择FreeRTOS这样的轻量级的RTOS,给你提供了一些「武器」,对于复杂功能的开发,开发难度其实是降低的。

    2、为什么大多数SoC选择Linux作为操作系统

    大多数SoC选择Linux作为操作系统的原因有多个,其中一些关键因素包括:

    1. 广泛的支持: Linux是一个开源操作系统,得到了全球广泛的支持和社区参与。这使得大多数SoC供应商都能够轻松地为其硬件提供Linux内核和相关驱动程序。

    2. 丰富的软件生态系统: Linux拥有庞大而丰富的软件生态系统,包括开源工具、库、应用程序等。这使得开发者能够更容易地访问和利用各种现有的软件资源,从而加速应用程序的开发过程。

    3. 多用户支持: Linux是一个多用户、多任务的操作系统,适用于需要支持多个用户同时运行多个任务的嵌入式应用场景。这对于一些复杂的SoC,如智能手机、嵌入式计算机等来说是非常重要的特性。

    4. 强大的网络支持: Linux内核支持丰富的网络协议和功能,适用于需要网络连接的嵌入式系统。这对于连接互联网、进行远程管理和数据传输的应用非常重要。

    5. 开放源代码: Linux的开放源代码模型使得SoC制造商可以根据自己的需求进行定制和优化。这种开放性有助于适应各种硬件架构和满足不同市场需求。

    6. 稳定性和可靠性: Linux经过长时间的发展和测试,已经变得非常稳定和可靠。这对于一些对系统稳定性要求较高的应用场景是至关重要的。

    7. 社区支持和更新: Linux有庞大的社区支持,新的内核版本和补丁定期发布,这意味着SoC制造商和开发者可以获得最新的功能、安全性和性能优化。

    综合这些因素,Linux成为了许多SoC的首选操作系统,特别是在需要处理较为复杂的任务、具备丰富的软硬件生态系统、要求网络连接和多用户支持的场景下。然而,也有一些资源有限或对实时性要求较高的应用场景,可能会选择其他操作系统、包括安卓或者RTOS。

    还有些芯片,主要针对的就是Linux系统的外设,不考虑MCU的外设的场景。比如一些高通的wifi芯片,只支持linux的驱动移植。所以你在没有芯片厂家支持的前提下,是没法把它用在非linux的情况的。

    3、关于RT-Linux

    RT-Linux是一个基于Linux内核的实时操作系统(RTOS),它通过对Linux内核的修改和扩展,使其具备实时性能。RT-Linux的目标是在维持Linux的通用性和强大性的同时,提供对实时任务的支持,使得它可以在需要高实时性的应用中使用。

    以下是RT-Linux的一些主要特点和介绍:

    1. 实时性: RT-Linux致力于提供可预测、可控的实时性能。通过引入实时调度器和中断处理机制,它能够确保任务在指定的时间内得到执行,满足实时系统的需求。

    2. Linux内核扩展: RT-Linux是在Linux内核的基础上进行扩展和修改而来的。它保留了Linux的通用性和丰富的功能,同时增加了实时任务调度器、硬实时中断等实时特性。

    3. 实时调度器: RT-Linux引入了实时调度器,允许任务按照优先级和截止时间进行调度。这有助于确保实时任务按时执行,而不受非实时任务的干扰。

    4. 硬实时中断: RT-Linux提供了硬实时中断机制,以确保对于一些对时间敏感的任务,能够以极低的延迟进行响应。

    5. POSIX兼容性: RT-Linux保持了对POSIX标准的兼容性,这使得它与许多现有的实时应用程序和开发工具更加兼容。

    6. 开源: RT-Linux是开源软件,基于GPL许可证发布。这使得开发者可以自由访问、修改和分发源代码。

    7. 适用范围: RT-Linux适用于需要Linux通用性和实时性能的应用,如工控系统、嵌入式控制系统、通信系统等。

    RT-Linux有几个主要的版本,其中一些较为知名的版本包括:

    1. RTLinux/GPL: 最早的RT-Linux版本,由RTLinux公司(现为Wind River Systems)开发。RTLinux/GPL是一个实时扩展模块,通过将实时调度器插入Linux内核,实现硬实时性。

    2. RTLinuxFree: 是RT-Linux/GPL的一个开源版本,其目标是提供对Linux内核的实时扩展,以增强Linux在实时嵌入式应用中的可用性。

    3. RTAI(Real-Time Application Interface): RTAI是一个独立的实时扩展,提供了对Linux内核的实时支持。RTAI与RTLinux有类似的目标,但其实现方式和架构略有不同。

    4. Xenomai: Xenomai是一个实时框架,通过在Linux系统上运行一个实时内核(Cobalt)来提供硬实时性。Xenomai不同于RTLinux的内核插件方式,而是在用户空间运行实时任务。

    5. PREEMPT-RT: PREEMPT-RT不是RT-Linux的特定版本,而是一个用于向Linux内核添加抢占性的实时扩展。它通过对Linux内核进行修改,引入了更多的抢占性,以提高Linux的实时性能。

    这些版本各自有不同的设计和实现方式,开发者在选择时应根据项目的需求、硬件平台和个人经验来确定最适合的版本。当前的实时Linux解决方案领域仍在发展,开发者可以根据项目的具体情况选择适当的解决方案。

    4、为什么裸机程序又被称作前后台

    裸机系统通常分成 轮询系统 前后台系统

    轮询系统

    轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情,大概的伪代码看下方代码块轮询系统是一种非常简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情。在代码清单 中,如果只是实现 LED 翻转,串口输出,液晶显示等

    这些操作,那么使用轮询系统将会非常完美。但是,如果加入了按键操作等需要检测外部信号的事件,用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。

    前后台系统

    相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台,main 函数里面的无限循环我们称为后台。

    在顺序执行后台程序的时候,如果有中断来临,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序里面标记事件,如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多,则返回到后台程序里面处理。虽然事件的响应和处理是分开了,但是事件的处理还是在后台里面顺序执行的,但相比轮询系统,前后台系统确保了事件不会丢失,再加上中断具有可嵌套的功能,这可以大大的提高程序的实时响应能力。在大多数的小型项目中,前后台系统运用的好。

    补充上一次文章发布后,有非信息技术专业的朋友问的问题:

    5、MCU就是单片机么?

    MCU(Microcontroller Unit)通常指的是微控制器单元,而微控制器(Microcontroller)通常被称为单片机。这两个术语通常在嵌入式系统领域中被互换使用。

    一个单片机(Microcontroller)是一个集成了处理器核心(CPU)、内存(RAM、Flash等)、输入/输出接口(I/O)、定时器、计数器、通信接口等多个功能模块的芯片。单片机通常被设计用于控制嵌入式系统中的各种任务,如传感器控制、数据采集、执行特定的控制算法等。

    MCU(Microcontroller Unit)则是一个更广义的术语,它指的是包含处理器核心、内存和外设的整个微控制器系统。在实际使用中,这两个术语的区别并不是非常严格,经常被交替使用,而单片机更常用于指代嵌入式系统中的微控制器。

    前期阅读

    CPU、SoC、MCU什么区别

    国产SoC厂家

    一阵腥风血雨的收购之后,MCU哪家强?