【STM32F429】第12章 GUIX Studio生成程式碼移植到硬體平臺
最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429
第12章 GUIX Studio生成程式碼移植到硬體平臺
本章節為大家講解GUIX Studio生成的程式碼移植到硬體平臺的方法
目錄
12.3 GUIX Studio生成檔案移植到MDK AC5
12.3.2 第2步:修改gx_studio_display_configure形參
12.3.3 第3步:修改gx_studio_named_widget_create形參
12.3.4 第4步:修改檔案App_SysFunction.c
12.4 GUIX Studio生成檔案移植到MDK AC6
12.4.2 第2步:修改gx_studio_display_configure形參
12.4.3 第3步:修改gx_studio_named_widget_create形參
12.4.4 第4步:修改檔案App_SysFunction.c
12.5.2 第2步:修改gx_studio_display_configure形參
12.5.3 第3步:修改gx_studio_named_widget_create形參
12.5.4 第4步:修改檔案App_SysFunction.c
12.6 GUIX Studio生成檔案移植到Embedded Studio
12.6.2 第2步:修改gx_studio_display_configure形參
12.6.3 第3步:修改gx_studio_named_widget_create形參
12.6.4 第4步:修改檔案App_SysFunction.c
12.1 初學者重要提示
- 移植GUIX Studio生成的程式碼到硬體平臺有好幾處需要注意的地方,大家移植的時候一定要注意,本章教程也進行了詳細說明。
12.2 GUIX Studio生成程式碼檔案
第11章講解了GUIX Studio的使用方法,並製作了一個GUIX Studio的簡單Demo。我們這裡直接使用這個Demo:
點選GUIX Studio左上角的Project –>Generate All Output Files:
彈出如下介面:
1、用於選擇匯出那些內容,預設是全部匯出,建議全部匯出,防止不必要的麻煩。
2、如果勾上覆選框,會多出來一個編輯框,可以設定生成的資原始檔名:
3、如果勾上binary mode,表示生成的資原始檔使用二進位制模式。
- 選擇S-Record
表示資原始檔字尾採用srec,此設定模式下還可以設定偏移地址
- 選擇Binary
表示資原始檔字尾採用bin。
4、如果勾上覆選框,表示生成資源標頭檔案,取消表示不生成。
瞭解了這些配置選項後,再設定就比較容易理解了,當前我們這裡全部生成原始檔,帶資原始檔頭,具體配置如下:
設定完畢後,點選右下角的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步:新增生成的檔案到工程裡
工程模板使用前面章節制作的例子V6-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顏色格式採用的函式stm32f4_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, stm32f4_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*8 /* 設定動態記憶體大小 */ #define Canvas_Memory 0xC0400000 /* 設定Canvas地址 */ TX_BYTE_POOL memory_pool; uint8_t *MemoryBlock = (uint8_t *)(0xC0000000 + 1024*1024*8); /* 動態記憶體地址 */
動態記憶體設定的地址:0xC0000000 + 1024*1024*8, 大小8MB。
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步:新增生成的檔案到工程裡
工程模板使用前面章節制作的例子V6-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*8 /* 設定動態記憶體大小 */ #define Canvas_Memory 0xC0400000 /* 設定Canvas地址 */ TX_BYTE_POOL memory_pool; uint8_t *MemoryBlock = (uint8_t *)(0xC0000000 + 1024*1024*8); /* 動態記憶體地址 */
動態記憶體設定的地址:0xC0000000 + 1024*1024*8, 大小8MB。
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步:新增生成的檔案到工程裡
工程模板使用前面章節制作的例子V6-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*8 /* 設定動態記憶體大小 */ #define Canvas_Memory 0xC0400000 /* 設定Canvas地址 */ TX_BYTE_POOL memory_pool; uint8_t *MemoryBlock = (uint8_t *)(0xC0000000 + 1024*1024*8); /* 動態記憶體地址 */
動態記憶體設定的地址:0xC0000000 + 1024*1024*8, 大小8MB。
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步:新增生成的檔案到工程裡
工程模板使用前面章節制作的例子V6-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*8 /* 設定動態記憶體大小 */ #define Canvas_Memory 0xC0400000 /* 設定Canvas地址 */ TX_BYTE_POOL memory_pool; uint8_t *MemoryBlock = (uint8_t *)(0xC0000000 + 1024*1024*8); /* 動態記憶體地址 */
動態記憶體設定的地址:0xC0000000 + 1024*1024*8, 大小8MB。
canvas畫布地址:0xC0400000, 大小4MB,實際沒有使用這麼大,以我們本次GUIX Studio生成的程式碼為例,實際大小在guiapp_specifications.c檔案裡面定義:
- 結構體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生成的工程移植到硬體平臺的方法,有幾處比較重要的注意事項,都在帖子裡面為大家做了說明,建議大家實際操作一遍,加深理解。
相關文章
- ubuntu移植到嵌入式平臺Ubuntu
- 第27章微信公眾平臺
- Android 平臺開啟硬體解碼logAndroid
- 第12章、網路程式設計程式設計
- 汽車異構硬體平臺開發如何進行靜態程式碼分析
- 怎樣將Xilinx的xfOpenCV庫移植到ZedBoard平臺OpenCVZed
- 上海一公司需要將原系統移植到Websphere平臺Web
- JAVA實現編寫平臺程式碼生成器Java
- 把成熟的程式碼從.NET移植到MonoMono
- 程式碼整潔之道 讀書筆記(二)第12章 迭進筆記
- 第6章 區塊鏈開發平臺:以太坊區塊鏈
- 打破平臺限制,小程式如何在硬體裝置上執行?
- 讀書筆記——《軟體工程》第10~12章筆記軟體工程
- 第 12 章 CSS 入門CSS
- 二維碼管理平臺 生成二維碼
- 論文第4章:iOS繪圖平臺的實現iOS繪圖
- 微軟Win10計算器已被移植到Android/iOS/Web平臺微軟Win10AndroidiOSWeb
- Cocos2dx 3.0rc 建立工程 並 移植到其他平臺
- minigui5.0.2移植到mips平臺多程式模式執行mginit:Can not create task barGUI模式
- 第7章 區塊鏈開發平臺:超級賬本區塊鏈
- 論文第5章:Android繪圖平臺的實現Android繪圖
- OpenCV開發筆記(七十四):OpenCV+ffmpeg交叉編譯移植到海思平臺Hi35xx平臺OpenCV筆記編譯
- Google向Linux移植軟體 轉換平臺對抗微軟(轉)GoLinux微軟
- LeaRun.Java快速開發平臺 高效程式碼自動化生成Java
- 手把手教您將libreoffice移植到函式計算平臺函式
- Charilaos Kalogirou:分享將iOS遊戲移植到Android平臺的注意要點iOS遊戲Android
- 線上培訓平臺原始碼:準備推出教育硬體,這代表著什麼?原始碼
- 《軟體除錯》讀書筆記:第13章 硬錯誤和藍屏除錯筆記
- 讀書筆記之《現代軟體工程》第5.5章、第6章、第7章筆記軟體工程
- ffmpeg在移植到海思HI35xx平臺之將ffmpeg庫引入到sample的demo中
- 如何將三萬行程式碼從Flow移植到TypeScript?行程TypeScript
- 將30K行Flow程式碼移植到TypeScript - davidgomTypeScriptGo
- 《父與子的程式設計之旅(第3版)》第12章習題答案程式設計
- 關於WINDOWS平臺下RMAN備份移植Windows
- 硬之城攜手阿里雲Serverless應用引擎(SAE)打造低程式碼平臺阿里Server
- 《C++程式設計教程(第3版)》——第1章,第2節從C到C++C++程式設計
- LeaRun.net快速開發平臺 一鍵生成前後端程式碼後端
- OpenCV開發筆記(七十四):OpenCV3.4.1+ffmpeg3.4.8交叉編譯移植到海思平臺Hi35xx平臺OpenCV筆記編譯