【STM32H7】第12章 GUIX Studio生成代码移植到硬件平台

最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429php

第12章       GUIX Studio生成代码移植到硬件平台

本章节为你们讲解GUIX Studio生成的代码移植到硬件平台的方法canvas

12.1初学者重要提示app

12.2 GUIX Studio生成代码文件ide

12.3 GUIX Studio生成文件移植到MDK AC5函数

12.4 GUIX Studio生成文件移植到MDK AC6测试

12.5 GUIX Studio生成文件移植到IARui

12.6 GUIX Studio生成文件移植到Embedded Studiospa

12.7实验例程设计

12.8 总结3d

 

 

12.1 初学者重要提示

  1.  移植GUIX Studio生成的代码到硬件平台有好几处须要注意的地方,你们移植的时候必定要注意,本章教程也进行了详细说明。

12.2 GUIX Studio生成代码文件

第11章讲解了GUIX Studio的使用方法,并制做了一个GUIX Studio的简单Demo。咱们这里直接使用这个Demo:

 

点击GUIX Studio左上角的Project –>Generate All Output Files:

 

弹出以下界面:

 

一、用于选择导出那些内容,默认是所有导出,建议所有导出,防止没必要要的麻烦。

二、若是勾上复选框,会多出来一个编辑框,能够设置生成的资源文件名:

 

三、若是勾上binary mode,表示生成的资源文件使用二进制模式。

  •   选择S-Record

表示资源文件后缀采用srec,此设置模式下还能够设置偏移地址

 

  •   选择Binary

表示资源文件后缀采用bin。

四、若是勾上复选框,表示生成资源头文件,取消表示不生成。

 

了解了这些配置选项后,再设置就比较容易理解了,当前咱们这里所有生成源文件,带资源文件头,具体配置以下:

 

设置完毕后,点击右下角的Generate按钮就能够生成文件了,点击后弹出以下对话框,表示生成成功:

 

生成的文件就在你们建立GUIX Studio工程时指定的文件里面,生成的文件以下:

 

  •  guiapp_resources.c
  • guiapp_resources.h

这两个文件主要用于字库,图库等资源。

  •  gui_specifications.c
  • gui_specifications.h

这两个文件是基于GUIX API新封装的一些函数,方便用户调用。

12.3 GUIX Studio生成文件移植到MDK AC5

这里分步为你们详细说明:

12.3.1        第1步:添加生成的文件到工程里

工程模板使用前面章节制做的例子V7-2005_GUIX Template(RG565)。打开路径:\User\guix,将此文件里面的以下四个文件删掉:


 

而后将咱们新制做的这四个文件添加进去,打开工程后,效果以下:


 

因为新做的GUIX Studio工程名是guiapp,与此例子以前使用的GUI Studio模板名同样,因此直接替换便可,若是你们建立的工程名不一致,须要你们手动删掉以前的,并添加新生成的文件。

12.3.2        第2步:修改gx_studio_display_configure形参

此函数的实如今guiapp_specifications.c文件里面,GUIX Studio自动生成的,无需用户管,用户要作就是填对参数便可:

UINT gx_studio_display_configure(USHORT display, UINT (*driver)(GX_DISPLAY *),
    GX_UBYTE language, USHORT theme, GX_WINDOW_ROOT **return_root)
{
    GX_CONST GX_THEME *theme_ptr;
    GX_RECTANGLE size;

    GX_STUDIO_DISPLAY_INFO *display_info = &guiapp_display_table[display];


/* 建立显示区 */
    gx_display_create(display_info->display,
                      display_info->name,
                      driver,
                      (GX_VALUE) display_info->x_resolution,
                      (GX_VALUE) display_info->y_resolution);

/* 安装主题 */
    if(display_info->theme_table)
    {
        theme_ptr = display_info->theme_table[theme];
        if(theme_ptr)
        {
            gx_display_color_table_set(display_info->display, theme_ptr->theme_color_table,
 theme_ptr->theme_color_table_size);
            
/* 安装颜色板 */
            if (display_info->display->gx_display_driver_palette_set &&
                theme_ptr->theme_palette != NULL)
            {
                display_info->display->gx_display_driver_palette_set(display_info->display,
 theme_ptr->theme_palette, theme_ptr->theme_palette_size);
            }

            gx_display_font_table_set(display_info->display, theme_ptr->theme_font_table,
 theme_ptr->theme_font_table_size);
            gx_display_pixelmap_table_set(display_info->display, theme_ptr->theme_pixelmap_table,
 theme_ptr->theme_pixelmap_table_size);
            gx_system_scroll_appearance_set(theme_ptr->theme_vertical_scroll_style,
 (GX_SCROLLBAR_APPEARANCE *) &theme_ptr->theme_vertical_scrollbar_appearance);
            gx_system_scroll_appearance_set(theme_ptr->theme_horizontal_scroll_style,
 (GX_SCROLLBAR_APPEARANCE *) &theme_ptr->theme_horizontal_scrollbar_appearance);
            gx_display_language_table_set_ext(display_info->display, display_info->language_table, 
(GX_UBYTE) display_info->language_table_size, display_info->string_table_size);
            gx_display_active_language_set(display_info->display, language);
        }
    }


/* 建立画布 */
    gx_canvas_create(display_info->canvas,
                     display_info->canvas_name,
                     display_info->display,
                     GX_CANVAS_MANAGED | GX_CANVAS_VISIBLE,
                     display_info->x_resolution,
                     display_info->y_resolution,
                     display_info->canvas_memory,
                     display_info->canvas_memory_size);

/* 建立画布对应的根窗口 */
    gx_utility_rectangle_define(&size,
                                0, 0,
                                (GX_VALUE) (display_info->x_resolution - 1),
                                (GX_VALUE) (display_info->y_resolution - 1));

    gx_window_root_create(display_info->root_window,
                          display_info->name,
                          display_info->canvas, GX_STYLE_NONE, 0, &size);
    if (return_root)
    {
        *return_root = display_info->root_window;
    }
    return GX_SUCCESS;
}
  •   第1个参数是显示屏索引,若是是GUIX Studio配置的第1个显示屏,此处填0,若是是配置的第2个显示屏,此处填1,以此类推。对应的索引宏定义已经在GUIX Studio生成的guiapp_resources.h文件里面定义,你们能够直接调用。
/* Display and theme definitions */
#define DISPLAY_1 0
#define DISPLAY_1_COLOR_FORMAT GX_COLOR_FORMAT_565RGB
#define DISPLAY_1_X_RESOLUTION 800
#define DISPLAY_1_Y_RESOLUTION 480
#define DISPLAY_1_THEME_1 0
#define DISPLAY_1_THEME_TABLE_SIZE 1
  •  第2个参数是显示屏底层驱动接口函数,此接口函数的函数名能够随意定义,好比咱们这里的RGB565颜色格式采用的函数stm32h7_graphics_driver_setup_565rgb。
  •   第3个参数语言ID,这个参数是在GUIX Studio生成的guiapp_resources.h文件里面定义,若是你们定义了多国语言,此文件里面会有多个ID宏定义供你们使用。咱们前面GUIX Studio工程仅使用了英文,因此这里只能填LANGUAGE_ENGLISH。
/* Language definitions */
#define LANGUAGE_ENGLISH 0
#define DISPLAY_1_LANGUAGE_TABLE_SIZE 1
  •  第4个参数是界面主题索引,这个参数也是在GUIX Studio生成的guiapp_resources.h文件里面定义,一个界面能够有多个主题,使用那个主题,填对应的宏定义便可:
#define DISPLAY_1_X_RESOLUTION 800
#define DISPLAY_1_Y_RESOLUTION 480
#define DISPLAY_1_THEME_1 0
#define DISPLAY_1_THEME_TABLE_SIZE 1
  •  第5个参数是根窗口句柄。

 

有了这些认识后,再配置就比较简单了,咱们这里要修改成以下:

gx_studio_display_configure(DISPLAY_1, stm32h7_graphics_driver_setup_565rgb,
        LANGUAGE_ENGLISH, DISPLAY_1_THEME_1, &root);

12.3.3        第3步:修改gx_studio_named_widget_create形参

此函数的实现也在guiapp_specifications.c文件里面,GUIX Studio自动生成的,无需用户管,用户要作就是填对参数便可,特别是第1个参数:

UINT gx_studio_named_widget_create(char *name, GX_WIDGET *parent, GX_WIDGET **new_widget)
{
    UINT status = GX_FAILURE;
    GX_CONST GX_STUDIO_WIDGET_ENTRY *entry = guiapp_widget_table;
    GX_WIDGET *widget = GX_NULL;

    while(entry->widget_information)
    {
        if (!strcmp(name, entry->widget_information->widget_name))
        {
            widget = gx_studio_widget_create((GX_BYTE *) entry->widget, entry->widget_information, parent);
            if (widget)
            {
                status = GX_SUCCESS;
            }
            break;
        }
        entry++;
    }

    if (new_widget)
    {
        *new_widget = widget;
    }
    return status;
}
  •  第1个参数比较重要,不是随便写的,由于此函数里面的strcmp会作比较匹配,查看此窗口名是否存在。你们要填的这个参数在文件guiapp_specifications.c的xxxx__widget_table里面定义,对应咱们前面GUIX Studio生成的代码就是guiapp_widget_table,咱们这里仅有一个window_define:
GX_CONST GX_STUDIO_WIDGET_ENTRY guiapp_widget_table[] =
{
    { &window_define, (GX_WIDGET *) &window },
    {GX_NULL, GX_NULL}
};
GX_CONST GX_STUDIO_WIDGET window_define =
{
    "window",
    GX_TYPE_WINDOW,                          /* widget type                    */
    GUIX_ID_WINDOW0,                         /* widget id                      */
    #if defined(GX_WIDGET_USER_DATA)
    0,                                       /* user data                      */
    #endif
    GX_STYLE_BORDER_THIN|GX_STYLE_ENABLED,   /* style flags                    */
    GX_STATUS_ACCEPTS_FOCUS,                 /* status flags                   */
    sizeof(WINDOW_CONTROL_BLOCK),            /* control block size             */
    GX_COLOR_ID_WINDOW_FILL,                 /* normal color id                */
    GX_COLOR_ID_WINDOW_FILL,                 /* selected color id              */
    GX_COLOR_ID_DISABLED_FILL,               /* disabled color id              */
    gx_studio_window_create,                 /* create function                */
    GX_NULL,                                 /* drawing function override      */
    GX_NULL,                                 /* event function override        */
    {0, 0, 799, 479},                        /* widget size                    */
    GX_NULL,                                 /* next widget                    */
    &window_prompt_define,                   /* child widget                   */
    0,                                       /* control block                  */
    (void *) &window_properties              /* extended properties            */
};

咱们这里第1个参数要写window。

  •  第2个参数是根窗口句柄。
  •  第3个参数是新建立窗口句柄。

 

有了这些认识后,再配置就比较简单了,咱们这里要修改成以下:

  gx_studio_named_widget_create("window", (GX_WIDGET *)root, (GX_WIDGET **)&pScreen);

12.3.4        第4步:修改文件App_SysFunction.c

针对咱们配套的例子模板,不须要修改这个文件,你们本身作的移植须要根据状况选择是否修改。针对这个文件要注意下面几点:

  •   动态内存的分配

主要配置了GUIX动态内存的地址和大小以及画布的地址。你们根据本身的状况作修改便可:

/*
*********************************************************************************************************
*                                            动态内存分配
*********************************************************************************************************
*/
#define       GUI_NUMBYTES     1024*1024*24                           /* 设置动态内存大小 */
#define       Canvas_Memory    0xC0400000                             /* 设置Canvas地址   */
TX_BYTE_POOL  memory_pool;
uint8_t       *MemoryBlock = (uint8_t *)(0xC0000000 + 1024*1024*8); /* 动态内存地址    */

动态内存设置的地址:0xC0000000 + 1024*1024*8, 大小24MB。

canvas画布地址:0xC0400000, 大小4MB,实际没有使用这么大,以咱们本次GUIX Studio生成的代码为例,实际大小在guiapp_specifications.c文件里面定义:

GX_STUDIO_DISPLAY_INFO guiapp_display_table[1] =
{
    {
    "display_1",
    "display_1_canvas",
    display_1_theme_table,
    display_1_language_table,
    DISPLAY_1_THEME_TABLE_SIZE,
    DISPLAY_1_LANGUAGE_TABLE_SIZE,
    DISPLAY_1_STRING_TABLE_SIZE,
    800,                                     /* x resolution                   */
    480,                                     /* y resolution                   */
    &display_1_control_block,
    &display_1_canvas_control_block,
    &display_1_root_window,
    GX_NULL,                                 /* canvas memory area             */
    768000                                   /* canvas memory size in bytes    */
    }
};

实际须要768000字节。咱们这里留出冗余是为了之后多画布使用。你们能够根据实际须要作修改。

  •   结构体guiapp_display_table

为了方便设置画布,将guiapp_specifications.c文件里面结构体guiapp_display_table放到了此文件里面引用,你们根据本身的定义作修改。

/*
*********************************************************************************************************
*                                            变量
*********************************************************************************************************
*/
extern GX_STUDIO_DISPLAY_INFO guiapp_display_table[1];
  •  自适应不一样分辨率显示屏

咱们的显示屏有4.3寸,5寸和7寸,分辨率主要有两类480*272和800*480。为了让800*480分辨率下实现的界面在480*272下也可使用,这里作了一个简单的自适应,即800*480下设计的内容都在480*272分辨率范围内,那么在两个分辨率下都是能够正常显示的。

/*
*********************************************************************************************************
*    函 数 名: gx_initconfig
*    功能说明: GUIX
*    形    参: 无       
*    返 回 值: 无
*********************************************************************************************************
*/
void gx_initconfig(void) 
{
    /* 省略未写 */
    
    /* 自适应不一样分辨率显示屏 */
    switch (g_LcdType)
    {
        
        case LCD_43_480X272:        /* 4.3寸 480 * 272 */    
        case LCD_50_480X272:        /* 5.0寸 480 * 272 */
            guiapp_display_table[0].x_resolution = 480;
            guiapp_display_table[0].y_resolution = 272;
            break;
        
        case LCD_50_800X480:        /* 5.0寸 800 * 480 */
        case LCD_70_800X480:        /* 7.0寸 800 * 480 */    
            guiapp_display_table[0].x_resolution = 800;
            guiapp_display_table[0].y_resolution = 480;
            break;
        
        default:    
            break;
    }
}
  •  画布地址空间

画布地址设置放在了函数gx_initconfig末尾。

/*
*********************************************************************************************************
*    函 数 名: gx_initconfig
*    功能说明: GUIX
*    形    参: 无       
*    返 回 值: 无
*********************************************************************************************************
*/
void gx_initconfig(void) 
{
    /* 省略未写 */
    
    guiapp_display_table[0].canvas_memory = (GX_COLOR *)Canvas_Memory;
}

12.3.5        第5步:编译运行

经过前面四步就完成了GUIX Studio生成代码移植到MDK AC5,而后你们编译运行便可。这里特别注意一点,若是你们测试遇到更新了GUIX Studio生成的代码,可是实际板子运行效果没有变化,此时就须要你们打开GUIX Studio生成的每一个C文件单独编译,而后全编译便可。

12.4 GUIX Studio生成文件移植到MDK AC6

移植到MDK AC5和AC6基本是同样的。

12.4.1        第1步:添加生成的文件到工程里

工程模板使用前面章节制做的例子V7-2005_GUIX Template(RG565)。打开路径:\User\guix,将此文件里面的以下四个文件删掉:


 

而后将咱们新制做的这四个文件添加进去,打开工程后,效果以下:


 

因为新做的GUIX Studio工程名是guiapp,与此例子以前使用的GUI Studio模板名同样,因此直接替换便可,若是你们建立的工程名不一致,须要你们手动删掉以前的,并添加新生成的文件。

12.4.2        第2步:修改gx_studio_display_configure形参

此函数的实如今guiapp_specifications.c文件里面,GUIX Studio自动生成的,无需用户管,用户要作就是填对参数便可:

UINT gx_studio_display_configure(USHORT display, UINT (*driver)(GX_DISPLAY *),
    GX_UBYTE language, USHORT theme, GX_WINDOW_ROOT **return_root)
{
    GX_CONST GX_THEME *theme_ptr;
    GX_RECTANGLE size;

    GX_STUDIO_DISPLAY_INFO *display_info = &guiapp_display_table[display];


/* 建立显示区 */
    gx_display_create(display_info->display,
                      display_info->name,
                      driver,
                      (GX_VALUE) display_info->x_resolution,
                      (GX_VALUE) display_info->y_resolution);

/* 安装主题 */
    if(display_info->theme_table)
    {
        theme_ptr = display_info->theme_table[theme];
        if(theme_ptr)
        {
            gx_display_color_table_set(display_info->display, theme_ptr->theme_color_table,
 theme_ptr->theme_color_table_size);
            
/* 安装颜色板 */
            if (display_info->display->gx_display_driver_palette_set &&
                theme_ptr->theme_palette != NULL)
            {
                display_info->display->gx_display_driver_palette_set(display_info->display,
 theme_ptr->theme_palette, theme_ptr->theme_palette_size);
            }

            gx_display_font_table_set(display_info->display, theme_ptr->theme_font_table,
 theme_ptr->theme_font_table_size);
            gx_display_pixelmap_table_set(display_info->display, theme_ptr->theme_pixelmap_table,
 theme_ptr->theme_pixelmap_table_size);
            gx_system_scroll_appearance_set(theme_ptr->theme_vertical_scroll_style,
 (GX_SCROLLBAR_APPEARANCE *) &theme_ptr->theme_vertical_scrollbar_appearance);
            gx_system_scroll_appearance_set(theme_ptr->theme_horizontal_scroll_style,
 (GX_SCROLLBAR_APPEARANCE *) &theme_ptr->theme_horizontal_scrollbar_appearance);
            gx_display_language_table_set_ext(display_info->display, display_info->language_table, 
(GX_UBYTE) display_info->language_table_size, display_info->string_table_size);
            gx_display_active_language_set(display_info->display, language);
        }
    }


/* 建立画布 */
    gx_canvas_create(display_info->canvas,
                     display_info->canvas_name,
                     display_info->display,
                     GX_CANVAS_MANAGED | GX_CANVAS_VISIBLE,
                     display_info->x_resolution,
                     display_info->y_resolution,
                     display_info->canvas_memory,
                     display_info->canvas_memory_size);

/* 建立画布对应的根窗口 */
    gx_utility_rectangle_define(&size,
                                0, 0,
                                (GX_VALUE) (display_info->x_resolution - 1),
                                (GX_VALUE) (display_info->y_resolution - 1));

    gx_window_root_create(display_info->root_window,
                          display_info->name,
                          display_info->canvas, GX_STYLE_NONE, 0, &size);
    if (return_root)
    {
        *return_root = display_info->root_window;
    }
    return GX_SUCCESS;
}
  •   第1个参数是显示屏索引,若是是GUIX Studio配置的第1个显示屏,此处填0,若是是配置的第2个显示屏,此处填1,以此类推。对应的索引宏定义已经在GUIX Studio生成的guiapp_resources.h文件里面定义,你们能够直接调用。
/* Display and theme definitions */
#define DISPLAY_1 0
#define DISPLAY_1_COLOR_FORMAT GX_COLOR_FORMAT_565RGB
#define DISPLAY_1_X_RESOLUTION 800
#define DISPLAY_1_Y_RESOLUTION 480
#define DISPLAY_1_THEME_1 0
#define DISPLAY_1_THEME_TABLE_SIZE 1
  •   第2个参数是显示屏底层驱动接口函数,此接口函数的函数名能够随意定义,好比咱们这里的RGB565颜色格式采用的函数stm32h7_graphics_driver_setup_565rgb。
  •   第3个参数语言ID,这个参数是在GUIX Studio生成的guiapp_resources.h文件里面定义,若是你们定义了多国语言,此文件里面会有多个ID宏定义供你们使用。咱们前面GUIX Studio工程仅使用了英文,因此这里只能填LANGUAGE_ENGLISH。
/* Language definitions */
#define LANGUAGE_ENGLISH 0
#define DISPLAY_1_LANGUAGE_TABLE_SIZE 1
  •   第4个参数是界面主题索引,这个参数也是在GUIX Studio生成的guiapp_resources.h文件里面定义,一个界面能够有多个主题,使用那个主题,填对应的宏定义便可:
#define DISPLAY_1_X_RESOLUTION 800
#define DISPLAY_1_Y_RESOLUTION 480
#define DISPLAY_1_THEME_1 0
#define DISPLAY_1_THEME_TABLE_SIZE 1
  •   第5个参数是根窗口句柄。

 

有了这些认识后,再配置就比较简单了,咱们这里要修改成以下:

gx_studio_display_configure(DISPLAY_1, stm32h7_graphics_driver_setup_565rgb,
        LANGUAGE_ENGLISH, DISPLAY_1_THEME_1, &root);

12.4.3        第3步:修改gx_studio_named_widget_create形参

此函数的实现也在guiapp_specifications.c文件里面,GUIX Studio自动生成的,无需用户管,用户要作就是填对参数便可,特别是第1个参数:

UINT gx_studio_named_widget_create(char *name, GX_WIDGET *parent, GX_WIDGET **new_widget)
{
    UINT status = GX_FAILURE;
    GX_CONST GX_STUDIO_WIDGET_ENTRY *entry = guiapp_widget_table;
    GX_WIDGET *widget = GX_NULL;

    while(entry->widget_information)
    {
        if (!strcmp(name, entry->widget_information->widget_name))
        {
            widget = gx_studio_widget_create((GX_BYTE *) entry->widget, entry->widget_information, parent);
            if (widget)
            {
                status = GX_SUCCESS;
            }
            break;
        }
        entry++;
    }

    if (new_widget)
    {
        *new_widget = widget;
    }
    return status;
}
  •   第1个参数比较重要,不是随便写的,由于此函数里面的strcmp会作比较匹配,查看此窗口名是否存在。你们要填的这个参数在文件guiapp_specifications.c的xxxx__widget_table里面定义,对应咱们前面GUIX Studio生成的代码就是guiapp_widget_table,咱们这里仅有一个window_define:
GX_CONST GX_STUDIO_WIDGET_ENTRY guiapp_widget_table[] =
{
    { &window_define, (GX_WIDGET *) &window },
    {GX_NULL, GX_NULL}
};
GX_CONST GX_STUDIO_WIDGET window_define =
{
    "window",
    GX_TYPE_WINDOW,                          /* widget type                    */
    GUIX_ID_WINDOW0,                         /* widget id                      */
    #if defined(GX_WIDGET_USER_DATA)
    0,                                       /* user data                      */
    #endif
    GX_STYLE_BORDER_THIN|GX_STYLE_ENABLED,   /* style flags                    */
    GX_STATUS_ACCEPTS_FOCUS,                 /* status flags                   */
    sizeof(WINDOW_CONTROL_BLOCK),            /* control block size             */
    GX_COLOR_ID_WINDOW_FILL,                 /* normal color id                */
    GX_COLOR_ID_WINDOW_FILL,                 /* selected color id              */
    GX_COLOR_ID_DISABLED_FILL,               /* disabled color id              */
    gx_studio_window_create,                 /* create function                */
    GX_NULL,                                 /* drawing function override      */
    GX_NULL,                                 /* event function override        */
    {0, 0, 799, 479},                        /* widget size                    */
    GX_NULL,                                 /* next widget                    */
    &window_prompt_define,                   /* child widget                   */
    0,                                       /* control block                  */
    (void *) &window_properties              /* extended properties            */
};

咱们这里第1个参数要写window。

  •   第2个参数是根窗口句柄。
  •   第3个参数是新建立窗口句柄。

 

有了这些认识后,再配置就比较简单了,咱们这里要修改成以下:

  gx_studio_named_widget_create("window", (GX_WIDGET *)root, (GX_WIDGET **)&pScreen);

12.4.4        第4步:修改文件App_SysFunction.c

针对咱们配套的例子模板,不须要修改这个文件,你们本身作的移植须要根据状况选择是否修改。针对这个文件要注意下面几点:

  •  动态内存的分配

主要配置了GUIX动态内存的地址和大小以及画布的地址。你们根据本身的状况作修改便可:

/*
*********************************************************************************************************
*                                            动态内存分配
*********************************************************************************************************
*/
#define       GUI_NUMBYTES     1024*1024*24                           /* 设置动态内存大小 */
#define       Canvas_Memory    0xC0400000                             /* 设置Canvas地址   */
TX_BYTE_POOL  memory_pool;
uint8_t       *MemoryBlock = (uint8_t *)(0xC0000000 + 1024*1024*8); /* 动态内存地址    */

动态内存设置的地址:0xC0000000 + 1024*1024*8, 大小24MB。

canvas画布地址:0xC0400000, 大小4MB,实际没有使用这么大,以咱们本次GUIX Studio生成的代码为例,实际大小在guiapp_specifications.c文件里面定义:

GX_STUDIO_DISPLAY_INFO guiapp_display_table[1] =
{
    {
    "display_1",
    "display_1_canvas",
    display_1_theme_table,
    display_1_language_table,
    DISPLAY_1_THEME_TABLE_SIZE,
    DISPLAY_1_LANGUAGE_TABLE_SIZE,
    DISPLAY_1_STRING_TABLE_SIZE,
    800,                                     /* x resolution                   */
    480,                                     /* y resolution                   */
    &display_1_control_block,
    &display_1_canvas_control_block,
    &display_1_root_window,
    GX_NULL,                                 /* canvas memory area             */
    768000                                   /* canvas memory size in bytes    */
    }
};

实际须要768000字节。咱们这里留出冗余是为了之后多画布使用。你们能够根据实际须要作修改。

  •    结构体guiapp_display_table

为了方便设置画布,将guiapp_specifications.c文件里面结构体guiapp_display_table放到了此文件里面引用,你们根据本身的定义作修改。

/*
*********************************************************************************************************
*                                            变量
*********************************************************************************************************
*/
extern GX_STUDIO_DISPLAY_INFO guiapp_display_table[1];
  •   自适应不一样分辨率显示屏

咱们的显示屏有4.3寸,5寸和7寸,分辨率主要有两类480*272和800*480。为了让800*480分辨率下实现的界面在480*272下也可使用,这里作了一个简单的自适应,即800*480下设计的内容都在480*272分辨率范围内,那么在两个分辨率下都是能够正常显示的。

/*
*********************************************************************************************************
*    函 数 名: gx_initconfig
*    功能说明: GUIX
*    形    参: 无       
*    返 回 值: 无
*********************************************************************************************************
*/
void gx_initconfig(void) 
{
    /* 省略未写 */
    
    /* 自适应不一样分辨率显示屏 */
    switch (g_LcdType)
    {
        
        case LCD_43_480X272:        /* 4.3寸 480 * 272 */    
        case LCD_50_480X272:        /* 5.0寸 480 * 272 */
            guiapp_display_table[0].x_resolution = 480;
            guiapp_display_table[0].y_resolution = 272;
            break;
        
        case LCD_50_800X480:        /* 5.0寸 800 * 480 */
        case LCD_70_800X480:        /* 7.0寸 800 * 480 */    
            guiapp_display_table[0].x_resolution = 800;
            guiapp_display_table[0].y_resolution = 480;
            break;
        
        default:    
            break;
    }
}
  •  画布地址空间

画布地址设置放在了函数gx_initconfig末尾。

/*
*********************************************************************************************************
*    函 数 名: gx_initconfig
*    功能说明: GUIX
*    形    参: 无       
*    返 回 值: 无
*********************************************************************************************************
*/
void gx_initconfig(void) 
{
    /* 省略未写 */
    
    guiapp_display_table[0].canvas_memory = (GX_COLOR *)Canvas_Memory;
}

12.4.5        第5步:编译运行

经过前面四步就完成了GUIX Studio生成代码移植到MDK AC6,而后你们编译运行便可。这里特别注意一点,若是你们测试遇到更新了GUIX Studio生成的代码,可是实际板子运行效果没有变化,此时就须要你们打开GUIX Studio生成的每一个C文件单独编译,而后全编译便可。

12.5 GUIX Studio生成文件移植到IAR

移植到IAR与移植的MDK基本是同样的。

12.5.1        第1步:添加生成的文件到工程里

工程模板使用前面章节制做的例子V7-2005_GUIX Template(RG565)。打开路径:\User\guix,将此文件里面的以下四个文件删掉:


 

而后将咱们新制做的这四个文件添加进去,打开工程后,效果以下:


 

因为新做的GUIX Studio工程名是guiapp,与此例子以前使用的GUI Studio模板名同样,因此直接替换便可,若是你们建立的工程名不一致,须要你们手动删掉以前的,并添加新生成的文件。

12.5.2        第2步:修改gx_studio_display_configure形参

此函数的实如今guiapp_specifications.c文件里面,GUIX Studio自动生成的,无需用户管,用户要作就是填对参数便可:

UINT gx_studio_display_configure(USHORT display, UINT (*driver)(GX_DISPLAY *),
    GX_UBYTE language, USHORT theme, GX_WINDOW_ROOT **return_root)
{
    GX_CONST GX_THEME *theme_ptr;
    GX_RECTANGLE size;

    GX_STUDIO_DISPLAY_INFO *display_info = &guiapp_display_table[display];


/* 建立显示区 */
    gx_display_create(display_info->display,
                      display_info->name,
                      driver,
                      (GX_VALUE) display_info->x_resolution,
                      (GX_VALUE) display_info->y_resolution);

/* 安装主题 */
    if(display_info->theme_table)
    {
        theme_ptr = display_info->theme_table[theme];
        if(theme_ptr)
        {
            gx_display_color_table_set(display_info->display, theme_ptr->theme_color_table,
 theme_ptr->theme_color_table_size);
            
/* 安装颜色板 */
            if (display_info->display->gx_display_driver_palette_set &&
                theme_ptr->theme_palette != NULL)
            {
                display_info->display->gx_display_driver_palette_set(display_info->display,
 theme_ptr->theme_palette, theme_ptr->theme_palette_size);
            }

            gx_display_font_table_set(display_info->display, theme_ptr->theme_font_table,
 theme_ptr->theme_font_table_size);
            gx_display_pixelmap_table_set(display_info->display, theme_ptr->theme_pixelmap_table,
 theme_ptr->theme_pixelmap_table_size);
            gx_system_scroll_appearance_set(theme_ptr->theme_vertical_scroll_style,
 (GX_SCROLLBAR_APPEARANCE *) &theme_ptr->theme_vertical_scrollbar_appearance);
            gx_system_scroll_appearance_set(theme_ptr->theme_horizontal_scroll_style,
 (GX_SCROLLBAR_APPEARANCE *) &theme_ptr->theme_horizontal_scrollbar_appearance);
            gx_display_language_table_set_ext(display_info->display, display_info->language_table, 
(GX_UBYTE) display_info->language_table_size, display_info->string_table_size);
            gx_display_active_language_set(display_info->display, language);
        }
    }


/* 建立画布 */
    gx_canvas_create(display_info->canvas,
                     display_info->canvas_name,
                     display_info->display,
                     GX_CANVAS_MANAGED | GX_CANVAS_VISIBLE,
                     display_info->x_resolution,
                     display_info->y_resolution,
                     display_info->canvas_memory,
                     display_info->canvas_memory_size);

/* 建立画布对应的根窗口 */
    gx_utility_rectangle_define(&size,
                                0, 0,
                                (GX_VALUE) (display_info->x_resolution - 1),
                                (GX_VALUE) (display_info->y_resolution - 1));

    gx_window_root_create(display_info->root_window,
                          display_info->name,
                          display_info->canvas, GX_STYLE_NONE, 0, &size);
    if (return_root)
    {
        *return_root = display_info->root_window;
    }
    return GX_SUCCESS;
}
  •  第1个参数是显示屏索引,若是是GUIX Studio配置的第1个显示屏,此处填0,若是是配置的第2个显示屏,此处填1,以此类推。对应的索引宏定义已经在GUIX Studio生成的guiapp_resources.h文件里面定义,你们能够直接调用。
/* Display and theme definitions */
#define DISPLAY_1 0
#define DISPLAY_1_COLOR_FORMAT GX_COLOR_FORMAT_565RGB
#define DISPLAY_1_X_RESOLUTION 800
#define DISPLAY_1_Y_RESOLUTION 480
#define DISPLAY_1_THEME_1 0
#define DISPLAY_1_THEME_TABLE_SIZE 1
  •   第2个参数是显示屏底层驱动接口函数,此接口函数的函数名能够随意定义,好比咱们这里的RGB565颜色格式采用的函数stm32h7_graphics_driver_setup_565rgb。
  •   第3个参数语言ID,这个参数是在GUIX Studio生成的guiapp_resources.h文件里面定义,若是你们定义了多国语言,此文件里面会有多个ID宏定义供你们使用。咱们前面GUIX Studio工程仅使用了英文,因此这里只能填LANGUAGE_ENGLISH。
/* Language definitions */
#define LANGUAGE_ENGLISH 0
#define DISPLAY_1_LANGUAGE_TABLE_SIZE 1
  •   第4个参数是界面主题索引,这个参数也是在GUIX Studio生成的guiapp_resources.h文件里面定义,一个界面能够有多个主题,使用那个主题,填对应的宏定义便可:
#define DISPLAY_1_X_RESOLUTION 800
#define DISPLAY_1_Y_RESOLUTION 480
#define DISPLAY_1_THEME_1 0
#define DISPLAY_1_THEME_TABLE_SIZE 1
  •   第5个参数是根窗口句柄。

 

有了这些认识后,再配置就比较简单了,咱们这里要修改成以下:

gx_studio_display_configure(DISPLAY_1, stm32h7_graphics_driver_setup_565rgb,
        LANGUAGE_ENGLISH, DISPLAY_1_THEME_1, &root);

12.5.3        第3步:修改gx_studio_named_widget_create形参

此函数的实现也在guiapp_specifications.c文件里面,GUIX Studio自动生成的,无需用户管,用户要作就是填对参数便可,特别是第1个参数:

UINT gx_studio_named_widget_create(char *name, GX_WIDGET *parent, GX_WIDGET **new_widget)
{
    UINT status = GX_FAILURE;
    GX_CONST GX_STUDIO_WIDGET_ENTRY *entry = guiapp_widget_table;
    GX_WIDGET *widget = GX_NULL;

    while(entry->widget_information)
    {
        if (!strcmp(name, entry->widget_information->widget_name))
        {
            widget = gx_studio_widget_create((GX_BYTE *) entry->widget, entry->widget_information, parent);
            if (widget)
            {
                status = GX_SUCCESS;
            }
            break;
        }
        entry++;
    }

    if (new_widget)
    {
        *new_widget = widget;
    }
    return status;
}
  •   第1个参数比较重要,不是随便写的,由于此函数里面的strcmp会作比较匹配,查看此窗口名是否存在。你们要填的这个参数在文件guiapp_specifications.c的xxxx__widget_table里面定义,对应咱们前面GUIX Studio生成的代码就是guiapp_widget_table,咱们这里仅有一个window_define:
GX_CONST GX_STUDIO_WIDGET_ENTRY guiapp_widget_table[] =
{
    { &window_define, (GX_WIDGET *) &window },
    {GX_NULL, GX_NULL}
};
GX_CONST GX_STUDIO_WIDGET window_define =
{
    "window",
    GX_TYPE_WINDOW,                          /* widget type                    */
    GUIX_ID_WINDOW0,                         /* widget id                      */
    #if defined(GX_WIDGET_USER_DATA)
    0,                                       /* user data                      */
    #endif
    GX_STYLE_BORDER_THIN|GX_STYLE_ENABLED,   /* style flags                    */
    GX_STATUS_ACCEPTS_FOCUS,                 /* status flags                   */
    sizeof(WINDOW_CONTROL_BLOCK),            /* control block size             */
    GX_COLOR_ID_WINDOW_FILL,                 /* normal color id                */
    GX_COLOR_ID_WINDOW_FILL,                 /* selected color id              */
    GX_COLOR_ID_DISABLED_FILL,               /* disabled color id              */
    gx_studio_window_create,                 /* create function                */
    GX_NULL,                                 /* drawing function override      */
    GX_NULL,                                 /* event function override        */
    {0, 0, 799, 479},                        /* widget size                    */
    GX_NULL,                                 /* next widget                    */
    &window_prompt_define,                   /* child widget                   */
    0,                                       /* control block                  */
    (void *) &window_properties              /* extended properties            */
};

咱们这里第1个参数要写window。

  •   第2个参数是根窗口句柄。
  •   第3个参数是新建立窗口句柄。

 

有了这些认识后,再配置就比较简单了,咱们这里要修改成以下:

  gx_studio_named_widget_create("window", (GX_WIDGET *)root, (GX_WIDGET **)&pScreen);

12.5.4        第4步:修改文件App_SysFunction.c

针对咱们配套的例子模板,不须要修改这个文件,你们本身作的移植须要根据状况选择是否修改。针对这个文件要注意下面几点:

  •   动态内存的分配

主要配置了GUIX动态内存的地址和大小以及画布的地址。你们根据本身的状况作修改便可:

/*
*********************************************************************************************************
*                                            动态内存分配
*********************************************************************************************************
*/
#define       GUI_NUMBYTES     1024*1024*24                           /* 设置动态内存大小 */
#define       Canvas_Memory    0xC0400000                             /* 设置Canvas地址   */
TX_BYTE_POOL  memory_pool;
uint8_t       *MemoryBlock = (uint8_t *)(0xC0000000 + 1024*1024*8); /* 动态内存地址    */

动态内存设置的地址:0xC0000000 + 1024*1024*8, 大小24MB。

canvas画布地址:0xC0400000, 大小4MB,实际没有使用这么大,以咱们本次GUIX Studio生成的代码为例,实际大小在guiapp_specifications.c文件里面定义:

GX_STUDIO_DISPLAY_INFO guiapp_display_table[1] =
{
    {
    "display_1",
    "display_1_canvas",
    display_1_theme_table,
    display_1_language_table,
    DISPLAY_1_THEME_TABLE_SIZE,
    DISPLAY_1_LANGUAGE_TABLE_SIZE,
    DISPLAY_1_STRING_TABLE_SIZE,
    800,                                     /* x resolution                   */
    480,                                     /* y resolution                   */
    &display_1_control_block,
    &display_1_canvas_control_block,
    &display_1_root_window,
    GX_NULL,                                 /* canvas memory area             */
    768000                                   /* canvas memory size in bytes    */
    }
};

实际须要768000字节。咱们这里留出冗余是为了之后多画布使用。你们能够根据实际须要作修改。

  •   结构体guiapp_display_table

为了方便设置画布,将guiapp_specifications.c文件里面结构体guiapp_display_table放到了此文件里面引用,你们根据本身的定义作修改。

/*
*********************************************************************************************************
*                                            变量
*********************************************************************************************************
*/
extern GX_STUDIO_DISPLAY_INFO guiapp_display_table[1];
  •   自适应不一样分辨率显示屏

咱们的显示屏有4.3寸,5寸和7寸,分辨率主要有两类480*272和800*480。为了让800*480分辨率下实现的界面在480*272下也可使用,这里作了一个简单的自适应,即800*480下设计的内容都在480*272分辨率范围内,那么在两个分辨率下都是能够正常显示的。

/*
*********************************************************************************************************
*    函 数 名: gx_initconfig
*    功能说明: GUIX
*    形    参: 无       
*    返 回 值: 无
*********************************************************************************************************
*/
void gx_initconfig(void) 
{
    /* 省略未写 */
    
    /* 自适应不一样分辨率显示屏 */
    switch (g_LcdType)
    {
        
        case LCD_43_480X272:        /* 4.3寸 480 * 272 */    
        case LCD_50_480X272:        /* 5.0寸 480 * 272 */
            guiapp_display_table[0].x_resolution = 480;
            guiapp_display_table[0].y_resolution = 272;
            break;
        
        case LCD_50_800X480:        /* 5.0寸 800 * 480 */
        case LCD_70_800X480:        /* 7.0寸 800 * 480 */    
            guiapp_display_table[0].x_resolution = 800;
            guiapp_display_table[0].y_resolution = 480;
            break;
        
        default:    
            break;
    }
}
  •   画布地址空间

画布地址设置放在了函数gx_initconfig末尾。

/*
*********************************************************************************************************
*    函 数 名: gx_initconfig
*    功能说明: GUIX
*    形    参: 无       
*    返 回 值: 无
*********************************************************************************************************
*/
void gx_initconfig(void) 
{
    /* 省略未写 */
    
    guiapp_display_table[0].canvas_memory = (GX_COLOR *)Canvas_Memory;
}

12.5.5        第5步:编译运行

经过前面四步就完成了GUIX Studio生成代码移植到IAR,而后你们编译运行便可。这里特别注意一点,若是你们测试遇到更新了GUIX Studio生成的代码,可是实际板子运行效果没有变化,此时就须要你们打开GUIX Studio生成的每一个C文件单独编译,而后全编译便可。

12.6 GUIX Studio生成文件移植到Embedded Studio

移植到Embedded Studio和移植到MDK与IAR基本是同样的。

12.6.1        第1步:添加生成的文件到工程里

工程模板使用前面章节制做的例子V7-2005_GUIX Template(RG565)。打开路径:\User\guix,将此文件里面的以下四个文件删掉:


 

而后将咱们新制做的这四个文件添加进去,打开工程后,效果以下:


 

因为新做的GUIX Studio工程名是guiapp,与此例子以前使用的GUI Studio模板名同样,因此直接替换便可,若是你们建立的工程名不一致,须要你们手动删掉以前的,并添加新生成的文件。

12.6.2        第2步:修改gx_studio_display_configure形参

此函数的实如今guiapp_specifications.c文件里面,GUIX Studio自动生成的,无需用户管,用户要作就是填对参数便可:

UINT gx_studio_display_configure(USHORT display, UINT (*driver)(GX_DISPLAY *),
    GX_UBYTE language, USHORT theme, GX_WINDOW_ROOT **return_root)
{
    GX_CONST GX_THEME *theme_ptr;
    GX_RECTANGLE size;

    GX_STUDIO_DISPLAY_INFO *display_info = &guiapp_display_table[display];


/* 建立显示区 */
    gx_display_create(display_info->display,
                      display_info->name,
                      driver,
                      (GX_VALUE) display_info->x_resolution,
                      (GX_VALUE) display_info->y_resolution);

/* 安装主题 */
    if(display_info->theme_table)
    {
        theme_ptr = display_info->theme_table[theme];
        if(theme_ptr)
        {
            gx_display_color_table_set(display_info->display, theme_ptr->theme_color_table,
 theme_ptr->theme_color_table_size);
            
/* 安装颜色板 */
            if (display_info->display->gx_display_driver_palette_set &&
                theme_ptr->theme_palette != NULL)
            {
                display_info->display->gx_display_driver_palette_set(display_info->display,
 theme_ptr->theme_palette, theme_ptr->theme_palette_size);
            }

            gx_display_font_table_set(display_info->display, theme_ptr->theme_font_table,
 theme_ptr->theme_font_table_size);
            gx_display_pixelmap_table_set(display_info->display, theme_ptr->theme_pixelmap_table,
 theme_ptr->theme_pixelmap_table_size);
            gx_system_scroll_appearance_set(theme_ptr->theme_vertical_scroll_style,
 (GX_SCROLLBAR_APPEARANCE *) &theme_ptr->theme_vertical_scrollbar_appearance);
            gx_system_scroll_appearance_set(theme_ptr->theme_horizontal_scroll_style,
 (GX_SCROLLBAR_APPEARANCE *) &theme_ptr->theme_horizontal_scrollbar_appearance);
            gx_display_language_table_set_ext(display_info->display, display_info->language_table, 
(GX_UBYTE) display_info->language_table_size, display_info->string_table_size);
            gx_display_active_language_set(display_info->display, language);
        }
    }


/* 建立画布 */
    gx_canvas_create(display_info->canvas,
                     display_info->canvas_name,
                     display_info->display,
                     GX_CANVAS_MANAGED | GX_CANVAS_VISIBLE,
                     display_info->x_resolution,
                     display_info->y_resolution,
                     display_info->canvas_memory,
                     display_info->canvas_memory_size);

/* 建立画布对应的根窗口 */
    gx_utility_rectangle_define(&size,
                                0, 0,
                                (GX_VALUE) (display_info->x_resolution - 1),
                                (GX_VALUE) (display_info->y_resolution - 1));

    gx_window_root_create(display_info->root_window,
                          display_info->name,
                          display_info->canvas, GX_STYLE_NONE, 0, &size);
    if (return_root)
    {
        *return_root = display_info->root_window;
    }
    return GX_SUCCESS;
}
  •  第1个参数是显示屏索引,若是是GUIX Studio配置的第1个显示屏,此处填0,若是是配置的第2个显示屏,此处填1,以此类推。对应的索引宏定义已经在GUIX Studio生成的guiapp_resources.h文件里面定义,你们能够直接调用。
/* Display and theme definitions */
#define DISPLAY_1 0
#define DISPLAY_1_COLOR_FORMAT GX_COLOR_FORMAT_565RGB
#define DISPLAY_1_X_RESOLUTION 800
#define DISPLAY_1_Y_RESOLUTION 480
#define DISPLAY_1_THEME_1 0
#define DISPLAY_1_THEME_TABLE_SIZE 1
  •  第2个参数是显示屏底层驱动接口函数,此接口函数的函数名能够随意定义,好比咱们这里的RGB565颜色格式采用的函数stm32h7_graphics_driver_setup_565rgb。
  •   第3个参数语言ID,这个参数是在GUIX Studio生成的guiapp_resources.h文件里面定义,若是你们定义了多国语言,此文件里面会有多个ID宏定义供你们使用。咱们前面GUIX Studio工程仅使用了英文,因此这里只能填LANGUAGE_ENGLISH。
/* Language definitions */
#define LANGUAGE_ENGLISH 0
#define DISPLAY_1_LANGUAGE_TABLE_SIZE 1
  •   第4个参数是界面主题索引,这个参数也是在GUIX Studio生成的guiapp_resources.h文件里面定义,一个界面能够有多个主题,使用那个主题,填对应的宏定义便可:
#define DISPLAY_1_X_RESOLUTION 800
#define DISPLAY_1_Y_RESOLUTION 480
#define DISPLAY_1_THEME_1 0
#define DISPLAY_1_THEME_TABLE_SIZE 1
  •   第5个参数是根窗口句柄。

 

有了这些认识后,再配置就比较简单了,咱们这里要修改成以下:

gx_studio_display_configure(DISPLAY_1, stm32h7_graphics_driver_setup_565rgb,
        LANGUAGE_ENGLISH, DISPLAY_1_THEME_1, &root);

12.6.3        第3步:修改gx_studio_named_widget_create形参

此函数的实现也在guiapp_specifications.c文件里面,GUIX Studio自动生成的,无需用户管,用户要作就是填对参数便可,特别是第1个参数:

UINT gx_studio_named_widget_create(char *name, GX_WIDGET *parent, GX_WIDGET **new_widget)
{
    UINT status = GX_FAILURE;
    GX_CONST GX_STUDIO_WIDGET_ENTRY *entry = guiapp_widget_table;
    GX_WIDGET *widget = GX_NULL;

    while(entry->widget_information)
    {
        if (!strcmp(name, entry->widget_information->widget_name))
        {
            widget = gx_studio_widget_create((GX_BYTE *) entry->widget, entry->widget_information, parent);
            if (widget)
            {
                status = GX_SUCCESS;
            }
            break;
        }
        entry++;
    }

    if (new_widget)
    {
        *new_widget = widget;
    }
    return status;
}
  •  第1个参数比较重要,不是随便写的,由于此函数里面的strcmp会作比较匹配,查看此窗口名是否存在。你们要填的这个参数在文件guiapp_specifications.c的xxxx__widget_table里面定义,对应咱们前面GUIX Studio生成的代码就是guiapp_widget_table,咱们这里仅有一个window_define:
GX_CONST GX_STUDIO_WIDGET_ENTRY guiapp_widget_table[] =
{
    { &window_define, (GX_WIDGET *) &window },
    {GX_NULL, GX_NULL}
};
GX_CONST GX_STUDIO_WIDGET window_define =
{
    "window",
    GX_TYPE_WINDOW,                          /* widget type                    */
    GUIX_ID_WINDOW0,                         /* widget id                      */
    #if defined(GX_WIDGET_USER_DATA)
    0,                                       /* user data                      */
    #endif
    GX_STYLE_BORDER_THIN|GX_STYLE_ENABLED,   /* style flags                    */
    GX_STATUS_ACCEPTS_FOCUS,                 /* status flags                   */
    sizeof(WINDOW_CONTROL_BLOCK),            /* control block size             */
    GX_COLOR_ID_WINDOW_FILL,                 /* normal color id                */
    GX_COLOR_ID_WINDOW_FILL,                 /* selected color id              */
    GX_COLOR_ID_DISABLED_FILL,               /* disabled color id              */
    gx_studio_window_create,                 /* create function                */
    GX_NULL,                                 /* drawing function override      */
    GX_NULL,                                 /* event function override        */
    {0, 0, 799, 479},                        /* widget size                    */
    GX_NULL,                                 /* next widget                    */
    &window_prompt_define,                   /* child widget                   */
    0,                                       /* control block                  */
    (void *) &window_properties              /* extended properties            */
};

咱们这里第1个参数要写window。

  •   第2个参数是根窗口句柄。
  •   第3个参数是新建立窗口句柄。

 

有了这些认识后,再配置就比较简单了,咱们这里要修改成以下:

  gx_studio_named_widget_create("window", (GX_WIDGET *)root, (GX_WIDGET **)&pScreen);

12.6.4        第4步:修改文件App_SysFunction.c

针对咱们配套的例子模板,不须要修改这个文件,你们本身作的移植须要根据状况选择是否修改。针对这个文件要注意下面几点:

  •   动态内存的分配

主要配置了GUIX动态内存的地址和大小以及画布的地址。你们根据本身的状况作修改便可:

/*
*********************************************************************************************************
*                                            动态内存分配
*********************************************************************************************************
*/
#define       GUI_NUMBYTES     1024*1024*24                           /* 设置动态内存大小 */
#define       Canvas_Memory    0xC0400000                             /* 设置Canvas地址   */
TX_BYTE_POOL  memory_pool;
uint8_t       *MemoryBlock = (uint8_t *)(0xC0000000 + 1024*1024*8); /* 动态内存地址    */

动态内存设置的地址:0xC0000000 + 1024*1024*8, 大小24MB。

canvas画布地址:0xC0400000, 大小4MB,实际没有使用这么大,以咱们本次GUIX Studio生成的代码为例,实际大小在guiapp_specifications.c文件里面定义:

GX_STUDIO_DISPLAY_INFO guiapp_display_table[1] =
{
    {
    "display_1",
    "display_1_canvas",
    display_1_theme_table,
    display_1_language_table,
    DISPLAY_1_THEME_TABLE_SIZE,
    DISPLAY_1_LANGUAGE_TABLE_SIZE,
    DISPLAY_1_STRING_TABLE_SIZE,
    800,                                     /* x resolution                   */
    480,                                     /* y resolution                   */
    &display_1_control_block,
    &display_1_canvas_control_block,
    &display_1_root_window,
    GX_NULL,                                 /* canvas memory area             */
    768000                                   /* canvas memory size in bytes    */
    }
};

实际须要768000字节。咱们这里留出冗余是为了之后多画布使用。你们能够根据实际须要作修改。

  •    结构体guiapp_display_table

为了方便设置画布,将guiapp_specifications.c文件里面结构体guiapp_display_table放到了此文件里面引用,你们根据本身的定义作修改。

/*
*********************************************************************************************************
*                                            变量
*********************************************************************************************************
*/
extern GX_STUDIO_DISPLAY_INFO guiapp_display_table[1];
  •   自适应不一样分辨率显示屏

咱们的显示屏有4.3寸,5寸和7寸,分辨率主要有两类480*272和800*480。为了让800*480分辨率下实现的界面在480*272下也可使用,这里作了一个简单的自适应,即800*480下设计的内容都在480*272分辨率范围内,那么在两个分辨率下都是能够正常显示的。

/*
*********************************************************************************************************
*    函 数 名: gx_initconfig
*    功能说明: GUIX
*    形    参: 无       
*    返 回 值: 无
*********************************************************************************************************
*/
void gx_initconfig(void) 
{
    /* 省略未写 */
    
    /* 自适应不一样分辨率显示屏 */
    switch (g_LcdType)
    {
        
        case LCD_43_480X272:        /* 4.3寸 480 * 272 */    
        case LCD_50_480X272:        /* 5.0寸 480 * 272 */
            guiapp_display_table[0].x_resolution = 480;
            guiapp_display_table[0].y_resolution = 272;
            break;
        
        case LCD_50_800X480:        /* 5.0寸 800 * 480 */
        case LCD_70_800X480:        /* 7.0寸 800 * 480 */    
            guiapp_display_table[0].x_resolution = 800;
            guiapp_display_table[0].y_resolution = 480;
            break;
        
        default:    
            break;
    }
}
  •   画布地址空间

画布地址设置放在了函数gx_initconfig末尾。

/*
*********************************************************************************************************
*    函 数 名: gx_initconfig
*    功能说明: GUIX
*    形    参: 无       
*    返 回 值: 无
*********************************************************************************************************
*/
void gx_initconfig(void) 
{
    /* 省略未写 */
    
    guiapp_display_table[0].canvas_memory = (GX_COLOR *)Canvas_Memory;
}

12.6.5        第5步:编译运行

经过前面四步就完成了GUIX Studio生成代码移植到Embedded Studio,而后你们编译运行便可。这里特别注意一点,若是你们测试遇到更新了GUIX Studio生成的代码,可是实际板子运行效果没有变化,此时就须要你们打开GUIX Studio生成的每一个C文件单独编译,而后全编译便可。

12.7 实验例程

(注,若是是电阻屏,须要作触摸校准,校准方法看本教程附件章节A)

本章节配套了以下两个例子供你们移植参考:

  •   V7-2009_GUIX Base

GUIX Studio生成的代码在硬件平台实际运行的工程,,含有GCC,IAR,MDK AC5和AC6四个版本工程。

  •   V7-2010_GUIX Studio Base

GUIX Studio工程模板,设计界面后,生成的文件可直接添加到MDK,IAR和GCC软件平台使用。

 

显示效果以下,800*480分辨率:

 

IAR,MDK AC5和AC6工程能够串口打印任务执行状况:按开发板的按键K1能够打印,波特率 115200,数据位 8,奇偶校验位无,中止位 1:

 

Embedded Studio(GCC)平台的串口打印是经过其调试组件SEGGER RTT作的串口打印,速度也很是快,打印效果以下:

 

展现里面有乱码是由于Embedded Studio不支持中文。

12.8 总结

本章节主要为你们讲解了GUIX Studio生成的工程移植到硬件平台的方法,有几处比较重要的注意事项,都在帖子里面为你们作了说明,建议你们实际操做一遍,加深理解。

相关文章
相关标签/搜索