emwin的WM_SetCreateFlags(WM_CF_MEMDEV)
本来移植到正点原子的板子上(战舰V2, NTN35310),什么问题都没有,但是移植到自己的板子上之后,各种问题接踵而至,搞的焦头烂额,
就这个WM_SetCreateFlags(WM_CF_MEMDEV)搞了我一个星期,开始的时候,使用这个的时候直接黑屏,不使用的时候,正常显示,
开始在各种论坛网站寻找答案,有的说是内存不足,有的说是移植的模板不对等等。我全都尝试着修改,然并卵!
最后,没有办法了,只能自己搞一个就只显示背景色和显示按钮的工程,一步一步调试,调着调着发现,使用WM_SetCreateFlags和不使用走的不一样,
使用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 },
放在这里就只有这一个窗口使用了,对其他的窗口无影响,能加快刷新速度!