开发物联网 (IoT) 设备可能比许多开发人员或公司所设想的更具挑战性。将嵌入式系统连接至云端极大地增加了系统的时序复杂性。时序复杂性的增加意味着开发人员需要一种更好的方法,用以管理软件何时应该运行什么代码。要避免编写自定义调度程序或处理裸机时序,最佳方法是使用实时操作系统 (RTOS) 来管理时序复杂性。
目前,使用 RTOS 的一项挑战在于许多开发人员习惯于没有操作系统 (OS) 的裸机环境,因而为特定应用选择合适的 RTOS 难度颇大。对 RTOS 市场的快速网络调查表明,市面上共有百余种 RTOS 可供开发人员使用,从开源系统到经认证的商业 RTOS。那么,该如何选择 RTOS 并开始使用呢?
本文将阐示如何评估最适合应用的 RTOS,并介绍支持 RTOS 的 STMicroelectronics 和 Renesas 开发平台。
RTOS 选择的考虑因素
实时操作系统是开发人员构建应用程序代码的基础。为确保应用基础牢固且能经受考验,选择合适的 RTOS 至关重要。不过在多数情况下,RTOS 选择仅依据单一参数:成本。
虽然成本是一个重要的考虑因素,但不应该是唯一的因素。如果开发团队难以连接、实施系统或对所选择的 RTOS 缺乏支持,即便花费十倍于商业 RTOS 的成本也是很平常的,更不用说因此而损失的项目时间。一般而言,开发团队为应用选择 RTOS 时应考虑八个不同的类别,其中包括:
法律责任与风险
性能
特性
成本
生态系统
中间件
RTOS 供应商
工程偏好
每个类别均可能包含几项标准,评估各款 RTOS 时应参照这些标准。例如,在法律责任方面,团队可能需要考虑以下事项:
RTOS 侵权责任
赔偿
保修
需要从法律角度审查 RTOS
在性能方面,开发人员可能需要考虑以下事项:
可执行内存占用
RAM 占用
最高的确定性
运行时效率
开发和执行团队检查各个主要类别,确定用于评估 RTOS 的标准。一旦确定了标准,就可以使用 Kepner-Tregoe (KT) 矩阵来评估几种不同的 RTOS。这种合理的决策模型有助于收集、优先排序和评估信息,且侧重于评估和确定风险的优先级,以期消除决策过程中的个人偏见,进而作出最佳选择,同时将负面影响降至最低。下面将详细说明如何使用 KT 矩阵来选择 RTOS。
使用 KT 矩阵选择 RTOS
用于 RTOS 选择的 KT 矩阵如图 1 和图 2 所示。整体构想是,确定每个选择类别的选择标准并在一列中逐一罗列。为各标准分别确定权重,并按重要性对权重赋值,从 1 到 5,其中 5 代表至关重要(如成本),1 表示不重要(如法律责任)。然后团队各成员就各标准对每款待评估 RTOS 的重要性进行排名,并将结果逐列填入矩阵中,再对各标准进行加权、求和,进而生成无偏见的数值结果。具有最高数值的 RTOS 则是最符合标准的 RTOS。
图 1 和图 2 中示例的评估标准数量多,涵盖面广,可能超出了大部分开发团队所设想的评估范围,而只需将权重设置为 0 或隐藏电子表格相应的行,即可轻松删减标准数量。
用于着手 RTOS 开发的平台
开发人员认为较难评估 RTOS 的一个领域,可能是确定其是否满足性能和功能的需求。除非开发人员深入评估,开始使用该 RTOS 却使他们陷入困境,否则多数情况下无从知晓。事实证明,一种简单又经济的 RTOS 评估和测试方法是利用支持 RTOS 的现有开发平台。下面我们将了解一些支持常用开源 FreeRTOS 和 Express Logic 的 ThreadX 操作系统的平台。
首先介绍的是 STMicroelectronics 的 STM32Cube 平台。STM32Cube 平台支持 FreeRTOS,属于 STMicroelectronics 的 STM32CubeMx 和 STM32CubeIDE 开发环境的一部分。这些工具可让开发人员方便地启用 FreeRTOS,他们只需选中 FreeRTOS 框,然后使用 FreeRTOS 配置工具来设置所有配置值即可。因此开发人员能够非常快速地着手运行 FreeRTOS,以便开始评估其功能和性能特点。
在 STMicroelectronics 的工具链中,有多种不同的开发板可供选择。多年来,一款久经考验的开发板一直深受青睐,STM32F429 Discovery 板 (STM32F429I-DISC1)(图 3)。
STM32F429 采用 Arm® Cortex®-M4 处理器,时钟速度高达 168 MHz。该微控制器支持 2 MB 的闪存和 256 KB 的 SRAM,代码和内存足以用于高级应用的开发。该开发板还包括 LCD、数个 LED 和可扩展的 I/O。
若基于 RTOS 的物联网边缘设备还需执行机器学习,则开发人员更适合选用 STM32F7 Discovery 板 (STM32F746G-DISCO)(图 4)。STM32F7 Discovery 板基于 Arm Cortex-M7 处理器,带缓存,时钟速度高达 216 MHz,具有 1 MB 的闪存和 340 KB 的 SRAM。此外,该开发板还包括 4.3 英寸 480 x 272 像素显示屏、以太网、SD 插槽、USB、麦克风和扬声器连接等。
最后介绍的一款开发板是 STM32L0 Nucleo 板 (NUCLEO-L073RZ)(图 5)。STM32L0 Nucleo 板基于 Arm Cortex-M0+,旨在实现最低能耗,非常适合电池供电的低功耗物联网边缘设备。STM32L0 微控制器的时钟速度高达 24 MHz,具有 192 KB 的闪存和 20 KB 的 SRAM。该开发板的特性可满足 RTOS 运行的最低需求,组件很简单,只包括用户开关和 LED。
接下来介绍的是 Renesas Synergy™ 平台。在嵌入式行业中,该平台的独特之处在于附带丰富的第三方软件和各供应商的开发工具。
例如,如果开发人员使用 STMicroelectronics 开发板,并希望将 Express Logic 的 ThreadX RTOS 与 IAR Systems 的 Embedded Workbench 编译器和开发环境结合使用,那么编译器需要使用 IAR 产品,RTOS 需使用 Express Logic 产品,就必须分别购买使用许可证。但是,开发人员只需购买 Renesas Synergy 平台中的某个微控制器,就能免费使用这些工具和 RTOS 以及其他中间件。
若开发人员希望在高端处理器上测试 ThreadX,Renesas Synergy 的 SK-S7G2 开发板 (YSSKS7G2E30) 不失为绝佳的选择(图 6)。SK-S7G2 基于 Arm Cortex-M4 处理器,时钟速度达 240 MHz,具有 3 MB 的闪存和 640 KB 的 RAM。该开发板组件丰富,包括 LCD、大量 LED、I/O 扩展、CAN、PMOD 扩展,可轻松访问串口和附加 I/O。
另一款可用于测试 ThreadX 的开发板是 Renesas Synergy 的 TB-S5D5 (YSTBS5D5E10)(图 7)。TB-S5D5 开发板成本低廉,采用 Arm Cortex-M4 处理器,时钟速度达 120 MHz,具有 1 MB 的闪存和 384 KB 的 SRAM。该开发板的功能较少,从而能最大限度地降低成本,只包括用户按钮、电容式触控和 LED。
对于开发人员,尤其是对物联网应用感兴趣的开发人员,其他值得关注的选择还有 Renesas Synergy 的 AE-Cloud1 物联网套件 YSAECLOUD1(图 8)和 Renesas Synergy 的 AE-Cloud2 蜂窝物联网套件 YSAECLOUD2(图 9)。
Synergy Cloud1 物联网套件让开发人员可以通过 Wi-Fi 连接至云端,而 Cloud2 蜂窝物联网套件则可通过蜂窝网络连接。这两款开发板均基于 S5D9 处理器,具有板载传感器和 LED 可从云端进行监视和控制。此外,这两款套件还附带 ThreadX 等预装软件,因此开发人员可使用自带 RTOS 测试整个连接解决方案。(开发人员可以此评估上述 KT 矩阵的中间件部分。)
关于上述平台的一个重要注意事项:评估 RTOS 时,请确保执行同环境比较。例如,若在时钟速度达 168 MHz 的 STM32F429 Discovery 板上评估 FreeRTOS,则请确保使用相同的开发板或时钟速度相同的开发板来评估其他 RTOS。
RTOS 的使用技巧与诀窍
每款 RTOS 都有各自的“技巧与诀窍”,但有几条经验法则可以普遍应用于各款 RTOS:
静态分配任务和 RTOS 对象。动态分配任务和对象需要使用内存分配程序 (malloc()),而这具有非确定性,可能会导致堆碎片问题,从而导致性能变差,甚至在最坏的情况下导致系统崩溃。
根据应用需求更改默认堆栈大小。对于多数任务而言,许多 RTOS 提供的默认堆栈值过大,这会导致 RAM 浪费。手动配置默认堆栈大小,但请务必根据任务的功能和需求调整各任务的堆栈大小。
从任务调用的函数必须可重入。从多个任务调用该函数时,若被更高优先级的任务中断,即可确保不存在损坏其他任务数据的风险。
尽量使用内存块池(如有)。内存块池是具有确定性行为的内存池,可用于运行时动态分配内存。该方法比使用 malloc() 更稳妥,但多数开源操作系统并不具备此内存管理功能。
最大限度地减少应用中使用的任务数。使用 RTOS 时,许多开发人员喜欢创建大量任务,但是创建任务就需要任务控制块及相关的独立堆栈空间,因此创建不必要的任务会大幅减少可用内存。
总结
物联网设备的应用促使嵌入式系统的软件复杂度相应增加,因此为了帮助开发人员克服这一挑战并将复杂性进行抽象化,使用 RTOS 已成为必要之举。然而,诀窍不仅仅在于选择 RTOS。每款 RTOS 都各有所长,若选择的 RTOS 与开发人员的应用需求不符,则可能会浪费大量的时间和精力。
相反,开发人员应采取积极主动的方法来选择 RTOS,仔细评估各个不同方面,不光是 RTOS 本身的特性,还包括 RTOS 供应商以及遇到问题时可用的支持等外围因素。一种有效方法则是使用 KT 矩阵仔细评估待选 RTOS,然后在完全支持该系统的微控制器平台上运行所选择的 RTOS,以确保其适合应用。
开发物联网 (IoT) 设备可能比许多开发人员或公司所设想的更具挑战性。将嵌入式系统连接至云端极大地增加了系统的时序复杂性。时序复杂性的增加意味着开发人员需要一种更好的方法,用以管理软件何时应该运行什么代码。要避免编写自定义调度程序或处理裸机时序,最佳方法是使用实时操作系统 (RTOS) 来管理时序复杂性。
目前,使用 RTOS 的一项挑战在于许多开发人员习惯于没有操作系统 (OS) 的裸机环境,因而为特定应用选择合适的 RTOS 难度颇大。对 RTOS 市场的快速网络调查表明,市面上共有百余种 RTOS 可供开发人员使用,从开源系统到经认证的商业 RTOS。那么,该如何选择 RTOS 并开始使用呢?
本文将阐示如何评估最适合应用的 RTOS,并介绍支持 RTOS 的 STMicroelectronics 和 Renesas 开发平台。
RTOS 选择的考虑因素
实时操作系统是开发人员构建应用程序代码的基础。为确保应用基础牢固且能经受考验,选择合适的 RTOS 至关重要。不过在多数情况下,RTOS 选择仅依据单一参数:成本。
虽然成本是一个重要的考虑因素,但不应该是唯一的因素。如果开发团队难以连接、实施系统或对所选择的 RTOS 缺乏支持,即便花费十倍于商业 RTOS 的成本也是很平常的,更不用说因此而损失的项目时间。一般而言,开发团队为应用选择 RTOS 时应考虑八个不同的类别,其中包括:
法律责任与风险
性能
特性
成本
生态系统
中间件
RTOS 供应商
工程偏好
每个类别均可能包含几项标准,评估各款 RTOS 时应参照这些标准。例如,在法律责任方面,团队可能需要考虑以下事项:
RTOS 侵权责任
赔偿
保修
需要从法律角度审查 RTOS
在性能方面,开发人员可能需要考虑以下事项:
可执行内存占用
RAM 占用
最高的确定性
运行时效率
开发和执行团队检查各个主要类别,确定用于评估 RTOS 的标准。一旦确定了标准,就可以使用 Kepner-Tregoe (KT) 矩阵来评估几种不同的 RTOS。这种合理的决策模型有助于收集、优先排序和评估信息,且侧重于评估和确定风险的优先级,以期消除决策过程中的个人偏见,进而作出最佳选择,同时将负面影响降至最低。下面将详细说明如何使用 KT 矩阵来选择 RTOS。
使用 KT 矩阵选择 RTOS
用于 RTOS 选择的 KT 矩阵如图 1 和图 2 所示。整体构想是,确定每个选择类别的选择标准并在一列中逐一罗列。为各标准分别确定权重,并按重要性对权重赋值,从 1 到 5,其中 5 代表至关重要(如成本),1 表示不重要(如法律责任)。然后团队各成员就各标准对每款待评估 RTOS 的重要性进行排名,并将结果逐列填入矩阵中,再对各标准进行加权、求和,进而生成无偏见的数值结果。具有最高数值的 RTOS 则是最符合标准的 RTOS。
图 1 和图 2 中示例的评估标准数量多,涵盖面广,可能超出了大部分开发团队所设想的评估范围,而只需将权重设置为 0 或隐藏电子表格相应的行,即可轻松删减标准数量。
用于着手 RTOS 开发的平台
开发人员认为较难评估 RTOS 的一个领域,可能是确定其是否满足性能和功能的需求。除非开发人员深入评估,开始使用该 RTOS 却使他们陷入困境,否则多数情况下无从知晓。事实证明,一种简单又经济的 RTOS 评估和测试方法是利用支持 RTOS 的现有开发平台。下面我们将了解一些支持常用开源 FreeRTOS 和 Express Logic 的 ThreadX 操作系统的平台。
首先介绍的是 STMicroelectronics 的 STM32Cube 平台。STM32Cube 平台支持 FreeRTOS,属于 STMicroelectronics 的 STM32CubeMx 和 STM32CubeIDE 开发环境的一部分。这些工具可让开发人员方便地启用 FreeRTOS,他们只需选中 FreeRTOS 框,然后使用 FreeRTOS 配置工具来设置所有配置值即可。因此开发人员能够非常快速地着手运行 FreeRTOS,以便开始评估其功能和性能特点。
在 STMicroelectronics 的工具链中,有多种不同的开发板可供选择。多年来,一款久经考验的开发板一直深受青睐,STM32F429 Discovery 板 (STM32F429I-DISC1)(图 3)。
STM32F429 采用 Arm® Cortex®-M4 处理器,时钟速度高达 168 MHz。该微控制器支持 2 MB 的闪存和 256 KB 的 SRAM,代码和内存足以用于高级应用的开发。该开发板还包括 LCD、数个 LED 和可扩展的 I/O。
若基于 RTOS 的物联网边缘设备还需执行机器学习,则开发人员更适合选用 STM32F7 Discovery 板 (STM32F746G-DISCO)(图 4)。STM32F7 Discovery 板基于 Arm Cortex-M7 处理器,带缓存,时钟速度高达 216 MHz,具有 1 MB 的闪存和 340 KB 的 SRAM。此外,该开发板还包括 4.3 英寸 480 x 272 像素显示屏、以太网、SD 插槽、USB、麦克风和扬声器连接等。
最后介绍的一款开发板是 STM32L0 Nucleo 板 (NUCLEO-L073RZ)(图 5)。STM32L0 Nucleo 板基于 Arm Cortex-M0+,旨在实现最低能耗,非常适合电池供电的低功耗物联网边缘设备。STM32L0 微控制器的时钟速度高达 24 MHz,具有 192 KB 的闪存和 20 KB 的 SRAM。该开发板的特性可满足 RTOS 运行的最低需求,组件很简单,只包括用户开关和 LED。
接下来介绍的是 Renesas Synergy™ 平台。在嵌入式行业中,该平台的独特之处在于附带丰富的第三方软件和各供应商的开发工具。
例如,如果开发人员使用 STMicroelectronics 开发板,并希望将 Express Logic 的 ThreadX RTOS 与 IAR Systems 的 Embedded Workbench 编译器和开发环境结合使用,那么编译器需要使用 IAR 产品,RTOS 需使用 Express Logic 产品,就必须分别购买使用许可证。但是,开发人员只需购买 Renesas Synergy 平台中的某个微控制器,就能免费使用这些工具和 RTOS 以及其他中间件。
若开发人员希望在高端处理器上测试 ThreadX,Renesas Synergy 的 SK-S7G2 开发板 (YSSKS7G2E30) 不失为绝佳的选择(图 6)。SK-S7G2 基于 Arm Cortex-M4 处理器,时钟速度达 240 MHz,具有 3 MB 的闪存和 640 KB 的 RAM。该开发板组件丰富,包括 LCD、大量 LED、I/O 扩展、CAN、PMOD 扩展,可轻松访问串口和附加 I/O。
另一款可用于测试 ThreadX 的开发板是 Renesas Synergy 的 TB-S5D5 (YSTBS5D5E10)(图 7)。TB-S5D5 开发板成本低廉,采用 Arm Cortex-M4 处理器,时钟速度达 120 MHz,具有 1 MB 的闪存和 384 KB 的 SRAM。该开发板的功能较少,从而能最大限度地降低成本,只包括用户按钮、电容式触控和 LED。
对于开发人员,尤其是对物联网应用感兴趣的开发人员,其他值得关注的选择还有 Renesas Synergy 的 AE-Cloud1 物联网套件 YSAECLOUD1(图 8)和 Renesas Synergy 的 AE-Cloud2 蜂窝物联网套件 YSAECLOUD2(图 9)。
Synergy Cloud1 物联网套件让开发人员可以通过 Wi-Fi 连接至云端,而 Cloud2 蜂窝物联网套件则可通过蜂窝网络连接。这两款开发板均基于 S5D9 处理器,具有板载传感器和 LED 可从云端进行监视和控制。此外,这两款套件还附带 ThreadX 等预装软件,因此开发人员可使用自带 RTOS 测试整个连接解决方案。(开发人员可以此评估上述 KT 矩阵的中间件部分。)
关于上述平台的一个重要注意事项:评估 RTOS 时,请确保执行同环境比较。例如,若在时钟速度达 168 MHz 的 STM32F429 Discovery 板上评估 FreeRTOS,则请确保使用相同的开发板或时钟速度相同的开发板来评估其他 RTOS。
RTOS 的使用技巧与诀窍
每款 RTOS 都有各自的“技巧与诀窍”,但有几条经验法则可以普遍应用于各款 RTOS:
静态分配任务和 RTOS 对象。动态分配任务和对象需要使用内存分配程序 (malloc()),而这具有非确定性,可能会导致堆碎片问题,从而导致性能变差,甚至在最坏的情况下导致系统崩溃。
根据应用需求更改默认堆栈大小。对于多数任务而言,许多 RTOS 提供的默认堆栈值过大,这会导致 RAM 浪费。手动配置默认堆栈大小,但请务必根据任务的功能和需求调整各任务的堆栈大小。
从任务调用的函数必须可重入。从多个任务调用该函数时,若被更高优先级的任务中断,即可确保不存在损坏其他任务数据的风险。
尽量使用内存块池(如有)。内存块池是具有确定性行为的内存池,可用于运行时动态分配内存。该方法比使用 malloc() 更稳妥,但多数开源操作系统并不具备此内存管理功能。
最大限度地减少应用中使用的任务数。使用 RTOS 时,许多开发人员喜欢创建大量任务,但是创建任务就需要任务控制块及相关的独立堆栈空间,因此创建不必要的任务会大幅减少可用内存。
总结
物联网设备的应用促使嵌入式系统的软件复杂度相应增加,因此为了帮助开发人员克服这一挑战并将复杂性进行抽象化,使用 RTOS 已成为必要之举。然而,诀窍不仅仅在于选择 RTOS。每款 RTOS 都各有所长,若选择的 RTOS 与开发人员的应用需求不符,则可能会浪费大量的时间和精力。
相反,开发人员应采取积极主动的方法来选择 RTOS,仔细评估各个不同方面,不光是 RTOS 本身的特性,还包括 RTOS 供应商以及遇到问题时可用的支持等外围因素。一种有效方法则是使用 KT 矩阵仔细评估待选 RTOS,然后在完全支持该系统的微控制器平台上运行所选择的 RTOS,以确保其适合应用。
举报