TouchGFX AL 開發簡介
The TouchGFX Abstraction Layer (AL), in a TouchGFX application, is the software component that sits between the Board Initialization Code, developed during the Board Bring-Up phase, and the TouchGFX Engine. Its main task is to tie together the Engine with the underlying hardware and operating system. This is done by abstracting the specifics of the underlying hardware and OS such that it can be treated in a unified way by the Engine.
AL由兩個不同的部分組成,分別為硬體抽象層(HAL)和作業系統抽象層(OSAL)。
In this section you will get a general introduction to the principles and responsibilities of the abstraction layer and how it interacts with the TouchGFX Engine.
You will also get an introduction to the TouchGFX Generator. The TouchGFX Generator, a part of X-CUBE-TOUCHGFX, is the primary tool for the creation of the Abstraction Layer. It is an STM32CubeMX Additional-Software component that helps developers configure the TouchGFX AL to run on their hardware platform. Based on existing STM32CubeMX settings and user inputs, TouchGFX Generator will generate the files required to configure a working TouchGFX application. They include files for TouchGFX HAL, TouchGFX OSAL and TouchGFX Configuration.
In the following sections you will get an understanding of the general architecture of the TouchGFX AL. You will also find a User Guide on how to use TouchGFX Generator inside STM32CubeMX. Useful scenarios are also shown to help you with common use cases.
📄️ 抽象層架構
🗃️ Generator User Guide
6個專案
🗃️ 場景
7個專案
抽象層的職責
如同在基本概念章節中的主迴圈部分所述,TouchGFX 引擎具有執行三個基本步驟的主迴圈。
- 收集輸入信號(觸控座標、按鈕)
- 更新場景模型
- 將場景模型渲染到幀緩存
這三個步驟確保了TouchGFX引擎的主要職責,即透過更新影像緩衝區來反映應用程式的當前狀態。
引擎並不直接處理影像緩衝區的資料到顯示器之間的實際傳輸以及對外部輸入信號的收集,而是引擎委託給TouchGFX AL來達成。
主迴圈將反復不斷地更新影像緩衝區的資料。 這個過程必須以「實際更新頻率」和「顯示器就緒狀態」保持同步,以確保所有圖框畫面均被傳輸並顯示在顯示器上。 如果二者之間不同步,則主迴圈將不斷更新且有可能在更新過程中影像緩衝區在傳輸之前被覆寫。 這項同步的工作由AL負責。
TouchGFX AL還負責控制影像緩衝區的記憶體區域及其存取。 這意味著影像緩衝區的所有存取都透過AL來完成。
具體而言,TouchGFX AL的職責為:
職責 | 描述 |
---|---|
將「TouchGFX引擎主迴圈」與「顯示傳輸」同步 | 當下一個圖框已完成計算並在可用的影像緩衝區中完成渲染算圖時,引擎主迴圈必須停止以確保影像緩衝區在被傳輸到顯示器之前不會被覆寫。 |
回報觸控及實體按鈕事件 | 以取樣的方式來確知觸控事件的發生及並取得其座標資訊。 透過取樣的方式來確定實體按鈕或類似的元件是否被啟動(activated)。 向引擎回報這些事件。 要注意的是其它的外部事件是藉由不同的機制傳播到TouchGFX應用程式。 在後端通訊(backend communication)章節有更多資訊。 |
同步影像緩衝區的存取 | 影像緩衝區記憶體是由TouchGFX AL所負責,由於會被其它執行單元(如主迴圈執行緒和DMA)使用,因此TouchGFX AL必須提供保護此記憶體的方式。 |
回報下一個可用的影像緩衝區 | AL必須能回答當前的影像緩衝區有那一個部份可在下一個可用的影像緩衝區當中更新。 這在標準的雙影像緩衝配置中即為完整的影像緩衝區,因為在這種情況下一直有一個完整的影像緩衝區專門用於渲染算圖,另一個影像緩衝區用於顯示器的傳輸。 但在單一或是局部影像緩衝區的配置下情況就比較複雜。 |
執行渲染算圖(render)操作 | 在對場景模型(scene model)作渲染算圖(render)時,引擎主迴圈會要求AL渲染對應的部分。 有一個特定的TouchGFX AL實作會利用底層硬體來渲染圖元(graphic primitive)。 當中的範例是在帶有Chrom-ART圖形加速器的MCU上渲染點陣圖。 TouchGFX內含為所有可用平台所最佳化的渲染算圖方法,因此不需要做客製化。 |
影像緩衝區到影示器的傳輸處理 | 引擎會通知AL必須傳輸哪個影像緩衝區的哪一部分。 AL需要啟動此傳輸來確保像素最終出現在實體顯示器上。 |
由於TouchGFX AL是一種被動軟體模組,沒有自己執行緒或類似的執行緒,因此它必須透過從TouchGFX引擎主迴圈呼叫特定的掛鉤(函式)或透過中斷來執行其操作。
可用的掛鉤和中斷集組如下所述。
由AL開發人員來實作這些掛鉤,以便在給定底層硬體和作業系統的條件下含蓋AL的職責。 如果AL開發人員需要其他方式來支援AL的職責,開發人員可以設置中斷以便在特定時刻啟動。 這方面的範例為透過「硬體計時器」和「LTDC垂直同步中斷」。 I1: 顯示就緒中斷是垂直同步中斷的一個範例。 要注意的是這些中斷的配置也是AL開發的一部份。
範例設定:雙影像緩衝區–內建LTDC的MCU
具有LTDC的MCU的兩個影像緩衝區是常見的配置。 在此配置當中每個掛鉤的AL操作通常如下。
設定AL以回應LTDC VSYNC中斷,如此可讓顯示器每次準備好接收新的圖框(frame)時都能執行I1。 這用於將主迴圈與顯示之間的同步。
掛鉤和中斷 | 動作 |
---|---|
I1:顯示就緒 | 解除(unblock)TouchGFX引擎主迴圈(main loop)的阻塞狀態, 並啟動上一個已準備好的圖框影像緩衝區傳輸。 |
H1:回報觸控及實體按鈕事件 | 回傳有關觸控事件或點按實體按鈕的任何資訊 |
H2:獲取下一個可用的影像緩衝區 | 要使用雙緩衝區的配置,只需要回傳當前所有未傳輸至顯示器的影像緩衝區域 |
H3:執行渲染算圖操作 | 依MCU的性能, 執行由硬體輔助的渲染算圖,若無硬體的輔助則進行純軟體的算圖 |
H4:區域渲染完成 | 無操作 |
H5:渲染完成 | 擱置主迴圈 |
這個設定提供以下執行流程:
這裡描述了AL配置的整體設計。 以下各節深入介紹了如何實作抽象層。