如何控制嵌入式用户界面

时间:2010-08-21 20:42:24

标签: user-interface embedded

他们如何编码在嵌入式硬件上运行的用户界面的逻辑。如今,微波炉,平板电视,便携式DVD播放器甚至是数字手表都具有复杂的用户界面。是否有可用于删除所有脏工作的工具/框架,或者是使用IF ELSE构造的开发人员。

我不是要求QT或WxWidgets意义上的用户界面工具包。我更感兴趣的是知道是否有框架来处理控件背后的逻辑。

if (mTemperature > maxTemperature)
    temperatureDialControl.Enabled = false;

3 个答案:

答案 0 :(得分:1)

我使用了Quantum Leaps的Quantum Platform系列框架,用于几个带有用户界面的嵌入式产品(以及那些没有UI的嵌入式产品)。

QP是事件驱动编程的框架(基本上所有嵌入式系统都是如此)。特别是用户界面是一个很好的匹配,因为大多数用户界面由可以自定义的“小部件”组成,并且小部件通常从事件调度器接收事件(超时,按下按钮,移动等)。这种“控制反转”在用户界面中非常典型。我职业生涯中遇到的大多数(嵌入式)用户界面都是事件驱动的状态机,或者它们应该以这种方式实现。

你特别询问了如何处理逻辑&控制。 QP的优点在于它所包含的主动对象计算模型适用于非常自然的&直接实现状态机(平面或分层)。因此,在上面的示例中,您可能会收到一个带有新温度的“温度更新”事件,并且您的状态处理程序将执行逻辑&决定采取什么行动。使用框架,您可以在控件后面创建逻辑,但基础结构几乎可以处理其他所有内容。

Quantum平台很漂亮。在设计(状态图)和实现/代码之间也可以很容易地看到连接(可跟踪性)。最重要的是,该框架实现了所有基础设施(事件排队和调度,状态转换,垃圾收集,内存池等等),所以您只需要专注于您的应用程序。

我在非嵌入式平台上使用过诺基亚的Qt,但你的问题似乎表明你已经意识到了这一点。我认为有一个较小的“可嵌入”版本的Qt,但我从未使用它。

答案 1 :(得分:0)

是否有工具/框架来删除所有脏工作.. ?是的,有。它们被称为嵌入式操作系统和RTOS。通常,它们有助于处理由定时器,按钮和其他控件生成的中断,它们包含硬件抽象级别,它们包括各种通信协议堆栈等。因此,基本上,它们完成所有脏工作。您所需要的只是使用IF / ELSE或SWITCH或任何您喜欢的方式处理它们提供的内容。至少谁知道 temperatureDialControl.Enabled 必须 false ,如果 mTemperature 超过 maxTemperature

答案 2 :(得分:0)

使用嵌入式,您可以自由地执行任何操作,您不会受到操作系统限制或更糟糕的API限制。嵌入式系统可以是事件驱动的,特别是如果电源是一个问题(电池供电),因为你基本上想要降低功率,只唤醒事件。但是,您也可以在中断的意义上不使用中断和事件,只要您的响应时间保证满足任何要求,您就可以轮询所有内容。

对于微处理器用户界面,例如,与计算机键盘相比,微不足道的用户界面可能很复杂或简单,具体取决于系统。对于成本,这些按钮中的每一个都可以被馈送到微控制器中,并且微控制器必须轮询或获得每个按钮的中断并进行去抖动等。或者像你的计算机键盘或鼠标那样可能有硬件和逻辑可以完成所有这些操作。工作和微控制器在一些特殊或标准总线(如串行或spi或其他)上发送指示事件的单个字节或数据包。现在,执行该任务的逻辑本身可能是另一个微控制器,其唯一的工作是去抖动并检测按钮按下,然后在看到状态改变时发出串行字节。轮询可能更容易,但我可以想象使用中断进行去抖的方法。

嵌入式只是特殊的,因为您不受操作系统限制和apis的限制,除非您强加给自己(或由客户强加)。用户界面通常比桌面程序用户界面简单得多。