Nucleus-SE迁移:未实现的设施和兼容性

Nucleus SE migration: Unimplemented facilities and compatibility

Nucleus SE的一个关键设计要求是与Mentor的旗舰实时操作系统产品Nucleus RTOS高度兼容。Nucleus SE有Nucleus RTOS功能的一个子集,我在本系列的所有相关场合都强调了这一点,但是在本文中,我将尝试将所有关键的差异集中在一个地方。其目的是为任何计划在两个内核之间迁移或为特定项目选择内核的人提供快速参考。

与Nucleus RTO相比,Nucleus SE除了功能有限或简化外,还设计为尽可能提高内存效率,用户可以利用大量机会进行调整。这个策略的一个关键部分是可伸缩的功能。内核功能的许多特性可以根据需要启用或禁用。显然,对于给定的实现,禁用功能会增加与Nucleus rto的不兼容性。

在Nucleus RTOS中,一个系统可以用不确定数量的内核对象构建,唯一的主要限制是可用资源(即内存)的数量。Nucleus SE对每种对象类型的限制不超过16个;一个系统可以有1到16个任务,其他类型的对象(邮箱、队列等)可以有0到16个。虽然这一限制可能会增加,但这将需要大量的工作,因为在半字节(4位)中存储对象索引的能力被广泛利用。另外,如果允许16个以上的任务,优先级调度程序很可能变得非常低效。受到这些限制的应用程序并不真正适合Nucleus SE,Nucleus RTOS可能是更好的选择。

调度员

像任何现代的实时内核一样,Nucleus RTOS有一个非常灵活的调度器,提供许多优先级(在任何给定的级别上有不确定数量的任务);以及循环调度和时间片调度的可能性。nucleusse要简单得多,它提供了四种不同的调度程序,必须在构建时选择它们:运行到完成、循环调度、时间片和优先级。没有组合调度方法的选项(即没有复合调度器)–例如,混合优先级和时间片。此外,优先级调度器只允许在每个优先级上执行一个任务-优先级级别与任务数量相同。任务的优先级在构建时是固定的,如果使用该选项,则时间片也是如此。

API调用

应用程序接口(API)是操作系统的可见“面”。毫不奇怪,在这里,RTOS核和SE核之间的差异最为明显。

Nucleus SE与Nucleus RTOS没有相同的API。然而,它的API经过精心设计,可以很容易地映射到Nucleus RTOS API的一个子集上。Nucleus rto的许可证持有者可以获得一个“包装器”(一个包含#define宏的头文件),它使映射几乎完全透明。

由于Nucleus SE API是Nucleus RTOS的一个子集,因此可能缺少一些API调用。这是事实,也是Nucleus SE设计标准的必然结果。有些API调用是不相关的,因为它们应用于不存在的功能;其他一些调用则由于一些内核对象的实现中的简化而丢失。本文的以下部分将详细介绍这些内容。

常用API函数

在Nucleus rto中,有一些API函数在许多不同类型的内核对象中是通用的,甚至是在所有类型的内核对象中都是通用的。其中一些也在Nucleus SE中实现-“reset”就是一个很好的例子。其他一些则不适用于内核对象的Nucleus SE实现。

创建和删除

在Nucleus RTOS中,所有的内核对象都是动态的,它们是根据需要创建和删除的。因此,为此提供了API调用。在Nucleus SE中,所有对象都是静态的,它们是在构建时创建的,因此不需要这样的API调用。

返回对象指针

Nucleus RTOS为内核对象使用的主标识符(句柄)是指向对象的控制块的指针,在创建对象时分配给它。因此,有一组API调用返回指向每种类型对象的指针列表。由于Nucleus SE使用一个简单的索引来标识内核对象,这样的调用是多余的。程序可以询问内核以确定配置了多少个给定对象类型的实例(使用NUSE_Mailbox_Count());如果该值为n,则对象类型的索引将从0到n-1。

广播数据

对于许多Nucleus RTOS内核对象类型(特别是邮箱、队列和管道),提供了一个“广播”API调用。这有助于向读取对象时被阻止的每个任务发送数据项。为了简单起见,Nucleus SE省略了此功能,因为访问这些对象中的数据总是在相关任务的上下文中获得的,然后释放对象;为了实现广播,还需要一个附加的标记机制。

对象特定的API函数

许多内核对象都具有非常特定于特定对象类型的API调用,并且在Nucleus rto和Nucleus SE之间有所不同。

任务

由于Nucleus RTOS调度器比Nucleus SE复杂得多,因此不需要API函数提供的许多工具:

任务先发制人姿态的改变-不受Nucleus SE支持

更改任务的优先级–优先级是在配置时使用Nucleus SE设置的,不能更改

更改任务的时间片–时间片值对于所有任务都是全局的,并在Nucleus SE中在配置时固定

终止任务–Nucleus SE不支持“已终止”任务状态

动态存储器

由于所有内容都是在Nucleus SE中静态创建的,所以不支持(或需要)动态内存。因此,不需要许多特定的API函数。

信号

Nucleus RTOS支持信号处理程序,即修改任务信号时运行的例程(类似于中断服务例程)。Nucleus SE省略了此功能,因此不需要对控制信号和注册信号处理程序的API调用。

中断

Nucleus SE对中断采取“不干涉”的态度,只需在中断服务例程中方便地执行一些API调用。因此,不需要指定内核进程中断方式的Nucleus RTOS API调用集。

诊断学

Nucleus SE的诊断设备非常简单,符合其“精益”设计,仅限于(可选)参数检查和产品版本代码报告。因此,没有实现与历史记录和断言相关联的Nucleus RTOS API调用。

驱动

Nucleus RTOS有一个定义良好的、正式的驱动程序结构,有许多与驱动程序管理相关的API函数。Nucleus SE没有这样的结构,因此不需要相关的API调用。

API调用功能

Nucleus SE功能的几个方面(以简化的方式实现)与Nucleus RTOS存在差异。这些因素中有许多会影响API调用的使用方式和可用的工具。

超时

对于Nucleus RTOS,在很多情况下,API调用可以选择挂起一个任务,等待资源的可用性——任务被阻塞。此暂停可能是不确定的,即直到资源可用为止,或者可以指定一个超时值。Nucleus SE提供阻塞API调用作为一个选项,但只能指定不确定的挂起,即调用只能包括NUSE_SUSPEND或NUSE_NO_SUSPEND,而不是超时值。这种能力可以以一种相当简单的方式添加到Nucleus SE中。

暂停命令

当使用Nucleus RTOS创建许多类型的对象时,可以指定挂起顺序。这是当资源可用时,许多被阻止的任务将恢复的顺序。有两个选项可用:先进先出(first-in-first-out),即按阻止任务的相同顺序恢复任务;或者按优先级顺序(优先级最高的任务总是先恢复)。Nucleus SE不提供这种选择。只执行优先顺序。实际上,顺序是按任务索引的,因为这不仅适用于优先级调度程序,还适用于循环调度和时间片。

对象特定功能

在某些情况下,功能会发生变化,这是特定于特定类型对象的。

信号处理程序

正如本文前面提到的,Nucleus SE中的信号实现不支持信号处理例程。

应用程序计时器参数

计时器具有初始持续时间和重新启动持续时间,并且可以在到期时选择性地执行用户指定的函数。Nucleus RTOS和Nucleus SE都支持此功能。但是,与Nucleus RTOS不同,Nucleus SE不允许在进行reset API调用时更改这些参数中的任何一个。此外,在Nucleus SE中,对过期例程的完整支持是可选的。

事件标志

对于Nucleus RTOS,可以选择“使用”事件标志。这意味着符合任务匹配条件的标志将被清除。Nucleus SE中没有提供此功能,因为通过适应满足多个任务的匹配标准的可能性,复杂性大大增加。

数据大小

与Nucleus RTOS相比,保持简单性和最小化内存使用的两个Nucleus SE设计标准导致了数据项大小的许多差异。需要注意的是,Nucleus RTOS通常使用无符号类型的数据,可能是32位;而Nucleus SE使用合理化的数据类型,如U32、U16、U8等。

邮箱

在Nucleus RTOS中,一个邮箱携带一条由四个未签名数据项组成的消息。在Nucleus SE中,邮箱携带ADDR类型的符号数据项。我认为邮箱的一个常见用途是在任务之间传递地址(指向某些数据)。

排队

在Nucleus RTOS中,队列处理一个或多个未签名数据元素的消息;队列也可以配置为处理可变大小的消息。在Nucleus SE中,队列处理由ADDR类型的单个数据项组成的消息。我的想法是队列的使用方式与邮箱类似。此外,在Nucleus RTOS中,队列的总大小(即有空间的无符号元素的总数)被指定为无符号值。在Nucleus SE中,该值的类型为U8。因此,队列的数据容量较小。

管道

在Nucleus RTOS中,管道处理一个或多个字节的消息;管道也可以配置为处理可变大小的消息。在Nucleus SE中,管道处理由一个或多个U8类型的数据项组成的消息。在配置时为每个管道设置消息大小。此外,在Nucleus RTOS中,管道的总大小(即有空间的字节总数)被指定为无符号值。在Nucleus SE中,此值的类型为U8,表示消息数(在NUSE_Pipe_Information()API调用中)。因此,管道的数据容量较小。

事件标志组

在Nucleus RTOS中,一个事件标志组包含32个标志;在Nucleus SE中,它被减少到8个。这个尺寸被选为Nucleus SE高效处理8位数据的目标处理器。更改Nucleus SE以处理不同大小的事件标志组并不困难。

信号

在Nucleus RTOS中,每个任务都有一组32个信号标志。在Nucleus中,SE信号是可选的,每个任务只有一组8个标志。这个尺寸被选为Nucleus SE高效处理8位数据的目标处理器。改变Nucleus SE来处理不同大小的信号标志集并不困难。

内存分区

在Nucleus RTOS中,分区的数目和大小都是无符号参数。在Nucleus SE中,分区数是U8类型的参数,分区大小是U16。这意味着对分区和池大小有一些限制。

计时器

在Nucleus RTOS计时器(两个应用程序计时器和一个任务休眠)中,处理unsigned类型的值。在SE核中为U16型。选择这种类型的处理器可能是Nucleus SE高效处理16位数据的目标处理器(8位不足以发挥作用)。改变Nucleus SE来处理不同大小的计时器并不困难。

Nucleus-SE迁移:未实现的设施和兼容性的更多相关文章

  1. 使用Nucleus SE实时操作系统

    使用Nucleus SE实时操作系统 Using the Nucleus SE real-time operating system 到目前为止,在本系列文章中,我们详细介绍了Nucleus SE提供 ...

  2. Nucleus SE RTOS初始化和启动

    Nucleus SE RTOS初始化和启动 Nucleus SE RTOS initialization and start-up 对于任何类型的操作系统,都有某种类型的启动机制.具体的工作方式因系统 ...

  3. java SE(未完结)

    数据类型与运算符 数据类型 基础数据类型 数值型 正整型 byte short int long 结尾加(l/L) 浮点型 float 结尾加(f/F) double 字符型 char 只能存储一个字 ...

  4. ECshop 在迁移到 PHP7 时遇到的兼容性问题

    在 PHP7 上安装 ECShop V2.7.3时,报错! Deprecated: Methods with the same name as their class will not be cons ...

  5. Nucleus 实时操作系统中断(上)

    Nucleus 实时操作系统中断(上) Interrupts in the Nucleus SE RTOS 所有现代微处理器和微控制器都有某种中断设施.这种能力对于提供许多应用程序所需的响应能力是必不 ...

  6. 关于 Java(TM) Platform SE binary 已停止工作 的解决方法

    一.问题描述 昨天晚上Myeclipse还用着好好的,今天早上打开工程,只要运行就卡住,大半天弹出个消息窗口:Java(TM) Platform SE binary 已停止工作. 如图 关闭Myecl ...

  7. Laravel学习笔记(三)数据库 数据库迁移

    该章节内容翻译自<Database Migration using Laravel>,一切版权为原作者. 原作者:Stable Host, LLC 翻译作者:Bowen Huang 正文: ...

  8. 平台支持的从经典部署模型到 Azure Resource Manager 的 IaaS 资源迁移

    本文介绍如何才能将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Resource Manager 部署模型. 用户可以阅读有关 Azure Resource Manager 功能和优点的更多 ...

  9. Nucleus 实时操作系统中断(下)

    Nucleus 实时操作系统中断(下) Nucleus RTOS兼容性 由于中断在Nucleus SE中的实现方式与Nucleus rto截然不同,因此不应期望有特定的兼容性.Nucleus RTOS ...

随机推荐

  1. 路由器逆向分析------在QEMU MIPS虚拟机上运行MIPS程序(ssh方式)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69652258 在QEMU MIPS虚拟机上运行MIPS程序--SSH方式 有关在u ...

  2. 对c语言回调函数的理解

    对于回调函数,可以简单的理解为一种特别的函数调用方法,我们可以对比一下回调函数与普通函数在调用方法上的区别. 1. 普通函数调用 一般为实现方在其函数体执行过程中直接调用. 代码示例: #includ ...

  3. VRRP中的上层回的路由

    如图,PC1和PC2处于不同网段,他们到AR3都有两条路可以选,现在要让他们到达AR3负载均衡,并且当AR1和 AR2的其中一个路由器挂了之后,他们仍然可以正常到达AR3. 他们去往AR3的VRRP的 ...

  4. 网络原理常用CMD命令字

    1. 运行"ipconfig/all"命令,将命令运行结果截图贴上来,并指出本机IP地址和网关IP 2. 运行"ping"命令,目标参数分别是 邻居IP.com ...

  5. Day009 面向对象和方法回顾

    面向过程&面向对象 面向过程思想 步骤清晰简单,第一步做什么,第二步做什么..... 面象过程适合处理一些较为简单的问题 面向对象思想 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些 ...

  6. 开源囧事4:你们这些卖代码的能不能留自己的QQ号?留我QQ号干嘛?

    缘起于开源项目 从 2017 年开始,陆陆续续写了一些开源项目放到开源网站里,都是一些实战项目,给大家练练手.有基础整合的demo,有 Spring Boot 博客项目,有 Spring Boot 商 ...

  7. Thyemleaf报错: Method call: Attempted to call method *** on null context object

    翻译:方法调用:尝试在null上下文对象上调用方法*** 解释:在Thyemleaf上下中不存在所要调用的对象,相当于Java代码中的NullPointerException 解决方案: 方案1. 需 ...

  8. 个人项目作业$\cdot$求交点个数

    个人项目作业\(\cdot\)求交点个数 一.作业要求简介 本次作业是北航计算机学院软件工程课程的个人项目作业,个人开发能力对于软件开发团队是至关重要的,本项目旨在通过一个求几何图形的交点的需求来使学 ...

  9. jenkins邮件报警机制配置

    1.下载email插件 Jenkins配置email前需要先安装email插件:Email Extension.Email Extension Template Plugin 2.系统配置 在Jenk ...

  10. 常用加密算法学习总结之散列函数(hash function)

    散列函数(Hash function)又称散列算法.哈希函数,散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来.该函数将数据打乱混合,重新创建一个叫做散列值(hash values ...