三、应用说明:
1. 如果要根据自己的需要编写应用代码的话,需要认真阅读API函数,利用API函数必须自己的应用程序即可,如:
void main(void) { int i=0; /* 要做的事:确认硬件首先初始化了! */ GUI_Init(); GUI_DispString("Hello world!"); while(1); }
2. 如果需要调用uCGUI例程,则需要添加GUIDemo文件夹及里边的全部文件,根据需要选择实例或调用GUIDEMO_main()函数。
四、注意事项:
1. 由于某些编译器(如:ADS1.2,MDK)不会初始化全局变量,部分内核必须修改,否则程序只工作一遍就不再工作。具体需要修改的地方如下,红色表示添加的代码:
①.修改如下函数为:(位于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。 |