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(TM) Platform SE binary 未响应

    兄弟们灵异事件啊 javaw.exe Java™ Platform SE binary 未响应 myeclipse.ini 没有报错. 打开myeclipse老是未响应. 突然准备去安装myeclip ...

  4. java tm无响应_Java(TM) Platform SE binary 未响应 是怎么个情况?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 988098 [Thread-10] INFO sound.oo0O - Creating streaming player for music with ...

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

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

  6. 业务不停转,迁移已完结,Linode 实时迁移到底怎么做到?

    当开发者将工作负载部署到云计算平台时,往往并不需要考虑运行这些服务的底层硬件.在人们对"云"的理想化印象中,硬件维护和物理限制往往是无形的,然而硬件不可避免需要时不时进行维护,这可 ...

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

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

  8. 排污单位生产设施及污染治理设施用电(能)监控系统原理、作用、组成及功能

    一.用电监控原理 根据企业的生产和治理工艺,分别对产污设施和治污设施安装环保用电监控模块,利用传感技术实时收集设施用电监测数据,再将数据用无线方式传输到环保用电监控系统,实现对企业总用电量.生产设施用 ...

  9. 分享一次险象迭生的系统迁移【真实案例】

    一.背景 因为系统数据量持续性增大,腾讯云的MySQL已经达到瓶颈,无法进行升级操作,如果自己搭建一个分库分表系统,速度和可靠性上面都会很差,综合各方面考虑,最后决定采用阿里云的PolarDB-X分布 ...

最新文章

  1. JSP内置对象-request
  2. random模块——生成伪随机数
  3. ADO.NET复习总结(4)--访问SqlServer的类
  4. C# winForm 定时访问PHP页面小工具
  5. .NetCore中三种注入生命周期的思考
  6. java为何重复调用方法_通过反射调用Java中的getter:重复调用它的最快方法是什么(在性能和可伸缩性方面)?...
  7. angular1.x 中重要指令介绍($eval,$parse和$compile)
  8. 【ElasticSearch】Es 源码之 Transport 和 TransportService 源码解读
  9. Flink时间属性和窗口
  10. Linux-LNMP(pool,php-fpm慢执行日志,进程管理,open_basedir)
  11. Spring实现数据库读写分离
  12. android软件安全权威指南 pdf_目录公众号内的所有资源软件!
  13. vi编辑器编辑超大文件。
  14. 推荐一款十分好用的本地查词软件——MDict
  15. 哪些排序是不稳定的?稳定又意味着什么?
  16. 电脑系统重装出现蓝屏解决方法
  17. 撰写计算机专业调研报告,计算机实习调研报告.doc
  18. 修改win服务器防火墙端口号,Windows Server 修改防火墙和远程桌面(3389)默认端口...
  19. 使用exe4j打包javafx项目
  20. 四个数列 || 二分

热门文章

  1. 2022-2028年中国汽车用胶管行业市场深度分析及投资前景趋势报告
  2. 2022-2028年中国综艺节目市场深度调研及投资前景预测报告
  3. 2022-2028中国橡胶衬里行业全景调研及竞争格局预测报告
  4. 2022-2028年中国粘网胶行业市场深度评估及发展前景规划报告
  5. 2022-2028年中国丁二烯橡胶行业市场规模研究及前瞻分析报告
  6. 实现SSTab单个选项卡代码
  7. Pandas库常用函数和操作
  8. AlexeyAB DarkNet YOLOv3框架解析与应用实践(三)
  9. Python 函数学习
  10. git 查看修改的代码行数,新增的文件以及删除的代码行数