首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MPC5554板不需要实时操作系统?它有内置的操作系统吗?

为什么MPC5554板不需要实时操作系统?它有内置的操作系统吗?
EN

Stack Overflow用户
提问于 2018-01-30 17:01:59
回答 2查看 204关注 0票数 0

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

我明白RTOS有内存管理、任务调度功能,那么这些功能是由are 5554的固件完成的吗?

这些板上有RTOS的供应商,所以我想知道它们需要什么样的应用程序?

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

如果我们把一个RTOS放在上面,那不是和内置的操作系统有冲突吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-30 17:46:12

没有内置的操作系统--你为什么要假设这一点?

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

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

板制造商可以为一个或多个特定的RTOS提供板支持包,但同样地,BSP (或HAL或驱动程序库)可能仅由裸金属或与RTOS无关的设备驱动程序组成。通常是由开发人员集成RTOS、设备驱动程序和中间件(如文件系统和网络)等,它们可能来自单个或多个供应商。你必须明白,许多(或者说大多数)开发人员将围绕sich设计自己的电路板,而不是使用COTS硬件,因此不可能有一刀切的解决方案,相反,嵌入式开发更倾向于采用组件化的方法。

票数 3
EN

Stack Overflow用户

发布于 2018-02-18 04:22:53

克利福已经把钉子打在头上了。根据你想要完成的任务的复杂性,你可能想重新考虑你到底需要什么。如果您对RTOS的唯一兴趣是基于“实时”部分,那么创建您自己的小中断驱动裸金属应用程序可能会更容易(也更便宜)。一般来说,我发现如果性能约束是您的主要关注点,那么更少的抽象更好。

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

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

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

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

代码语言:javascript
复制
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驱动的“快速任务”(通常在100到1ms之间)+一个软件中断驱动的“正常任务”,它运行高级控制逻辑,通常是由Simulink模型生成的。不用说,我们对BSP和驱动程序级代码进行了大量重用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48526786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档