emwin的WM_SetCreateFlags(WM_CF_MEMDEV)
本來移植到正點原子的板子上(戰艦V2, NTN35310),什么問題都沒有,但是移植到自己的板子上之后,各種問題接踵而至,搞的焦頭爛額,
就這個WM_SetCreateFlags(WM_CF_MEMDEV)搞了我一個星期,開始的時候,使用這個的時候直接黑屏,不使用的時候,正常顯示,
開始在各種論壇網站尋找答案,有的說是內存不足,有的說是移植的模板不對等等。我全都嘗試着修改,然並卵!
最后,沒有辦法了,只能自己搞一個就只顯示背景色和顯示按鈕的工程,一步一步調試,調着調着發現,使用WM_SetCreateFlags和不使用走的不一樣,
調用GUI_Delay(1);底層會調用GUI_Exec();然后會調用
// // Only required for 16bpp color depth of target. Should be removed otherwise. // case 16: for (i = 0; i < ySize; i++) { _DrawBitLine16BPP(pDevice, x0, i + y0, (const U16 *)pData, xSize); pData += BytesPerLine; } break;
使用WM_SetCreateFlags會走_DrawBitLine16BPP,不使用是不會走這個函數的,這樣就找到問題點在這了,然后慢慢的修改,
發現有時候背景能夠顯示一些線條,很高興有沒有,也很慶幸,為了好看設置了一個背景色,不然搞死都不知道正確的路徑在那,最后的最后,終於搞定了
/********************************************************************* * * Draw Bitmap 16 BPP, not optimized * * Purpose: * Drawing of 16bpp high color bitmaps. * Only required for 16bpp color depth of target. Should be removed otherwise. */ static void _DrawBitLine16BPP(GUI_DEVICE * pDevice, int x, int y, U16 const GUI_UNI_PTR * p, int xsize) { // for (;xsize > 0; xsize--, x++, p++) { // _SetPixelIndex(pDevice, x, y, *p); // } LCD_PIXELINDEX pixel; LCD_SetCursor(x,y); LCD_RS_CLR; LCD_CS_CLR; DATAOUT(lcddev.wramcmd);//寫指令 LCD_WR_CLR; LCD_WR_SET; LCD_CS_SET; for (;xsize > 0; xsize--, x++, p++) { // LCD_Fast_DrawPoint(x,y,*p);
_SetPixelIndex(pDevice, x, y, *p);
} }
看起來很簡單,但是沒找到就是難搞,以此為記!
增加一條
發現在創建窗口之前調用這個函數,會使的后面的所有窗口都是使用到,會使刷新變慢
WM_SetCreateFlags(WM_CF_MEMDEV);
GUI_Init();
MainTask();
將{ WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 480, 320, WM_CF_MEMDEV, 0x0, 0 },
放在這里就只有這一個窗口使用了,對其他的窗口無影響,能加快刷新速度!