×
嵌入式开发 > 详情

一种HCI自适应的解决办法

发布时间:2020-06-28 发布时间:
|

摘要: 在嵌入式系统工程开发及现场施工实践中,为了解决由于嵌入式系统资源退化引起的人机交互复杂性和不确定性问题,从可适应性角度讨论,分析了嵌入式系统中人机交互界面(HCI)的可适应性需求,应该针对资源退化提供一种HCI适应解决办法,故对于嵌入式设备交互特点进行了研究,详细描述了嵌入式设备的HCI模型和内存结构的建立,并给出具有实践意义的HCI可适应性策略,最后以一个工程实例进行了验证。从实例可知,为嵌入式系统的项目开发提供了一种可行性解决方案。

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能,对可靠性、成本、体积、功耗有严格要求的专用计算机系统,其工程实践正逐渐地引起研究人员的关注,在实际工程中有诸多因素需要考虑,比如微处理器的功耗,器件的可靠性,设备的抗恶劣环境能力,人机交互界面(HCI),现场通信等等问题。HCI是嵌入式系统工程中的一个重要课题。由于某些嵌入式系统研发的复杂性和工程实施中的不确定性,导致嵌入式系统HCI有僵化的趋势,对此提出一种可适应性的解决思路是必要的。

1 嵌入式工程的HCI

图形用户界面是当前用户界面的主流。HCI是决定嵌入式计算机系统是否友好的一个重要因素。嵌入式系统人机交互功能主要靠输入输出的设备与相应的软件协同来实现。可供人机交互使用的设备主要有键盘、显示以及各种模式识别设备等。嵌入式系统的人机交互因其特殊性而与PC有所区别,多数的嵌入式系统都是显示屏幕与键盘,或者带触摸屏定位的设备组成。对用户而言,需要用按键或触摸屏的动作告知系统如何按照人的意图去输出,绝大多数嵌入式系统都有个HCI系统供用户使用。问题是在工程中交互设计时,设计者往往会把交互界面和系统的资源联系起来,使得界面的设计不独立于系统资源。软件设计势必在很大程度上受限于硬件资源。实践中,通常的做法是根据现有的硬件条件临时组织一个数据结构,把一系列字符串值“串”起来,之间可以实现相互跳转。一个交互节点的快照描述一般需要几部分组成:1)状态枚举量;2)显示常量状态值;3)前趋状态;4)后继状态。还可能需要包含节点Id标识等其他的辅助信息。显然,这是用一种静态的方法来生成一个菜单对象,代码易读性强,但各个部分相互依赖,编码和调试比较繁琐,需要设计者对各部分都十分清楚。最大的问题是可扩展性受限,对后续规模的增加造成一定的影响。工程实践中,用户的需求及隐含需求往往是复杂和不确定的。

本文的研究目的是建立一套能够适应应用复杂性和不确定性的实现方案,为后续嵌入式系统开发提供一个工程性的解决思路。

2 可适应的嵌入式HCI

可适应的HCI是指可根据系统的计算环境或应用情境进行伴随调节的界面。可以进一步区分为被动性适应和主动性适应(或自适应)。

可适应性HCI在嵌入式系统开发中有着越来越迫切的要求。通常该需求来源于2个方面,一个是用户需求的变更;另一个是系统执行中的应用环境变化。由这2种因素出发,依据可适应性的行为模式,嵌入式HCI的可适应性从以下2个方面展开研究:

所谓静态可适应性是指与系统静态配置相关的可适应性,通常适应行为发生在2次系统启动之间。这种适应的需求通常是外来的,比如用户需求的修改,设计方案的变化。在工程中,常常出现迭代式的适应性修改,所以静态可适应性也是一个很有现实意义的需求。这种可适应性的实现必须借助非易失性存储器来进行,用来存储变化后的定义及配置参数,使得顺利完成适应行为。

动态可适应性是指在系统运行过程中,可以依据环境的变化进行在线自适应修改,即普适环境下的修改。通常普适设备在使用环境中迁移,引起了环境参数的强制性变化,系统的HCI与环境就会产生矛盾,因此普适策略下的自适应调整是很有必要的。依据收集到的系统状态信息,判断是否HCI与系统配置同步,依靠算法实时纠正系统配置来实现自适应。普适环境下的自适应特点在于动态性,只有在出现矛盾的时候才做普适调整,在设计中必须对匹配性进行考虑。

3 基于多重链表的嵌入式HCI

3.1 模型建立

多重链表在组织顺序型结构数据时具有较快的搜索速度,下面给出一个基于多重链表的模型,每个节点扇出为4,分别指向上层节点、下层节点及左、右的邻居节点,扇入不限。每个节点与相邻的节点之间都有双向连接,并且每个节点均可带子节点进行扩展。

模型从功能上讲是个层次结构,从数据模型上看是网状结构,允许有一个以上的节点无双亲,并且一个节点可以有多于一个的双亲。每层节点的数目不固定,可视实际情况而变化。每层都是一个闭环的双向回路,可进行水平双向遍历。层与层之间由父节点与长子节点双向连接。父层节点对子层节点是一对一联系,由父节点进入子层时在长子节点驻足;子层节点对父节点是多对一联系,意味着由每个子节点都可回溯至父节点。由父层切换至子层的每次遍历必须经过长子节点,然后可由长子节点依次进行水平循环遍历,子层切换至父层则比较灵活,每个子节点均可到达其父节点。

3.2 方案实现

3.2.1 内存结构设计

节点应该具备4个域,除了标示身份外还至少应该具备指向上层父节点的指针域、指向下层子节点的指针域以及指向同层左、右兄弟的指针域。

图1是一个简单的HCI结构图,从功能上看,它分为5层,第一层有5个节点项形成一个闭环,第二层闭环是第一层第一个节点的子节点组,该子节点组的第二项又有子节点组。如此下去共有5层,处在最高位置的节点其父指针为空,最低位置的节点的儿子指针为空。


图1 一个简单的HCI结构图

3.2.2 类设计

依据模型定义如图2所示的类对象。左边所示是个基本的菜单节点类,除了模型中提到的几个节点指针,还增加了几个相关的属性域,Id用来标识节点身份,displayValue用来存储菜单的显示标题,布尔成员editable指明当前节点是否可编辑,另外还增加一个ptr_function域,用来指向一个功能函数,该函数完成节点在接受确定消息后要做的工作。


图2 菜单结点的类定义和菜单代理类定义

在节点类中还定义了几个成员方法,与私有属性相关的命名符合OOP的命名规定,均使用Get—Set前缀规则。除针对几个成员属性的方法外,还引入了另外几个成员方法,CoUp执行向父节点的跳转,CoDown执行向长子节点的跳转,CoLeft和GoRight负责向左右邻居的跳转。

从软件设计独立与资源来考虑,提出一个界面代理的概念,界面代理就是基于事件驱动,处在界面与环境之间一个中间对象。外界事件的消息均由代理来接收识别,并由它调用界面元素,对界面做出改变。图2右边上部所示的定义的是菜单代理类MenuManageAgent。该类对象用来作为菜单体系与外界交互的媒介物,它用来记录菜单的头指针,菜单体系的规模以及菜单的总体状态;初始化菜单结构,创建菜单系统并代表菜单接受外来的消息,并对消息加以识别和做出合理的响应。图2右下是对外部消息的定义。消息的列表可以依据实际情况扩展和修正。

4 嵌入式HCI的可适应性实现

静态可适应的实现是基于用户主观意图进行的。这个过程强调人机交互,因此用户的工作内容很重要,一般也作为静态可适应性实现的输入参数。而实现的技术细节相对简单。在算法设计上,该种可适应性实现工作重点仍然放在用户交互内容的管理上,由用户的“交互内容”综合系统功能可以得到界面的“变更差”,进而推导出系统HCI的具体参数集的变化。

如图3所示,设备在使用环境中的动态可适应以系统状态检测开始,这是一个周期性的行为,频率依据系统在HCI上的实时性要求而定。系统状态检测应该包含几部分的工作:1)应该有监测环境参数的手段,比如传感器、接入信号等;2)要依据特定的算法来测定这个矛盾,其中包括差异的获取,尺度的制定。状态检测的结果是,是否有矛盾输出,如果有矛盾出现的情况下,还需要做决策分析,其主要任务是基于系统现有条件是否可实现动态可适应,比如已经达到了临界状态时,就丧失了这种可能性。所以这里涉及到对系统资源的管理调度。下一步就是在动态适应的情况下,采用动态适应策略对系统HCI给出合适的调整,从而达到普适环境下可动态适应的目的。


图3 动态自适应性算法流程



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
盘点几种主流嵌入式架构的代码压缩技术