****:196568501(qq)
最近移植了ucgui 想把他寫下來跟正在關注ucgui的人一起**和學習,初次寫東西還希望大俠們多多指教。
移植分為主要的三步:
第一步:
第二步:
找到最底層函式,跟你的液晶驅動器對接。
第三步:
測試你一直的gui功能。
編譯ucgui
第一步詳解:
編譯器:vitual dsp 4.5 ucgui 版本 3.9
開啟 guiconf.h 根據我的實際需要配置此檔案
原配置如下:
#define gui_os (1) /* compile with multitasking support */
#define gui_winsupport (1) /* use window manager if true (1) */
#define gui_support_memdev (1) /* support memory devices */
#define gui_support_touch (1) /* support a touch screen (req. win-manager) */
#define gui_support_mouse (1) /* support a mouse */
#define gui_support_unicode (1) /* support mixed ascii/unicode strings */
#define gui_support_aa (1) /* support for antialiasing */
#define gui_support_bidi (1) /* support for bidirectional text */
配置後如下:
#define gui_os (1) /* compile with multitasking support */
#define gui_winsupport (1) /* use window manager if true (1) */
#define gui_support_memdev (0) /* support memory devices *///開啟此巨集定義後編譯通不過,錯誤最後沒改後,時間緊,後來就把巨集定義給關掉了
#define gui_support_touch (0) /* support a touch screen (req. win-manager) */
#define gui_support_mouse (0) /* support a mouse */
#define gui_support_unicode (1) /* support mixed ascii/unicode strings */
#define gui_support_aa (1) /* support for antialiasing */
#define gui_support_bidi (1) /* support for bidirectional text */
編譯後後會遇到如下問題:
以下函式找不到——
void gui_x_init(void);
/**** execidle - called if nothing else is left to do ****/
void gui_x_execidle(void);
/**** timing routines - required for blinking ****/
int gui_x_gettime(void);
void gui_x_delay(int period);
/**** multitask routines - required only if multitasking is used (#define gui_os 1) ****/
void gui_x_unlock(void);
void gui_x_lock(void);
u32 gui_x_gettaskid(void);
void gui_x_initos(void);
先不用管,先編譯通過了再說。
移植第二步詳解:
1.寫剛剛上面定義的空函式
其中這幾個函式是跟你跑的目標機的作業系統相關的可以先把支援作業系統那個巨集定義關閉(在guiconf.h 檔案中更改為:#define gui_os (0)void gui_x_unlock(void);)
void gui_x_lock(void);
u32 gui_x_gettaskid(void);
void gui_x_initos(void);
在此函式中如果跑系統可以加系統延時
void gui_x_execidle(void);
此函式呼叫系統時間如果你的系統有實時時鐘之類的可以將實時時鐘驅動程式放在這裡面。沒有也沒關係只是呼叫系統時間相關的函式不能用而已,可能這個功能很多人也不會用。
int gui_x_gettime(void);
此函式用於gui的延時,如果沒有跑系統,就自己手動的寫個延時程式,如果跑了作業系統,就呼叫系統的延時函式。
void gui_x_delay(int period);
此函式可以將你的液晶初始化**放在這裡,當然你把初始化放在執行gui的**前也能正常執行,但是這樣不有利於,gui的整體封裝。
void gui_x_init(void);
2.找出底層的介面函式。(此步驟也是最重要的一步)
2.1 找出介面函式的方法如下
在gui中執行乙個繪圖函式,
例如:在gui中執行
gui_drawcircle(0, 0, 10);
單步執行,直到跟蹤到最底層**。
其中所有的繪製操作和獲取畫素點的值都是下面兩個函式
void lcd_l0_setpixelindex(int x, int y, int pixelindex);
unsigned int lcd_l0_getpixelindex(int x, int y);
在void lcd_l0_setpixelindex(int x, int y, int pixelindex);中在如下地方寫自己的畫點函式即可
/* write into hardware ... adapt to your system */
在unsigned int lcd_l0_getpixelindex(int x, int y);中在如下為止寫獲取畫素值的函式即可
/* read from hardware ... adapt to your system */
此部分昨晚移植工作關鍵的就完成了。
然後就是測試功能了。
第三步,
測試功能,
此部分應該不用說也知道該怎麼做了。
UCGUI學習之路 2 移植
開始學習之前,先簡單說說我的移植過程及一些問題的解決。ucgui 的源 我用的是 3.90 版的,並且準備乙個簡單工程,並且編譯無誤。開啟源 資料夾,複製 start gui 目錄下所有檔案到工程資料夾中,複製 start config 目錄下所有檔案 到工程目錄下的 gui資料夾中,複製 samp...
stm32移植ecos,移植ucgui到ecos
ucgui是乙個開源的輕型嵌入式gui,使用廣泛,資料豐富,功能完整,尤其適合嵌入式產品的gui。只是它開源但不免費。僅管如此,移植來玩玩還是可以的。ucgui設計優秀,具有良好移植性,配合ecos framebuf優秀框架,可以讓你很快見到ucgui呈現的精美顯示介面。本文主要介紹了ucgui移植...
UCGUI 移植 STM32 帶觸屏
首先 需要看的就是uc gui的使用者手冊,關於輸入裝置 input device的描述,然後就基本會配置和使用了 18.1 指標游標輸入裝置 指標游標輸入裝置包括滑鼠和觸控螢幕。它們共用一組通用的指標游標輸入裝置 pid 函式使得滑鼠和觸控螢幕能同時起作用。該函式一般由視窗管理器自動地呼叫,如先前...