emwin的WM_SetCreateFlags(WM_CF_MEMDEV)


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 },

放在這里就只有這一個窗口使用了,對其他的窗口無影響,能加快刷新速度!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM