首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

uCGUI 学习笔记(3)

uCGUI 学习笔记(3)

三、应用说明:



1.
如果要根据自己的需要编写应用代码的话,需要认真阅读API函数,利用API函数必须自己的应用程序即可,如:

void main(void)

{

int i=0;

/* 要做的事:确认硬件首先初始化了! */

GUI_Init();

GUI_DispString("Hello world!");

while(1);

}




2.
如果需要调用uCGUI例程,则需要添加GUIDemo文件夹及里边的全部文件,根据需要选择实例或调用GUIDEMO_main()函数。



四、注意事项:

1. 由于某些编译器(如:ADS1.2MDK)不会初始化全局变量,部分内核必须修改,否则程序只工作一遍就不再工作。具体需要修改的地方如下,红色表示添加的代码:

①.修改如下函数为:(位于GUICore.c

static void _InitContext(GUI_CONTEXT* pContext) {

……

pContext->PenSize
= 1;
pContext->DrawMode = GUI_DRAWMODE_NORMAL;
pContext->TextMode = GUI_TEXTMODE_NORMAL;
pContext->TextAlign = GUI_TA_LEFT|GUI_TA_TOP;
pContext->AA_HiResEnable = 0;

/* Variables in WM module */
     
……

}

②.修改如下函数为:(位于GUIAlloc.c

void GUI_ALLOC_Init(void) {
......
GUI_ALLOC.NumUsedBytes = 0;
memset(&aBlock, 0, sizeof(aBlock[0])*GUI_MAXBLOCKS);

aBlock[0].Size = (1<<GUI_BLOCK_ALIGN); /* occupy minimum for a block */
......
}


③.修改如下函数为:(位于WM.c

void WM_Init(void) {

if (!_IsInited) {
......


memset(&_ClipContext, 0, sizeof(WM_IVR_CONTEXT));

NextDrawWin = WM__FirstWin = WM_HWIN_NULL;
......


sInited = ;


}


}


2. 自己编写初始化变量函数,该函数应在GUI_Init()调用之前调用。

void MyInit() {


IsInitialized = 0;
// MemDev


_IsInited = 0;
// Win

WM__CreateFlags = 0;
GUI_CURSOR_pfTempHide = NULL;
GUI_Context.hDevData = 0;
WM__hCapture=0;
WM__hWinFocus=0;
WM_pfPollPID = 0;
WM_pfHandlePID = 0;
GUI_pfTimerExec = 0;
_KeyMsgCnt = 0;
}


总结:


经过多天的实验和多个版本的移植测试证明,以上移植方法实用与uCGUI的所有版本。本移植实验在我的《LPC2148开发板V2》验证通过;软件平台是MDK。
继承事业,薪火相传
返回列表