为啥 MPC5554 板不需要 RTOS?它是不是带有内置操作系统?

Posted

技术标签:

【中文标题】为啥 MPC5554 板不需要 RTOS?它是不是带有内置操作系统?【英文标题】:Why doesn't MPC5554 board requires a RTOS? Does it come with a built-in OS?为什么 MPC5554 板不需要 RTOS?它是否带有内置操作系统? 【发布时间】:2018-01-30 17:01:59 【问题描述】:

我正在查看 MPC5554 板的参考手册,没有提到使用的任何操作系统(内核)。无需使用此板上的任何外部操作系统即可运行应用程序。

我知道RTOS有内存管理、任务调度功能,那么这些功能是MPC5554内置固件完成的吗?

这些板有 RTOS 供应商,所以我想知道它们在什么应用中需要?

RTOS 是否意味着只是板级实现之上的另一个抽象?

如果我们将 RTOS 放在上面,那会不会与内置 OS 冲突?

【问题讨论】:

MPC5554 仅指微控制器,而非特定板。 【参考方案1】:

没有内置操作系统 - 你为什么会这么认为?

许多嵌入式应用程序在没有操作系统(RTOS 或其他)的情况下运行裸机,但无论如何,选择 RTOS 是开发人员的决定,而不是电路板制造商的决定。

RTOS 从根本上提供调度、同步、进程间通信和定时服务。可以为具有 MMU 的设备提供内存管理,但这不是给定的。裸机应用程序可以建立 C 运行时环境并引导至 main(),无需调度或 IPC 等。在大多数简单的 RTOS 中,系统引导至 main(),RTOS 被初始化并启动,而不是操作系统启动`main() 就像在 GPOS 中发生的那样。

电路板制造商可以为一个或多个特定 RTOS 提供电路板支持包,但同样 BSP(或 HAL 或驱动程序库)可能仅包含裸机或独立于 RTOS 的设备驱动程序.通常由开发人员集成 RTOS、设备驱动程序和中间件(例如文件系统和网络)等,这些可能来自单个或多个供应商。您必须了解,许多(或者可能是大多数)开发人员将围绕微控制器设计自己的电路板,而不是使用 COTS 硬件,因此不可能有万能的解决方案,相反,嵌入式开发往往是一种更多的零件套件方法。

【讨论】:

谢谢,不使用RTOS能否实现实时性能? @user9237296 :当然可以; RTOS 促进并支持实现实时截止日期,但这可以通过其他方式实现。对于中等复杂或严格的要求,RTOS 可以使设计更简单、更易于维护。系统需求增长或关键时间变得更加关键到您可能希望在最初可能不需要 RTOS 的情况下开始使用 RTOS 的情况可能并不少见。如果没有 RTOS,即使是不相关的代码也会影响维护中的时间关键代码,而 RTOS 可以保护您免受这种影响。 @user9237296 RTOS 只是在处理器上运行的程序,如果 RTOS 可以做到,其他程序也可以做到。如果您正在做一些简单的事情,则不需要 RTOS 的开销和体积。在您决定是否创建 RTOS 以避免 RTOS 之前,这取决于您需要多少以及您要走多远。 话虽如此,MPC55/56 是非常复杂的野兽。我已经为 MPC56 编写了一个裸机应用程序,这非常痛苦,因为我必须编写所有内容,包括 MMU 设置等。最后,该应用程序的行为非常像 RTOS,具有简单的实时调度程序等。回想起来,我不会将这部分用于裸机应用程序,因为我最终大多是重新发明***。【参考方案2】:

克利福德已经一针见血了。根据您希望完成的任务的复杂性,您可能需要重新考虑您到底需要什么。如果您对 RTOS 的唯一兴趣是基于“实时”部分,那么创建自己的小型中断驱动的裸机应用程序可能会更容易(也更便宜)。一般来说,我发现如果性能限制是您主要关心的问题,那么抽象越少越好。

根据您提出问题的方式,我将假设您正在查看以 MPC5554 作为其微控制器的评估板或开发套件,在这种情况下,您可能已经拥有一些基本的启动代码来执行操作比如设置内存控制器和一些外围设备(大多数开发套件或 IDE 都带有一些可以重用的示例代码)。

一个简单的应用程序可能会做以下事情:

初始化运行时环境(MMU、INTC、FMPLL) 初始化您希望使用的外围设备,例如。 ADC、GPIO、SPI 等(如果您有任何需要 EBI 的外围设备,这可能会变得非常复杂) 初始化 eMios 以生成具有高优先级的定时中断(即您的主处理任务循环)

我看到这通常起作用的方式是,一旦完成上述所有初始化,您的主应用程序线程就会进入无限循环,您可以将其用作后台任务来执行垃圾收集或一些非时间-关键故障检测。然后,在您创建的定时中断的 ISR 中,您实现一个基本调度程序来执行驱动程序级处理(例如触发/读取 ADC、读取/写入 GPIO、启动任何 IPC 事务等)。一个非常基本的概念可能如下所示:

void fastTaskISR()

    static uint8 frameCount = 1;

    ...

    switch(frameCount)
    
        case 1:
            //Task 1
            break;
        case 2:
            //Task 2
            break;
        case 3:
            //Task 3
            break;
        case 4:
            //Task 4
            break;
        case 5:
            //Task 5
            break;
        default:
            //Default case for robustness. Error.
            break;
    

    frameCount++;
    if(frameCount > 5)
    
        frameCount = 1;
    

    ...

您可以选择使用其中一项计划任务来生成软件中断,然后该中断可用于运行一些较慢的任务或更复杂的控制逻辑。在我工作的地方,这是一个久经考验的真正公式:一个 eMIOS 驱动的“快速任务”(通常在 100us 和 1ms 之间)+一个软件中断驱动的“正常任务”,它运行更高级别的控制逻辑,通常由 Simulink 模型生成.不用说,我们对 BSP 和驱动程序级代码做了很多重用。

【讨论】:

以上是关于为啥 MPC5554 板不需要 RTOS?它是不是带有内置操作系统?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 RTOS 只用 c 编码?

Xcode故事板不显示场景

esp32插上面包板不识别

买了数位板不知道怎么用

单片机就那点资源,为啥还要用RTOS?

Android emulator-5554 离线