钛极OS(TiJOS)智能硬件应用开发指南

概述

钛极OS(TiJOS)系统运行时库中提供丰富的虚拟设备总线驱动类和传感器驱动类,用户可以非常容易的将需要的传感器类实例化并绑定到指定的虚拟设备总线上,绑定后就可以通过对象方法操作真实硬件对应接口上连接的传感器硬件;钛极OS(TiJOS)智能硬件应用开发遵循”资源三部曲”原则,即,”资源分配“,”资源绑定“,”资源使用“,这使不同传感器的使用更加统一化,简单化,高效化。

系统架构

由于智能硬件应用的开发涉及到硬件和软件两部分技术相关知识点,也是电子系统中难度最大的,用户在普通硬件平台上设计程序时需要考虑的因素也比较多,如:寄存器的配置,外部I/O的分配,内存资源分配等等,如此多的专业知识就要求开发人员具有很高的电子工程设计能力,一款硬件产品从设计到产品化需要很长的时间,其中大部分时间都浪费在了硬件底层的开发设计以及BUG查找上;如果产品未来需要再不同硬件平台上实现,则需要耗费大量人力物力来完成程序代码的移植,同时还要面临新BUG的引入风险。

钛极OS(TiJOS)系统完美解决的上述问题,它屏蔽了硬件底层操作细节,直接给用户提供应用接口级的支持,用户只需要将精力集中在应用层业务逻辑上,不需要关心硬件实现细节。系统使用面向对象的JAVA高级编程语言编写应用程序,同一个程序可以运行在运行有钛极OS(TiJOS)系统的不同硬件平台上,真正意义上实现了”软件定义硬件“,为用户应用的运行和跨平台提供了可靠的系统级支持。

如下图所示,钛极OS(TiJOS)完整系统由执行环境、真实硬件,传感器三大部分组成,其中执行环境中运行有钛极OS(TiJOS)操作系统,系统核心为JAVA虚拟机,其将真实硬件虚拟化,这是用户程序可以跨平台执行的技术基础;运行时库除了提供标准JAVA库功能外,还为用户提供丰富的虚拟设备总线类和传感器类驱动功能支持,用户程序调用传感器对象方法就可以轻松的控制硬件上连接的传感器。

TiJOS

资源定义

钛极OS(TiJOS)系统将“资源”分成两大类,分别为“软件资源”和”硬件资源“。“软件资源”主要是系统对象内存资源,”硬件资源“主要是其管理的所运行硬件平台的硬件资源,如:网络、文件、设备总线,传感器等。本文讲解的“资源”指的是设备总线传感器资源。

钛极OS(TiJOS)系统将硬件提供的设备总线进行虚拟化,在不同的硬件平台上都提供统一的虚拟设备总线类驱动,这样做的原因是屏蔽不同硬件平台的差异化,对应用层高度统一,用户程序面对的是虚拟硬件,而不是真实硬件,这也是用户程序“一次编译,到处运行“的跨平台机制理论基础。

如下图所示,YYY为真实硬件的某种设备总线,TiYYY则为其虚拟设备总线,此时真实硬件的设备总线资源会被虚拟化,资源会被重定义,用户不需要再关心。最左面的XXX为某传感器硬件,用过电气线连接在真实硬件上,最右面的TiXXX则为实例化的传感器,操作实例化的传感器对象就等于操作传感器硬件。

TiXXX

如下图所示,虚拟设备总线类型为TiGPIO的总线,真实硬件上连接有Button按键模块和LED灯模块,应用程序中实例化TiButton和TiLED类并绑定到预先分配的虚拟设备总线资源上,通过调用对象方法即可完成对相应传感器硬件的控制。

TiLED

应用开发

前面讲到“资源”的分类和虚拟设备总线的定义,以及传感器硬件的控制方法,接下来将详细讲解虚拟设备总线资源和传感器资源应用方法,后续内容中提到的"资源"都代表虚拟设备总线资源和传感器资源,不再另行标注。

如下图所示,钛极OS(TiJOS)系统中“资源”的使用都遵循”资源三部曲”原则,即,”资源分配“,”资源绑定“,”资源使用“。

资源分配,用户需要预先定义传感器实例化需要使用的硬件资源,如,使用TiGPIO的哪个port和哪个pin等。

资源绑定,这个过程需要用户根据实际硬件外部连接传感器的种类及数量实例化相同种类及数量的传感器类,并将之前分配出来的资源与对应传感器绑定,绑定操作通过传入虚拟设备总线对象到对应传感器类构造方法完成;如果传感器有事件需要监听,需要设置监听对象。

资源使用,资源绑定成功后,用户可以通过调用传感器对象方法即可以控制对应的传感器硬件;如果传感器具有事件反馈功能,事件监听对象回调方法也会被执行。

Step123

后面将通过TiLED灯模块的传感器简单应用实例,详细讲解”资源三部曲”原则的理论实践,TiLED传感器不需要事件监听,只需直接控制方法即可,实现起来更简单也比较典型,较适合初学者入门。

如果用户想了解具有事件监听的资源使用方法可以参考:《单按键事件例程》。

注:用户需要对硬件知识有个简单了解,如:电源线、地线、信号线等技术术语,了解的越多,对传感器应用开发的帮助就越大,开发效率也就越高。

资源分配

遵循JAVA标准开发方式,用户需要导入用到的JAVA类,这里包括虚拟设备总线类TiGPIO和传感器TiLED类。

import tijos.framework.devicecenter.TiGPIO; 
import tijos.framework.transducer.led.TiLED; 

如下图所示,定义TiLED需要用到的TiGPIO的port和pin,这里我们定义使用port0和pin0,接下来正式进行资源分配,调用TiGPIO类静态方法open,传入ledPort和ledPin参数,方法返回分配好的TiGPIO虚拟设备总线资源,分配好的资源为:TiGPIO总线的port0及port0下的pin0。

Step3

在进行资源分配时,用户都会有一个疑问,那就是如何知道某个传感器类需要何种“资源”?其实很简单,用户只要查看要用的传感器类的构造方法入口参数对象类型即可,下面以TiLED灯传感器类举例说明:

public TiLED(TiGPIO gpio, int signalPinID)

从上面的的构造方法可以知道“资源”需求情况如下:①虚拟设备总线需要的是TiGPIO对象;②同时需要对象某个Port下的某一个Pin,这就反向验证了上图中TiLED传感器需要使用TiGPIO类进行资源分配的原因。

注:TiGPIO技术原理可以参考:TiGPIO

资源绑定

绑定过程就是传感器类构造过程,同时需要传入需要的“资源”。如下图所示,实例化一个TiLED类,构造方法传入的参数为事先分配好的TiGPIO对象gpio和ledPin,构造完毕后即完成了资源绑定操作,构造出的led对象就是对应TiLED硬件的实例,接下来就可以通过调用led对象方法操作硬件了。

Step3

注:由于传感器实例需要绑定到具体的设备总线资源上,设备总线的技术资料请另行参考文档 “tijos.framework.devicecenter.md”。

资源使用

在资源绑定成功后就可以使用资源了,如下图所示,调用led对象turnOn方法完成TiLED灯的点亮。

Step3

至此,“资源三部曲”原则详细讲解结束,用户可以将以上程序代码片段合并在Eclipse开发环境中编译测试,进一步巩固TiJOS传感器应用基础知识,具体可参考《LED控制例程》。

总结

以上,详细讲解了“资源三部曲”原则的每个技术基础知识点,并通过一个简单的TiLED应用实例代码片段,从开发层面深入详细讲解,意在帮助用户更快的了解TiJOS传感器应用开发的核心技术;由于篇幅限制,无法将所有传感器的使用都一一讲解,用户可以下载GitHub中钛极OS(TiJOS) 外设操作例程源代码做更深入的学习,举一反三,快速掌握其他传感器的应用。例程下载地址: https://github.com/TiJOSteam/tijos-hardware-example。

更多问题可访问钛极OS(TiJOS)技术交流社区进行讨论。