uC/GUI 在Cortex-M3 内核上的移植
生活随笔
收集整理的這篇文章主要介紹了
uC/GUI 在Cortex-M3 内核上的移植
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
屈環宇--嘉興學院
一、簡介
是一種專為嵌入式系統設計的圖形界面支持系統。它的代碼全部由標準C
編寫,模塊化的設計,具有很強的可移植性。uC/GUI 適應大多數的黑白或
彩色LCD 的應用,還提供一個可擴展的2D 圖形庫及占用極少RAM 的窗口
管理體系。
二、要求
目標系統(硬件)
你的目標系統必須具備如下幾點:
[1].CPU(8/16/32/64 位)
[2].必要的RAM 和ROM 存儲
[3].LCD 顯示器(任何類型及分辯率的)
對于內存的需求取決于你選用的UCGUI 的功能模塊以及你所使用的目
標系統上的編譯器的效率。內存的占用量無法估計準確的值, 下面就一些
的數值適用于多數的目標系統。
小型系統(不含窗口管理功能)
[1].RAM:100 字節
[2].堆棧:500 字節
[3].ROM:10~25K(取決于選用的UCGUI 功能模塊)
大型系統(包含窗口管理及各種窗體控件功能)
[1].RAM: 2-6 kb (決于選用的應用中建立窗口的數量)
[2].堆棧: 1200 bytes
[3].ROM: 30-60 kb (決于選用的UCGUI 功能模塊)
還要注意ROM 的需求量隨著你在應用程序中使用的字體數目而增長,
以上的所有值都是粗糙的估計,,并不準確。
三、移植前的概述
本次選用的目標系統是基于cortex-M3 內核的stm32f103rb 微處理器。選
用的是uC/GUI3.90a 版本。LCD 是ILI93XX 控制的TFT 彩色液晶顯示屏。
打開UCGUI390a\GUI,以下列出各個文件夾的作用
表格uc/GUI 目錄結構
Config 配置文件目錄
GUI\AntiAlias 搞鋸齒支持
GUI\ConvertMono 灰度色彩轉換支持
GUI\ConvertColor 色彩轉換支持
GUI\Core 核心文件
GUI\Font 字體文件
GUI\JPEG JPEG 格式圖像顯示支持
GUI\LCDDriver LCD 驅動文件
GUI\MemDev 存儲設備支持
GUI\MultiLayer 多層畫圖支持
GUI\Widget 構件庫
GUI\WM 窗口管理器
其中AntiAlias、ConvertMono、ConvertColor、MemDev、Widget、WM
均是可選的配置組件。μc/GUI 提供一些配置選項可在編譯時排除某些組件,但
是有時候需要手動將C 文件從工程文件中移除以避免編譯文件。最接近用戶使
用的組件為構件庫、窗口管理器、LCD 驅動以及字體文件。
四、uC/GUI 接口函數的設計
移植uC/GUI 的前提是LCD 的驅動函數已經設計完成,因為在嵌入式體
系結構中,uC/GUI 所在的是操作系統層,其與硬件的交互是通過設備驅動
層來實現的。
uC/GUI 與設備驅動層的接口是以下3個函數
Void LCD_DrawPoint(u16 x, u16 y, u16 color);
U16 LCD_ReadPoint(u16 x,u16 y);
Void LCD_MyInit();
注意LCD 的初始化函數名不能用LCD_Init(); uC/GUI 中已有如此定義的
函數,會導致重定義。
接口函數的設計是跟處理器和LCD 相關的,在移植uC/GUI 前必須完成以
上3 個函數的設計, 即能用LCD_MyInit() 實現LCD 的初始化,
LCD_ReadPoint(u16 x,u16 y)返回對應點的顏色,LCD_DrawPoint(u16 x,
u16 y, u16 color)在LCD 上顯示對應點的顏色。
五、uC/GUI 的移植
將uGUI 文件夾中的所有文件都加入到工程如圖所示
Startup 文件夾中包含處理器的啟動文件及內核文件
FWLib 文件夾中包含固件庫文件
User 文件夾中包含主函數文件及相關的用戶定義的文件
細心的朋友會發現,多了一個uGUI/Config 文件夾。這個就是uC/GUI 相關
的配置文件。其中包含了以下3 個文件
GUI_X.c UCGUI390a\Sample\GUI_X
由于uC/GUI 提供了與uC/OS 相應的接口函數,僅移植uC/GUI 會因為有些
函數是不存在而導致編譯錯誤,GUI_X.c 的作用就是申明這些函數防止編譯錯
誤。
U32 GUI_X_GetTaskId(void){return 0;}
void GUI_X_Lock(void){;}
void GUI_X_Unlock(void){;}
void GUI_X_InitOS (void){;}
void GUI_X_Log (const char *s) { GUI_USE_PARA(s); }
void GUI_X_Warn (const char *s) { GUI_USE_PARA(s); }
void GUI_X_ErrorOut(const char *s) { GUI_USE_PARA(s); }
在GUI_X.c 中加入這些函數的申明防止編譯錯誤
GUIConf.h UCGUI390a\Start\Config
此文件用于uC/GUI 的相關應用配置,介紹如下
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS (0) //不支持操作系統
#define GUI_SUPPORT_TOUCH (0) //不支持觸摸屏
#define GUI_SUPPORT_UNICODE (1) //支持ASCII 編碼
#define GUI_DEFAULT_FONT &GUI_Font6x8 //字體大小
#define GUI_ALLOC_SIZE 5000 //提供給窗口管理的內存
大小
#define GUI_WINSUPPORT 1 // Window manager package available
#define GUI_SUPPORT_MEMDEV 1 //Memory devices available
#define GUI_SUPPORT_AA 1 // Anti aliasing available
#endif /* Avoid multiple inclusion */
LCDConf.h UCGUI390a\Start\Config
此文件用于LCD 的相關應用配置,介紹如下
#ifndef LCDCONF_H
#define LCDCONF_H
#define LCD_XSIZE (240)
#define LCD_YSIZE (320)
#define LCD_CONTROLLER (9320) //控制器編號
#define LCD_BITSPERPIXEL (16) //16 位點顯示格式
#define LCD_FIXEDPALETTE (565) //對應紅綠藍為565 位
#define LCD_SWAP_RB (1)
#define LCD_INIT_CONTROLLER() LCD_Init();
#endif /* LCDCONF_H */
接下來就是函數接口的匹配了,打開GUI\LCDDriver 中的LCDDummy.c 文件。
將其中的LCD_L0_Init 函數定義如下
int LCD_L0_Init(void)
{
LCD_MyInit();
return 0;
}
將其中的LCD_L0_SetPixelIndex 函數定義如下
void (int x, int y, int PixelIndex)
{
LCD_DrawPoint(x,y,PixelIndex);
}
將其中的LCD_L0_GetPixelIndex 函數定義如下
unsigned int LCD_L0_GetPixelIndex(int x, int y)
{
return LCD_ReadPoint(x,y);
}
至此,uC/GUI 移植完畢。如上圖所示執行程序后,在LCD 的(50,50)處將顯示
"Hello World",即表示uC/GUI 移植移植成功。
六、總結
uC/GUI 的移植不需要對Cortex-M3 內核及其中斷機制有所了解,也不會涉
及到硬件底層需要匯編實現的部分。難點在于設備驅動函數的編寫及GUI_X.c
中與uC/OS 的接口設計。
這是今年暑假移植的,剛剛翻譯完uC/OS-III 用戶手冊,并移植了
uC/OS-III 到stm32 處理器上,我就想把uC/GUI 也放到網上去,希望
能幫到大家。
——屈環宇
——2011 年11 月6 號晚 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的uC/GUI 在Cortex-M3 内核上的移植的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国寿安鑫盈360是什么?一款定开型养老产
- 下一篇: flume mysql hdfs_利用F