TouchGFX AL 開發簡介
位於TouchGFX應用程式中的TouchGFX抽象層(AL)是軟體元件,位於初啟用開發板階段(Board Bring-Up phase)所開發的開發板初始化程式碼(Board Initialization Code)與TouchGFX引擎之間。 其主要任務是將引擎與底層硬體和作業系統相結合。 這是藉由將底層硬體及作業系統抽象化來達成,因此引擎便可對AL作一致的處理。
AL由兩個不同的部分組成,分別為硬體抽象層(HAL)和作業系統抽象層(OSAL)。
本節將簡介抽象層的原理和其所扮演的角色,以及它如何與TouchGFX引擎互動。
您也將透過簡介瞭解TouchGFX Generator。 TouchGFX Generator屬於X-CUBE-TOUCHGFX的一部分,是建立抽象層的主要工具。 這是STM32CubeMX的額外軟體元件,可協助開發人員設定TouchGFX AL以便於其硬體平台執行。 根據現有的STM32CubeMX設定與使用者的輸入,TouchGFX Generator將產生所需檔案,用於設定可運作的TouchGFX應用程式, 包含了TouchGFX HAL、TouchGFX OSAL和TouchGFX設定。
後續章節將協助您瞭解TouchGFX AL的一般架構。 您也將獲得使用者指南,以瞭解如何在STM32CubeMX內部使用TouchGFX Generator。 其中也會提供各種實用的使用情境,協助您面對常見的使用案例。
📄️ 抽象層架構
如前一節所述,TouchGFX AL具有一套特定的職責。 這套職責一般是透過RTOS (OSAL)實作,可以在AL (HAL)的硬體部分實作,也可在與TouchGFX引擎同步的AL部分實作。 下表總結了這些在前一節中概述的職責:
🗃️ Generator使用者指南
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配置的整體設計。 以下各節深入介紹了如何實作抽象層。