TouchGFX开发简介
TouchGFX应用程序中的TouchGFX抽象层(AL)是位于板启动阶段开发的板级初始化代码与TouchGFX Engine之间的软件组件。 其主要任务是将引擎与底层硬件和操作系统相结合。 这通过抽象底层硬件和操作系统的特性来完成,以便引擎可对其进行统一访问及处理。
AL由两个不同的部分组成,分别为硬件抽象层(HAL)和操作系统抽象层(OSAL)。
本节将概述抽象层的原理和职责,以及它与TouchGFX Engine的交互方式。 以下各节介绍了如何针对特定硬件实现上述目的的详细信息。
📄️ 抽象层架构
📄️ Generator用户指南
🗃️ 场景
5个项目
抽象层的职责
如在基本概念章节中的主循环部分所述,TouchGFX Engine具有执行三个基本步骤的主循环。
- 收集输入(触摸坐标、按钮)
- 更新场景模型
- 将场景模型渲染到帧缓存
这三个步骤为履行TouchGFX Engine的主要职责提供了保障,即通过更新帧缓存来揭示应用程序的当前状态。
帧缓存数据到显示屏的实际传输以及对外部输入的收集并非由引擎直接处理,而后由引擎委托给TouchGFX AL实现。
主循环将反复不断地更新帧缓存数据。 此过程必须与实际更新频率和显示屏就绪状态保持同步,以确保所有帧均被传输并显示在显示屏上。 如果没有发生同步,则主循环将不断更新,并有可能在传输之前覆盖帧缓存。 此同步由AL负责。
TouchGFX AL还负责控制和访问帧缓冲存储区。 这意味着帧缓冲的所有访问都通过AL进行。
具体而言,TouchGFX AL的职责为:
职责 | 说明 |
---|---|
将TouchGFX Engine主循环与显示屏传输同步 | 当下一帧已计算并在可用的帧缓存中渲染时,引擎主循环必须停止,从而确保更新的帧缓存内容在被传输到显示屏之前不会被覆盖。 |
报告触摸与物理按钮事件 | 通过采样来确定触摸事件的发生及坐标信息的获取。 通过采样来确定物理按钮或类似部分是否被激活。 向引擎报告这些事件。 请注意,可通过不同的机制将其他外部事件传播到TouchGFX应用程序。 在后端通信章节了解有关该主题的更多信息。 |
同步帧缓冲访问 | 帧缓存由TouchGFX AL负责,由于它可能被不同的执行单元(如主循环线程和DMA)访问,TouchGFX AL必须提供一种保护该存储器的方式。 |
报告下一个可用的帧缓冲区 | AL必须能够回答接下来可更新当前帧缓冲的哪一部分。 在标准的双帧缓冲设置中,始终有个完整的帧缓冲区,因为在这种情况下,始终有一个完整的帧缓冲区专用于渲染,另一个帧缓冲区用于到显示屏的传输。 在单帧缓存区或部分帧缓存设置中,情况更复杂。 |
执行渲染操作 | 在渲染场景模型时,引擎主循环请求AL渲染一部分。 特定TouchGFX AL实现将利用底层硬件来渲染图形基元。 一个示例使用Chrom-ART图形加速器来渲染MCU上的位图。 TouchGFX随附专为所有可用平台而构建的优化渲染方法,因此无需对其进行定制。 |
处理将帧缓冲传输到显示屏 | 引擎通知AL必须传输哪个帧缓冲的哪一部分。 AL启动此传输,确保像素最终出现在显示屏上。 |
由于TouchGFX AL是一种没有自身线程或类似线程的被动软件模块,因此它必须通过从TouchGFX Engine主循环调用特定钩子(函数)或通过中断来执行其操作。
可用的钩子和中断集如下所述。
由AL开发人员来实现这些钩子,以便在给定底层硬件和操作系统下体现AL的职能。 如果AL开发人员需要其他方法来支持职能,则开发人员可以设置中断,并在特定时刻激活。 这方面的示例通过硬件定时器结合LTDC场同步中断。 显示就绪中断为场同步中断的一个示例。 请注意,这些中断的设置被视为AL开发的一部分。
示例设置: 两个帧缓存并内置LTDC的MCU
一种常见设置是使用具有LTDC的MCU的两个帧缓存。 在该设置中,每个钩子的AL操作通常如下。
设置AL以响应LTDC VSYNC中断,以便显示屏每次准备接收新帧时都执行I1。 这用于将主循环与显示同步。
钩子和中断 | 动作 |
---|---|
I1: 显示就绪 | 设置LTDC VSYNC中断,以触发该操作。 取消阻塞主循环,并启动在上一帧中准备好的帧缓存数据传输 |
H1: 报告触摸与物理按钮事件 | 返回有关触摸事件或物理按钮单击的任何信息 |
H2: 获取下一个可用的帧缓冲区 | 使用双缓冲设置,只需返回当前未传输至显示屏的帧缓冲的整个帧缓冲区 |
H3: 执行渲染操作 | 取决于MCU的性能。 执行其余的硬件辅助渲染操作和软件回退 |
H4: 区域渲染完成 | 无操作 |
H5: 渲染完成 | 阻塞主循环 |
此设置提供以下执行流程:
这里描述了AL设置的总体设计。 以下各节深入介绍了如何实现抽象层。