Embedded 为什么';MPC5554板是否需要RTOS?它有内置的操作系统吗?

Embedded 为什么';MPC5554板是否需要RTOS?它有内置的操作系统吗?,embedded,real-time,rtos,Embedded,Real Time,Rtos,我在看MPC5554板的参考手册,没有提到使用的任何操作系统(内核)。应用程序可以在不使用该板上任何外部操作系统的情况下运行 我知道RTOS具有内存管理、任务调度功能,那么这些功能是由MPC5554内置固件完成的吗 这些板有RTO供应商,所以我想知道在什么应用程序中需要它们 RTOS仅仅是董事会级实现之上的另一种抽象吗 如果我们将RTOS放在上面,这会不会与内置操作系统发生冲突?没有内置操作系统-你为什么会这样认为 许多嵌入式应用程序在没有操作系统(RTO或其他)的情况下运行裸机,但无论如何,R

我在看MPC5554板的参考手册,没有提到使用的任何操作系统(内核)。应用程序可以在不使用该板上任何外部操作系统的情况下运行

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

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

RTOS仅仅是董事会级实现之上的另一种抽象吗


如果我们将RTOS放在上面,这会不会与内置操作系统发生冲突?

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

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

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


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

没有内置操作系统-您为什么会这样认为

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

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


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

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

根据您提出问题的方式,我假设您正在查看一个评估板或开发工具包,其微处理器为MPC5554,在这种情况下,您可能已经有了一些基本的启动代码,用于设置内存控制器和一些外围设备(大多数开发工具包或IDE都附带了一些可以重用的示例代码)

一个简单的应用程序可能会执行以下操作:

  • 初始化运行时环境(MMU、INTC、FMPLL)
  • 初始化您希望使用的外围设备,例如ADC、GPIO、SPI等(如果您有任何需要EBI的外部外围设备,这可能会变得非常复杂)
  • 初始化EMIO以生成高优先级的定时中断(即主处理任务循环)
我所看到的典型工作方式是,一旦上述所有初始化完成,您的主应用程序线程将运行到一个无限循环中,您可以将其用作后台任务来执行垃圾收集或一些非时间关键型故障检测。然后,在您创建的定时中断的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和驱动程序级代码进行了大量重用。

Clifford已经一针见血了。根据您希望完成的任务的复杂性,您可能需要重新考虑您到底需要什么。如果您只对RTOS基于“实时”部分,那么它很可能是b