硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2487|回复: 26
收起左侧

[emWin] 使用存储设备时,会在窗口更新时产生闪烁

[复制链接]

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
发表于 2017-6-5 10:33:17 | 显示全部楼层 |阅读模式
使用    h_mem_track = GUI_MEMDEV_CreateEx(TRACK_X0,TRACK_Y0,TRACK_H,TRACK_V,GUI_MEMDEV_NOTRANS);
创建了一个WIN区域的存储设备,用于显示动态轨迹。
在运行的时候,不但这个WIN区域会有频繁规律的闪烁,而且在同一页面内的BUTTON,在更新BUTTON显示内容时,也会有规律的闪动。
WIN区域的闪烁在模拟器和实际LCD上都有,但是BUTTON的闪烁只在实际LCD上显示时有,我是大概1S钟更新一次BUTTON的显示,就是简单的计数加1,
每次变动到第4次的时候就在BUTTON区域闪一下。
但是在模拟器上却没有。
改了不同的时候,闪烁间隔次数都是一样的。

把这个内存设备的创建一关掉,BUTTON就不会闪了



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-5 11:45:57 | 显示全部楼层
是不是还是上次的那个问题,关闭了窗口使用存储设备。
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-5 11:55:22 | 显示全部楼层

回 eric2013 的帖子

eric2013:是不是还是上次的那个问题,关闭了窗口使用存储设备。 (2017-06-05 11:45) 
在上次的问题上更进了一步啊。上次以为只是这个WIN窗口有。
然后现在发现,只要在连续更新的控制窗口都会有哦。
会不会又是使用对话框创建WIN的原因啊?使用WM_CreateWindow()好像也是一样的吧,记得有测试过的。
也真是奇怪,看例程使用内存设备也很简单呀
自己在单一页面上测试也很简单啊
但一用到实际处就会闪,真是搞不懂
这玩意也没法调试,都不知道什么原因
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-6 01:30:05 | 显示全部楼层

回 jplzl10000 的帖子

jplzl10000:在上次的问题上更进了一步啊。上次以为只是这个WIN窗口有。
然后现在发现,只要在连续更新的控制窗口都会有哦。
会不会又是使用对话框创建WIN的原因啊?使用WM_CreateWindow()好像也是一样的吧,记得有测试过的。
也真是奇怪,看例程使用内存设备也很简单呀
....... (2017-06-05 11:55) 
这个问题我还专门用我们的V6板子测试过,没有问题,很好用。
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-6 11:47:48 | 显示全部楼层

回 eric2013 的帖子

eric2013:这个问题我还专门用我们的V6板子测试过,没有问题,很好用。 (2017-06-06 01:30) 
晕,不是吧??
方便把那个测试代码给我试下?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-7 01:23:49 | 显示全部楼层

回 jplzl10000 的帖子

jplzl10000:晕,不是吧??
方便把那个测试代码给我试下? (2017-06-06 11:47) 
http://www.armbbs.cn/forum.php?mod=viewthread&tid=17330
这个例子是用的三缓冲,在maintask.C文件中的三缓冲使能函数注释掉,改用窗口存储设备使能函数即可,那个背景图片就是存储设备绘制的。
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-7 09:08:21 | 显示全部楼层

回 eric2013 的帖子

eric2013:http://www.armbbs.cn/forum.php?mod=viewthread&tid=17330
这个例子是用的三缓冲,在maintask.C文件中的三缓冲使能函数注释掉,改用窗口存储设备使能函数即可,那个背景图片就是存储设备绘制的。 (2017-06-07 01:23) 
你说的是 基于RTX+emWin+FlashFS+USB+TCPnet+CAN+Modbus的综合Demo
这个例程?
感觉我们都没有匹配到问题点上,我还是把我整个界面工程发你,你有时间帮忙看下。
我总感觉是哪里出了点超出我认识的bug。比如说使用资源列表创建WIN时,使用MEMDEV就有可能是有这种闪烁的问题的
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-7 09:23:22 | 显示全部楼层

回 eric2013 的帖子

eric2013:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=17330
这个例子是用的三缓冲,在maintask.C文件中的三缓冲使能函数注释掉,改用窗口存储设备使能函数即可,那个背景图片就是存储设备绘制的。
你说的是 基于RTX+emWin+FlashFS+USB+TCPnet+CAN+Modbus的综合Demo
这个例程?
感觉我们都没有匹配到问题点上,我还是把我整个界面工程发你,你有时间帮忙看下。
我总感觉是哪里出了点超出我认识的bug。比如说使用资源列表创建WIN时,使用MEMDEV就有可能是有这种闪烁的问题的

整理了下这个工程,只剩下这个主界面和一些配置的代码了,可以很方便的看下,尤其是这个track的WIN创建和MEMDEV使用是不是有问题
[p_w_upload=undefined]
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-7 11:14:40 | 显示全部楼层

回 jplzl10000 的帖子

jplzl10000:你说的是 基于RTX+emWin+FlashFS+USB+TCPnet+CAN+Modbus的综合Demo
这个例程?
感觉我们都没有匹配到问题点上,我还是把我整个界面工程发你,你有时间帮忙看下。
我总感觉是哪里出了点超出我认识的bug。比如说使用资源列表创建WIN时,使用MEMDEV就有可能是有这种闪烁的问题的
... .. (2017-06-07 09:23) 
直接上传一个可以运行的简易代码就行,能够说明问题的代码,别的不需要。代码越简单越好。
我在我们板子上面走一个。
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-7 13:48:40 | 显示全部楼层

回 eric2013 的帖子

eric2013:直接上传一个可以运行的简易代码就行,能够说明问题的代码,别的不需要。代码越简单越好。
我在我们板子上面走一个。 (2017-06-07 11:14) 
OK,http://pan.baidu.com/s/1hr4Uek0,还是第一次弄这个百度云分享
这个是整个模拟器工程,只剩下有问题的文件和代码了。
在模拟器上运行的话,会有一些闪烁,但没有实际LCD那么闪
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-7 13:57:51 | 显示全部楼层

回 jplzl10000 的帖子

jplzl10000:OK,http://pan.baidu.com/s/1hr4Uek0,还是第一次弄这个百度云分享
这个是整个模拟器工程,只剩下有问题的文件和代码了。
在模拟器上运行的话,会有一些闪烁,但没有实际LCD那么闪 (2017-06-07 13:48) 
这个代码有点麻烦。

有没有简单点的,我仅需要一个越简单越好的代码,最好就在一个C文件里面就能跑的。这样我就可以快速测试问题,并进行修正。
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-7 14:41:26 | 显示全部楼层

回 eric2013 的帖子

eric2013:这个代码有点麻烦。

有没有简单点的,我仅需要一个越简单越好的代码,最好就在一个C文件里面就能跑的。这样我就可以快速测试问题,并进行修正。 (2017-06-07 13:57) 
OK,改了一个最简单的了,
http://pan.baidu.com/s/1i4Gxyfj
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-8 01:52:54 | 显示全部楼层

回 jplzl10000 的帖子

jplzl10000:

OK,改了一个最简单的了,
http://pan.baidu.com/s/1i4Gxyfj
代码还是看着比较辛苦,有没更简单的,就一个窗口跑个按钮,跑个存储设备,能说明问题就行。
  1. #include "DIALOG.h"
  2. #include "wm.h"
  3. #define TRACK_X0            0
  4. #define TRACK_Y0            40
  5. #define TRACK_H             320
  6. #define TRACK_V             240
  7. static const GUI_WIDGET_CREATE_INFO _aDialogCreate_track[] =
  8. {
  9.   { WINDOW_CreateIndirect, "", GUI_ID_WIN0, TRACK_X0, TRACK_Y0, TRACK_H, TRACK_V, 0, 0x0, 0 },
  10. };
  11. static GUI_MEMDEV_Handle h_mem_track;
  12. static void track_display_init(void)
  13. {
  14.     h_mem_track = GUI_MEMDEV_CreateEx(TRACK_X0,TRACK_Y0,TRACK_H,TRACK_V,GUI_MEMDEV_NOTRANS);    //GUI_MEMDEV_HASTRANS GUI_MEMDEV_NOTRANS
  15.     GUI_MEMDEV_Select(h_mem_track);
  16.     GUI_SetBkColor(GUI_WHITE);
  17.     GUI_Clear();
  18.      
  19.     GUI_SetFont(&GUI_Font24_ASCII);
  20.     GUI_SetColor(GUI_BLACK);
  21.     //GUI_SetBkColor(GUI_WHITE);
  22.     GUI_DispStringAt("X:",TRACK_X0,TRACK_Y0);
  23.     GUI_DispStringAt("Y:",TRACK_X0+100,TRACK_Y0);
  24.     GUI_MEMDEV_Select(0);
  25. }
  26. static void track_display(void)
  27. {      
  28.     GUI_MEMDEV_Select(0);
  29.     GUI_MEMDEV_WriteAt(h_mem_track,TRACK_X0,TRACK_Y0);
  30. }
  31. static void _cbDialog_track(WM_MESSAGE *pMsg)
  32. {
  33.   WM_HWIN hWin = pMsg->hWin;
  34.      
  35.   switch (pMsg->MsgId)
  36.   {     
  37.     case WM_PAINT:
  38.         track_display();
  39.     break;
  40.          
  41.     case WM_INIT_DIALOG:
  42.     {
  43.             track_display_init();      
  44.     }
  45.     break;
  46.          
  47.     default:
  48.         WM_DefaultProc(pMsg);
  49.     break;
  50.   }
  51. }
  52. WM_HWIN h_page_track;
  53. WM_HWIN page_track(void)
  54. {
  55.   h_page_track = GUI_CreateDialogBox(_aDialogCreate_track,
  56.                                                         GUI_COUNTOF(_aDialogCreate_track),
  57.                                                         _cbDialog_track,
  58.                                                         WM_HBKWIN,
  59.                                                         0, 0);  
  60.   return h_page_track;
  61. }
  62. void add_track(int x0,int y0,int x1,int y1)
  63. {
  64.     char coord[8];
  65.      
  66.     GUI_MEMDEV_Select(h_mem_track);
  67.     GUI_SetFont(&GUI_Font24B_ASCII);
  68.      
  69.     GUI_SetBkColor(GUI_WHITE);
  70.     GUI_SetColor(GUI_BLACK);
  71.     GUI_DispStringAt("hello world",TRACK_X0+x1,TRACK_Y0+30+y1);
  72.      
  73. //  GUI_SetColor(GUI_RED);
  74. //  sprintf(coord,"%d",x1);
  75.     GUI_DispStringAt("      ",TRACK_X0 + 30,TRACK_Y0);
  76.     GUI_DispStringAt(coord,TRACK_X0+30,TRACK_Y0);
  77. //  sprintf(coord,"%d",y1);
  78.     GUI_DispStringAt("      ",TRACK_X0+120,TRACK_Y0);
  79.     GUI_DispStringAt(coord,TRACK_X0+120,TRACK_Y0);
  80.      
  81.     GUI_MEMDEV_Select(0);
  82.      
  83.     WM_InvalidateWindow(h_page_track);
  84. }
  85. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
  86. {
  87.   { WINDOW_CreateIndirect, "", GUI_ID_WIN0, 0, 0, 800, 480, 0, 0x0, 0 },
  88.     { TEXT_CreateIndirect, "",  GUI_ID_TEXT11,  0,  0, 100, 40, 0, 0, 0 },
  89.     { TEXT_CreateIndirect, "",  GUI_ID_TEXT12,  100,    0, 100, 40, 0, 0, 0 },
  90.     { TEXT_CreateIndirect, "",  GUI_ID_TEXT13,  500,    0, 100, 40, 0, 0, 0 },
  91.   { BUTTON_CreateIndirect, "", GUI_ID_BUTTON0,  400, 60, 100,   20,     0, 0x0, 0 },
  92.   { BUTTON_CreateIndirect, "", GUI_ID_BUTTON1,      400,        90,     100,        20,         0, 0x0, 0 },
  93.   { BUTTON_CreateIndirect, "", GUI_ID_BUTTON2,      400,    120,    100,    20,     0, 0x0, 0 },
  94.   { BUTTON_CreateIndirect, "", GUI_ID_BUTTON3,      400,    150,    100,    20,     0, 0x0, 0 },
  95.   { BUTTON_CreateIndirect, "", GUI_ID_BUTTON4,  400,    180,    100,    20,     0, 0x0, 0 },
  96.   { BUTTON_CreateIndirect, "", GUI_ID_BUTTON5,  400, 210, 100,  20,     0, 0x0, 0 },
  97.   { BUTTON_CreateIndirect, "", GUI_ID_BUTTON6,      400,    240,    100,        20,     0, 0x0, 0 },
  98.   { BUTTON_CreateIndirect, "", GUI_ID_BUTTON7,  400,    270,    100,    20, 0, 0x0, 0 },
  99.   { BUTTON_CreateIndirect, "", GUI_ID_BUTTON8,      400,    300,    100,        20,     0, 0x0, 0 },
  100.   { BUTTON_CreateIndirect, "", GUI_ID_BUTTON9,  400,    330,    100,    20, 0, 0x0, 0 },
  101. #if 0
  102.   { TEXT_CreateIndirect, "", GUI_ID_TEXT0, T0_X0, T0_Y0, 50, 20, 0, 0, 0 },
  103.   { TEXT_CreateIndirect, "", GUI_ID_TEXT1, T1_X0, T1_Y0, 50, 20, 0, 0, 0 },
  104.   { TEXT_CreateIndirect, "", GUI_ID_TEXT2, T2_X0, T2_Y0, 50, 20, 0, 0, 0 },
  105.   { TEXT_CreateIndirect, "", GUI_ID_TEXT3, T3_X0, T3_Y0, 50, 20, 0, 0, 0 },
  106. #endif
  107. #if 0
  108.   { TEXT_CreateIndirect, "", GUI_ID_TEXT4, T4_X0, T4_Y0, 50, 20, 0, 0, 0 },
  109.   { TEXT_CreateIndirect, "", GUI_ID_TEXT5, T5_X0, T5_Y0, 50, 20, 0, 0, 0 },
  110.   { TEXT_CreateIndirect, "", GUI_ID_TEXT6, T6_X0, T6_Y0, 50, 20, 0, 0, 0 },
  111.   { TEXT_CreateIndirect, "", GUI_ID_TEXT7, T7_X0, T7_Y0, 50, 20, 0, 0, 0 },
  112.   { TEXT_CreateIndirect, "", GUI_ID_TEXT8, T8_X0, T8_Y0, 50, 20, 0, 0, 0 },
  113.   { EDIT_CreateIndirect, "", GUI_ID_EDIT0, E0_X0, E0_Y0, 50, 20, 0, 0, 0 },
  114.   { EDIT_CreateIndirect, "", GUI_ID_EDIT1, E1_X0, E1_Y0, 50, 20, 0, 0, 0 },
  115.   { EDIT_CreateIndirect, "", GUI_ID_EDIT2, E2_X0, E2_Y0, 50, 20, 0, 0, 0 },
  116.   { EDIT_CreateIndirect, "", GUI_ID_EDIT3, E3_X0, E3_Y0, 50, 20, 0, 0, 0 },
  117.   { EDIT_CreateIndirect, "", GUI_ID_EDIT4, E4_X0, E4_Y0, 50, 20, 0, 0, 0 },
  118. #endif
  119. };
  120. int f_language_change;
  121. static void page_dialog_init(WM_HWIN hWin)
  122. {
  123. }
  124. static void _cbDialog(WM_MESSAGE *pMsg)
  125. {
  126.   WM_HWIN hWin = pMsg->hWin;
  127.      
  128.   switch (pMsg->MsgId)
  129.   {     
  130.     case WM_PAINT:
  131.     {
  132.     }
  133.     break;
  134.      
  135.     case WM_INIT_DIALOG:
  136.         WINDOW_SetBkColor(hWin,GUI_BLUE);
  137. //      page_dialog_init(hWin);
  138.     break;
  139.      
  140.     case WM_NOTIFY_PARENT:
  141.     {
  142.             
  143.     }
  144.         break;
  145.          
  146.     default:
  147.         WM_DefaultProc(pMsg);
  148.     break;
  149.   }
  150. }
  151. WM_HWIN h_page_main;
  152. WM_HWIN page_main_page(void)
  153. {
  154.   h_page_main = GUI_CreateDialogBox(_aDialogCreate,
  155.                                                         GUI_COUNTOF(_aDialogCreate),
  156.                                                         _cbDialog,
  157.                                                         WM_HBKWIN,
  158.                                                         0, 0);  
  159.   return h_page_main;
  160. }
  161. #define DEBUG_TRACK         1
  162. void _main(void)
  163. {
  164.     WM_HWIN h_dlg;
  165.     int x0,y0,x1,y1;
  166.     int add_dec;
  167.     static int cnt = 0;
  168.     int test_send_cnt = 0;
  169.      
  170.   GUI_Init();
  171.   WM_SetCreateFlags(WM_CF_MEMDEV);
  172.      
  173.     h_dlg = page_main_page();//page_carve_param_set();//page_main_page();
  174.      
  175.     WM_DisableMemdev(h_dlg);
  176.     h_dlg = page_track();
  177.     WM_DisableMemdev(h_dlg);
  178.      
  179.     x0 = 0;
  180.     y0 = 0;
  181.     x1 = 5;
  182.     y1 = 5;
  183.      
  184.     add_dec = 0;
  185.      
  186.     while(1)
  187.     {   
  188.         GUI_Delay(200);     
  189. #if DEBUG_TRACK     
  190.         cnt++;
  191.         if(cnt < 20)
  192.         {
  193.                      
  194.         }
  195.          
  196.         add_track(x0,y0,x1,y1);
  197.          
  198.         if(add_dec)
  199.         {
  200.             x1 -= 3;
  201.             y1 -= 4;
  202.         }
  203.         else
  204.         {
  205.             x1 += 3;
  206.             y1 += 4;
  207.         }
  208.          
  209.         if(x1>200 || y1>200)
  210.         {
  211.             add_dec = 1;
  212.         }
  213.         if(x1<3 || y1<4)
  214.         {
  215.             add_dec = 0;
  216.         }
  217. #endif      
  218.     }
  219. }
复制代码
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-8 08:54:14 | 显示全部楼层

回 eric2013 的帖子

eric2013:代码还是看着比较辛苦,有没更简单的,就一个窗口跑个按钮,跑个存储设备,能说明问题就行。
#include "DIALOG.h"
#include "wm.h"

....... (2017-06-08 01:52) 
你这硬汉的名号是怎么来的啊[s:122]
这不已经是最简单的么,再简单就看不出闪烁效果了
page_track()里面就是创建了一个MEMDEV,然后就是初始化和增加显示内容了
page_main()里面就是设置了一下背景颜色啊
然后这个main()主函数里面就是添加显示内容了

还要怎么简单呢,
关键是这个,可以直接在模拟器上跑的,在模拟器上也能看到有闪烁的现象的
如果想单独看代码也很简单吧
我再帖个更简单的吧,哎。。。
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-8 08:57:30 | 显示全部楼层

回 eric2013 的帖子

eric2013:代码还是看着比较辛苦,有没更简单的,就一个窗口跑个按钮,跑个存储设备,能说明问题就行。
#include "DIALOG.h"
#include "wm.h"

....... (2017-06-08 01:52)

这个代码现在是最简单的了



#include "DIALOG.h"
#include "wm.h"


static const GUI_WIDGET_CREATE_INFO _aDialogCreate_track[] =
{
  { WINDOW_CreateIndirect, "", GUI_ID_WIN0, 0, 40, 320, 240, 0, 0x0, 0 },

};

static GUI_MEMDEV_Handle h_mem_track;

static void track_display_init(void)
{
    h_mem_track = GUI_MEMDEV_CreateEx(0,40,320,240,GUI_MEMDEV_NOTRANS);    //GUI_MEMDEV_HASTRANS GUI_MEMDEV_NOTRANS
    GUI_MEMDEV_Select(h_mem_track);
    GUI_SetBkColor(GUI_WHITE);
    GUI_Clear();
   
    GUI_SetFont(&GUI_Font24_ASCII);
    GUI_SetColor(GUI_BLACK);
    GUI_DispStringAt("X:",0,40);
    GUI_DispStringAt("Y:",0+100,40);
    GUI_MEMDEV_Select(0);
}

static void track_display(void)
{        
    GUI_MEMDEV_Select(0);
    GUI_MEMDEV_WriteAt(h_mem_track,0,40);
}

static void _cbDialog_track(WM_MESSAGE *pMsg)
{
  WM_HWIN hWin = pMsg->hWin;
   
  switch (pMsg->MsgId)
  {      
      case WM_PAINT:
          track_display();
      break;
         
      case WM_INIT_DIALOG:
            track_display_init();        
    break;
        
      default:
        WM_DefaultProc(pMsg);
    break;
  }
}


WM_HWIN h_page_track;
WM_HWIN page_track(void)
{
  h_page_track = GUI_CreateDialogBox(_aDialogCreate_track,
                                                          GUI_COUNTOF(_aDialogCreate_track),
                                                          _cbDialog_track,
                                                          WM_HBKWIN,
                                                          0, 0);     
  return h_page_track;
}

void add_track(int x0,int y0,int x1,int y1)
{
    char coord[8];
   
    GUI_MEMDEV_Select(h_mem_track);

    GUI_SetFont(&GUI_Font24B_ASCII);
   
    GUI_SetBkColor(GUI_WHITE);
    GUI_SetColor(GUI_BLACK);
    GUI_DispStringAt("hello world",0+x1,40+30+y1);

    GUI_DispStringAt("      ",0 + 30,40);
    GUI_DispStringAt(coord,0+30,40);
    GUI_DispStringAt("      ",0+120,40);
    GUI_DispStringAt(coord,0+120,40);
   
    GUI_MEMDEV_Select(0);
   
    WM_InvalidateWindow(h_page_track);
}



static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
  { WINDOW_CreateIndirect, "", GUI_ID_WIN0, 0, 0, 800, 480, 0, 0x0, 0 },
};


static void _cbDialog(WM_MESSAGE *pMsg)
{
  WM_HWIN hWin = pMsg->hWin;
   
  switch (pMsg->MsgId)
  {      
      case WM_INIT_DIALOG:
          WINDOW_SetBkColor(hWin,GUI_BLUE);
    break;
        
      default:
        WM_DefaultProc(pMsg);
    break;
  }
}

WM_HWIN h_page_main;
WM_HWIN page_main_page(void)
{
  h_page_main = GUI_CreateDialogBox(_aDialogCreate,
                                                          GUI_COUNTOF(_aDialogCreate),
                                                          _cbDialog,
                                                          WM_HBKWIN,
                                                          0, 0);     
  return h_page_main;
}



#define    DEBUG_TRACK            1


void _main(void)
{
    WM_HWIN h_dlg;
    int x0,y0,x1,y1;
    int add_dec;
   
  GUI_Init();

  WM_SetCreateFlags(WM_CF_MEMDEV);
   
    h_dlg = page_main_page();//page_carve_param_set();//page_main_page();
   
     WM_DisableMemdev(h_dlg);

    h_dlg = page_track();
    WM_DisableMemdev(h_dlg);
   
    x0 = 0;
    y0 = 0;
    x1 = 5;
    y1 = 5;
   
    add_dec = 0;
   
    while(1)
    {   
        GUI_Delay(200);        

#if DEBUG_TRACK        
        
        add_track(x0,y0,x1,y1);   
        
        if(add_dec)
        {
            x1 -= 3;
            y1 -= 4;
        }
        else
        {
            x1 += 3;
            y1 += 4;
        }
        
        if(x1>200 || y1>200)
        {
            add_dec = 1;
        }

        if(x1<3 || y1<4)
        {
            add_dec = 0;
        }
#endif        
    }
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-8 16:28:33 | 显示全部楼层

回 jplzl10000 的帖子

jplzl10000:这个代码现在是最简单的了


....... (2017-06-08 08:57) 
代码还是太麻烦。有没更简单的,就一个窗口跑个按钮,跑个存储设备,能说明问题就行。复杂的实在不想去看。方便的话,重新做个,能说明问题就行。
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-8 18:18:36 | 显示全部楼层

回 eric2013 的帖子

eric2013:代码还是太麻烦。有没更简单的,就一个窗口跑个按钮,跑个存储设备,能说明问题就行。复杂的实在不想去看。方便的话,重新做个,能说明问题就行。 (2017-06-08 16:28) 
哥啊,我这都没有一个按钮啊,就是一个WIN用来显示这个BUG的效果
再减代码的话,就没东西了。。。。
你可以把这个代码直接复制到模拟器上,只要在MaskTask()里面一放,一运行就可以了
就能发现闪烁现象了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-8 19:38:43 | 显示全部楼层

回 jplzl10000 的帖子

jplzl10000:哥啊,我这都没有一个按钮啊,就是一个WIN用来显示这个BUG的效果
再减代码的话,就没东西了。。。。
你可以把这个代码直接复制到模拟器上,只要在MaskTask()里面一放,一运行就可以了
就能发现闪烁现象了 (2017-06-08 18:18)
V6板子测试,修改下面两个地方,效果很好,不闪烁:

1.png

55.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-8 19:45:36 | 显示全部楼层
修改方法二,继续使用存储设备,效果也棒棒的,这个符合你的需求:

1111.png
7777777777.png
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-8 21:41:22 | 显示全部楼层

回 eric2013 的帖子

eric2013:修改方法二,继续使用存储设备,效果也棒棒的,这个符合你的需求:


 (2017-06-08 19:45) 
[s:151] 果然是硬汉,一出手就解决了
可这是什么道理呢?我用的是第二种方法
删除GUI_MEMDEV_Select(0);
是啥意思呢,使用GUI_MEMDEV_WriteAt()时不需要选定LCD么?
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-8 21:42:08 | 显示全部楼层

回 eric2013 的帖子

eric2013:修改方法二,继续使用存储设备,效果也棒棒的,这个符合你的需求:


 (2017-06-08 19:45) 
[s:151] 果然是硬汉,一出手就解决了
可这是什么道理呢?我用的是第二种方法
删除GUI_MEMDEV_Select(0);
是啥意思呢,使用GUI_MEMDEV_WriteAt()时不需要选定LCD么?
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-8 21:55:58 | 显示全部楼层

回 eric2013 的帖子

eric2013:V6板子测试,修改下面两个地方,效果很好,不闪烁:



....... (2017-06-08 19:38) 
这第一种方法不行啊,在模拟器上跑都会弹框死机
WM_GetClientWindow()这个函数不是对FRAME框架才有用的么?
这个h_page_track是WIN窗口,调用WM_GetClientWindow(h_page_track)返回得到的
hWinOld还是这个h_page_track句柄值
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-9 00:40:37 | 显示全部楼层

回 jplzl10000 的帖子

jplzl10000:[s:151] 果然是硬汉,一出手就解决了
可这是什么道理呢?我用的是第二种方法
删除GUI_MEMDEV_Select(0);
是啥意思呢,使用GUI_MEMDEV_WriteAt()时不需要选定LCD么? (2017-06-08 21:42) 
这个调用一次就好,你之前已经调用了GUI_MEMDEV_Select(0);  重复调用可能是个bug、
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-9 00:41:27 | 显示全部楼层

回 jplzl10000 的帖子

jplzl10000:这第一种方法不行啊,在模拟器上跑都会弹框死机
WM_GetClientWindow()这个函数不是对FRAME框架才有用的么?
这个h_page_track是WIN窗口,调用WM_GetClientWindow(h_page_track)返回得到的
hWinOld还是这个h_page_track句柄值 (2017-06-08 21:55) 
在板子上面没问题,你可以把函数WM_GetClientWindow去掉,直接填句柄。
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-9 08:38:45 | 显示全部楼层

回 eric2013 的帖子

eric2013:在板子上面没问题,你可以把函数WM_GetClientWindow去掉,直接填句柄。 (2017-06-09 00:41) 
这个可能也是哪里有点bug
用第一种方法的话,你发现没有,
在窗口上,没有显示X Y两个字符了,直接就是显示坐标值了
而且好像也不是一直有弹框,有时候又没有,可能是内存哪里出问题了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-9 11:07:53 | 显示全部楼层

回 jplzl10000 的帖子

jplzl10000:这个可能也是哪里有点bug
用第一种方法的话,你发现没有,
在窗口上,没有显示X Y两个字符了,直接就是显示坐标值了
而且好像也不是一直有弹框,有时候又没有,可能是内存哪里出问题了 (2017-06-09 08:38) 
这个估计是程序哪里有问题,得排查下。
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-6-13 17:33:31 | 显示全部楼层

回 eric2013 的帖子

eric2013:修改方法二,继续使用存储设备,效果也棒棒的,这个符合你的需求:


 (2017-06-08 19:45) 
我今天又把这个改了一下,原来是建了一个WIN窗口,然后把这个MEMDEV设置成与这个WIN相重合。我把这个MEMDEV直接建立在主页面上,没有额外新建这个h_page_track窗口的话,就没法显示这个MEMDEV了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-15 12:22 , Processed in 0.388470 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表