添加GUIX支持-STM32F779I-EVAL
* GUI 线程 *//* 触摸线程 *//* GUIX 画布内存,放到 SDRAM */
·
本节介绍如何在 STM32 + ThreadX 工程中集成 GUIX 图形框架,包括源码引入、工程配置以及初始化流程。
1. 获取 GUIX 源码
从官方仓库下载 GUIX:
https://github.com/eclipse-threadx/guix
2. 拷贝 GUIX 源码到工程
将 GUIX 相关源码拷贝到工程的 Middlewares 目录下:

- common/ports目录下的文件来自GUIX仓库
- drivers 目录下的文件可从 GUIX 的 examples 中获取
3. 添加 BSP 与 HAL 依赖
GUIX 的显示与触摸驱动依赖底层 BSP 和 HAL 文件,需要一并加入工程:
- 添加BSP文件

- 在CubeMX里启用LTDC和DMA2D外设,生成对应HAL文件。

4. STM32CubeIDE 工程配置
- 在 Project Properties → C/C++ Build → Settings → Include paths 中添加相关头文件目录:

- 添加宏定义

5. 创建 GUIX Studio 工程
GUI 界面通过 GUIX Studio 生成。 GUIX Studio 的安装与使用说明可参考官方文档:
https://github.com/eclipse-threadx/rtos-docs/blob/main/rtos-docs/guix/guix-studio-2.md
创建并生成工程后,会得到:
- *_resources.c/h
- *_specifications.c/h
将生成的文件加入 STM32 工程。

6. GUIX 初始化代码
6.1 线程与资源定义
#include "gx_api.h"
#include "gx_display_driver_stm32f779i-eval_565rgb.h"
#include "xt_gui_resources.h"
#include "xt_gui_specifications.h"
#define CANVAS_MEMORY_SIZE (DISPLAY_1_X_RESOLUTION * DISPLAY_1_Y_RESOLUTION)
/* GUI 线程 */
TX_THREAD gui_thread;
UCHAR gui_thread_stack[4096];
/* 触摸线程 */
TX_THREAD touch_thread;
ULONG touch_thread_stack[1024];
/* GUIX 画布内存,放到 SDRAM */
__attribute__((section(".SD_RAM"))) USHORT canvas_memory[CANVAS_MEMORY_SIZE];
GX_WINDOW_ROOT *root;
6.2 GUI 线程创建
void gui_setup()
{
/* 创建Touch线程 */
tx_thread_create(&touch_thread, "GUIX Touch Thread", touch_thread_entry, 0,
touch_thread_stack, sizeof(touch_thread_stack),
GX_SYSTEM_THREAD_PRIORITY - 1,
GX_SYSTEM_THREAD_PRIORITY - 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* 创建GUI线程 */
tx_thread_create(&gui_thread, "GUI Thread", gui_thread_entry, 0,
gui_thread_stack, sizeof(gui_thread_stack),
GX_SYSTEM_THREAD_PRIORITY,
GX_SYSTEM_THREAD_PRIORITY, TX_NO_TIME_SLICE, TX_AUTO_START);
}
说明:
- Touch 线程优先级略高于 GUI 线程,保证触摸响应及时
- GUIX 通常不使用时间片轮转(TX_NO_TIME_SLICE)
6.3 GUIX 初始化流程
VOID gui_thread_entry(ULONG thread_input)
{
/* 初始化 GUIX */
gx_system_initialize();
/* 配置display */
gx_studio_display_configure(DISPLAY_1, stm32f779_graphics_driver_setup_565rgb,
LANGUAGE_ENGLISH, DISPLAY_1_THEME_1, &root);
/* 定义画布memory */
gx_canvas_memory_define(root->gx_window_root_canvas, (GX_COLOR *)canvas_memory, CANVAS_MEMORY_SIZE * sizeof(USHORT));
/* 创建主窗口. */
gx_studio_named_widget_create("main_screen", (GX_WIDGET *)root, GX_NULL);
/* 显示root窗口. */
gx_widget_show(root);
/* 运行 GUIX */
gx_system_start();
}
7. 启用 CPU Cache
/* Enable I-Cache */
SCB_EnableICache();
/* Enable D-Cache */
SCB_EnableDCache();
8. 启动 GUIX
在 App_ThreadX_Init() 中调用:
gui_setup();
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐



所有评论(0)