SynthOS 是一种软件工具,用于创建定制的、优化的应用特定操作系统 (ASOS)。使用项目文件中指定的系统约束和配置信息,SynthOS 分析应用程序和驱动程序代码,并生成包含原始用户代码和运行特定 ASOS 要求所需的所有代码的源代码。
SynthOS 生成的 ASOS 是一个高效的多任务内核,可以从低端系统中引入新功能,尤其是小型 8 位或 16 位低速处理器,并使其能够用于高级物联网设备,同时提供安全性,便携性和低功耗。由此产生的 ASOS 是一种 unikernel 形式,一种占用空间小、单一地址空间的系统,它越来越受欢迎,可以直接在虚拟机管理程序或裸机系统上高效运行。
Kinoma Create,如图 1 所示,是一个用于连接设备和物联网的硬件和软件原型系统,基于 Marvell 的 PXA166 处理器。Kinoma Create 旨在与连接环境中的外部硬件和传感器一起工作。
图 1: Kinoma Create 硬件和接口
为了将 Kinoma Create 连接到外部硬件,系统背面有一个 50 针接口;这些引脚专用于固定功能。该系统还在前面有两个相同的 8 引脚接头,如表 1 中定义,每个 8 位由两个 8 位 Microchip PIC 16 MCU 之一控制,这些 8 位 Microchip PIC 16 MCU 作为通用 I/O (GPIO) 处理器运行。使用与这些 GPIO 通信的内置 Front Pin 应用程序将这些引脚的功能动态分配给物理引脚。该项目的目标是为两个 GPIO 开发代码,这些 GPIO 可以同时运行多个 I/O 接口,不会丢失数据,但仍适合 PIC 15 MCU 的 4 KB 闪存和 256 字节 RAM。
前面板接口上的任何引脚都可以支持表中所示的功能。
表 1: Kinoma Create Front Pin 功能
硬件架构
硬件架构如图 2 所示。PIC16 是一款小巧但功能强大的 MCU,具有复杂的接口和配置设置。Kinoma Create 使用两个 PIC16F1508 微控制器,每个都具有以下特性:
· 中档指令集:48 条指令,16 层堆栈
· 闪存程序存储器:4 KB
· RAM:256字节
· 振荡器:16 MHz
· PWM:四个独立
· DAC:5位
· 定时器:2个8位,1个16位
控制器的时钟来自内部 16 MHz 时钟。在 4 个周期/命令下,它相当于 4 MIPS。与主处理器的通信通过硬件 I 2 C 接口进行。
图 2: SynthOS-Kinoma 创建项目框图
软件架构
鉴于 PIC16 处理器在内存空间和处理速度方面的限制,SynthOS 适合该项目。SynthOS 创建的 ASOS 在内存使用、处理器能力和速度方面非常高效。它对于像 Kinoma Create 中使用的 Microchip 设备这样的小型 MCU 也很有用。SynthOS 允许在 C 中编写代码。当一个任务需要调用另一个任务或等待另一个任务完成时,会插入 SynthOS 识别的特殊代码行,称为“原语”。
然后在所有任务代码上运行 SynthOS,将每个任务的适当信号量和标志插入到代码中的适当位置。SynthOS 还创建了任务管理代码来安排任务并管理相关的标志和信号量。SynthOS-Kinoma Create Project 的软件架构如图 3 所示。
图 3: SynthOS-Kinoma Create Project 软件功能框图
系统初始化
System Init 模块在上电、复位和任何其他初始化条件时设置系统配置和硬件配置。I 2 C 主机通信模块是系统中的主要任务。它与主机通信,从中获取配置信息和数据,并在响应主机请求时发回数据。它使用 PIC 的集成 I 2 C 机制。来自主机的数据分为两类:没有约束的数据和需要根据一组允许值进行验证的数据。后面的数据被保存到一组影子寄存器中,并在影子寄存器模块中处理。
从主机发送的一些数据会使系统进入不稳定状态或与其他数据发生冲突。此类数据保存在影子寄存器模块中的一组影子寄存器中,并与相应寄存器的允许值进行比较。只有在验证为允许值后才会加载到寄存器中并在系统中生效。如果系统在影子寄存器的数据中检测到错误,它不会将该数据加载到相应的寄存器中,但会指示错误。
模拟输入和 A/D 模块处理模拟输入。该模块使用 PIC 的内部 10 位模数转换器并将数据存储在主机可以通过 I 2 C 接口检索的寄存器中。
数字 I/O 端口管理器
数字 I/O 端口管理器模块处理数字 I/O 端口状态和 I/O。此功能在此模块和其他一些模块之间划分。在验证设置之间没有冲突(例如,同时定义为电源和接地的引脚)之后,在影子寄存器模块中将引脚设置为电源、接地或 NC。
PWM 端口管理器模块控制脉宽调制 (PWM) 输出,并在中断服务程序 (ISR) 中执行。PWM 使用两个寄存器定义,第一个定义周期时间,第二个定义周期时间内信号为高电平的时间段。PWM 机制依靠定时器中断来生成所需的波形。由于 PIC 的功能有限,系统仅限于三个 PWM 输出。
在带外围设备的 I 2 C 模块中,PIC 是 I 2 C 网络上的主设备。时钟和数据由 PIC 通过旋转引脚上的位来模拟 I 2 C 协议生成。如果需要,系统可以发送单字节数据消息或进行缓冲区传输。
中断服务程序 (ISR)
PIC 的有限功能和中断支持架构需要偏离标准的带有 SynthOS 的 ISR 实现。PIC 实际上只有一个中断向量,所有中断都指向同一个地址。检测活动中断并做出响应是固件的责任。该架构要求固件在退出 ISR 和重置中断标志之前支持中断。出于这个原因,该系统在 ISR 中执行主机 I 2 C 和 PWM 以最小化代码大小并最大化性能。
ASOS 管理系统的不同任务并让它们并行运行,从而实现更高的效率。SynthOS 将任务定义为 Init Task、Loop Task、Call Task 或 ISR,并且必须在项目文件中指定系统中的每种任务类型。我们创建了一个项目文件来指定每个任务的类型及其属性,例如任务的优先级和频率,所有这些都显示在清单中。
图 4:显示 SynthOS-Kinoma Create 项目文件的清单。
接下来,我们将描述 SynthOS-Kinoma 创建项目的任务。初始化任务在软件初始化期间执行一次。由于这个实现相对简单,并且由于内存限制,我们将所有系统初始化都移到了一个任务中。该任务包括系统配置、中断设置和变量初始化。
循环任务
循环任务由 ASOS 使用 SynthOS 项目文件中选择的调度程序定义的算法定期执行。由于 PIC 的内存有限,我们在这个项目中只使用 Loop Tasks,这也简化了配置文件和 SynthOS 生成的调度程序。
I 2 C Master 任务管理与主机在 I2C 总线上的通信。影子任务通过使用影子寄存器验证来自主机处理器的信息,并且只有在影子寄存器中的数据被验证后才更新系统配置和数据。
模拟输入任务在后台运行,从主机指定的端口读取模拟输入并将其保存在共享内存中。调用任务是不执行的,除非它是由正在执行的任务专门启动的。在这个实现中,我们没有使用任何调用任务。
中断服务程序在中断发生时执行,就像在典型的嵌入式系统中一样。系统中的 ISR 或者是用于 PWM 的定时器中断,它根据主机处理器定义的占空比管理 PWM 时序,或者是管理与主机处理器通信的 I 2 C 主机中断。
使用 SynthOS 实现系统后,GPIO 可以按预期工作,允许多个 I/O 同时运行而不会丢失任何数据,支持多个 A/D 和数字 I/O、多达四个 PWM,以及一个 I 2 C 接口八个引脚,仅由一个 PIC MCU 支持。考虑到功能,系统内存利用率在 3360 字节闪存(82% 利用率)和 198 字节 RAM(77% 利用率)下非常高效。
审核编辑:郭婷
-
处理器
+关注
关注
68文章
19275浏览量
229737 -
寄存器
+关注
关注
31文章
5342浏览量
120295 -
定时器
+关注
关注
23文章
3247浏览量
114755
发布评论请先 登录
相关推荐
评论