硬汉嵌入式论坛

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

[emWin] 直接用Builder工具生成的带位图界面显示异常

[复制链接]

3

主题

22

回帖

31

积分

新手上路

积分
31
发表于 2019-5-17 09:12:12 | 显示全部楼层 |阅读模式
我用Builder做了一个带显示位图的界面,图片大小48*130。硬件平台是STM32f103VET6,emwin版本5.32,裸机跑的。在仿真工具上可以跑起来,移植到STM32就不行,屏幕显示桌面很快就黑屏了,但是程序没有崩掉,定时器还在工作。会是什么问题呢
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-5-17 09:40:26 | 显示全部楼层
是不是因为分配的内存太小了......
  1. #define USE_EXRAM  0//不使用外部RAM
  2. //设置EMWIN内存大小
  3. #define GUI_NUMBYTES  (30*1024)//512KFlash 、64kSRAM
复制代码
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-5-17 10:13:21 | 显示全部楼层
贴下你的emWin部分完整程序,仅看emWin部分就行。
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-5-17 11:16:12 | 显示全部楼层
本帖最后由 天涯海角 于 2019-5-17 11:17 编辑
eric2013 发表于 2019-5-17 10:13
贴下你的emWin部分完整程序,仅看emWin部分就行。
  1. /*********************************************************************
  2. *                                                                    *
  3. *                SEGGER Microcontroller GmbH & Co. KG                *
  4. *        Solutions for real time microcontroller applications        *
  5. *                                                                    *
  6. **********************************************************************
  7. *                                                                    *
  8. * C-file generated by:                                               *
  9. *                                                                    *
  10. *        GUI_Builder for emWin version 5.32                          *
  11. *        Compiled Oct  8 2015, 11:59:02                              *
  12. *        (c) 2015 Segger Microcontroller GmbH & Co. KG               *
  13. *                                                                    *
  14. **********************************************************************
  15. *                                                                    *
  16. *        Internet: www.segger.com  Support: support@segger.com       *
  17. *                                                                    *
  18. **********************************************************************
  19. */

  20. // USER START (Optionally insert additional includes)
  21. // USER END

  22. #include "DIALOG.h"

  23. /*********************************************************************
  24. *
  25. *       Defines
  26. *
  27. **********************************************************************
  28. */
  29. #define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
  30. #define ID_BUTTON_0 (GUI_ID_USER + 0x01)
  31. #define ID_IMAGE_0 (GUI_ID_USER + 0x03)

  32. #define ID_IMAGE_0_IMAGE_0 0x00

  33. // USER START (Optionally insert additional defines)
  34. // USER END

  35. /*********************************************************************
  36. *
  37. *       Static data
  38. *
  39. **********************************************************************
  40. */
  41. /*********************************************************************
  42. *
  43. *       _acImage_0, "E:\Project_TFT\02-ProgramDesign\02-STM32F103VET6\09-EmWin\Bmp\BMP\HBO.bmp", ID_IMAGE_0_IMAGE_0
  44. */
  45. static const U8 _acImage_0[20022] = {//////////省略///////
  46. };

  47. // USER START (Optionally insert additional static data)
  48. // USER END

  49. /*********************************************************************
  50. *
  51. *       _aDialogCreate
  52. */
  53. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  54.   { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, -5, 800, 480, 0, 0x0, 0 },
  55.   { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 0, 0, 80, 20, 0, 0x0, 0 },
  56.   { IMAGE_CreateIndirect, "Image", ID_IMAGE_0, 14, 34, 140, 50, 0, 0, 0 },
  57.   // USER START (Optionally insert additional widgets)
  58.   // USER END
  59. };

  60. /*********************************************************************
  61. *
  62. *       Static code
  63. *
  64. **********************************************************************
  65. */
  66. /*********************************************************************
  67. *
  68. *       _GetImageById
  69. */
  70. static const void * _GetImageById(U32 Id, U32 * pSize) {
  71.   switch (Id) {
  72.   case ID_IMAGE_0_IMAGE_0:
  73.     *pSize = sizeof(_acImage_0);
  74.     return (const void *)_acImage_0;
  75.   }
  76.   return NULL;
  77. }

  78. // USER START (Optionally insert additional static code)
  79. // USER END

  80. /*********************************************************************
  81. *
  82. *       _cbDialog
  83. */
  84. static void _cbDialog(WM_MESSAGE * pMsg) {
  85.   const void * pData;
  86.   WM_HWIN      hItem;
  87.   U32          FileSize;
  88.   int          NCode;
  89.   int          Id;
  90.   // USER START (Optionally insert additional variables)
  91.   // USER END

  92.   switch (pMsg->MsgId) {
  93.   case WM_INIT_DIALOG:
  94.     //
  95.     // Initialization of 'Image'
  96.     //
  97.     hItem = WM_GetDialogItem(pMsg->hWin, ID_IMAGE_0);
  98.     pData = _GetImageById(ID_IMAGE_0_IMAGE_0, &FileSize);
  99.     IMAGE_SetBMP(hItem, pData, FileSize);
  100.     // USER START (Optionally insert additional code for further widget initialization)
  101.     // USER END
  102.     break;
  103.   case WM_NOTIFY_PARENT:
  104.     Id    = WM_GetId(pMsg->hWinSrc);
  105.     NCode = pMsg->Data.v;
  106.     switch(Id) {
  107.     case ID_BUTTON_0: // Notifications sent by 'Button'
  108.       switch(NCode) {
  109.       case WM_NOTIFICATION_CLICKED:
  110.         // USER START (Optionally insert code for reacting on notification message)
  111.         // USER END
  112.         break;
  113.       case WM_NOTIFICATION_RELEASED:
  114.         // USER START (Optionally insert code for reacting on notification message)
  115.         // USER END
  116.         break;
  117.       // USER START (Optionally insert additional code for further notification handling)
  118.       // USER END
  119.       }
  120.       break;
  121.     // USER START (Optionally insert additional code for further Ids)
  122.     // USER END
  123.     }
  124.     break;
  125.   // USER START (Optionally insert additional message handling)
  126.   // USER END
  127.   default:
  128.     WM_DefaultProc(pMsg);
  129.     break;
  130.   }
  131. }

  132. /*********************************************************************
  133. *
  134. *       Public code
  135. *
  136. **********************************************************************
  137. */
  138. /*********************************************************************
  139. *
  140. *       CreateFramewin
  141. */
  142. WM_HWIN CreateFramewin(void);
  143. WM_HWIN CreateFramewin(void) {
  144.   WM_HWIN hWin;

  145.   hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  146.   return hWin;
  147. }

  148. // USER START (Optionally insert additional public code)
  149. // USER END

  150. /*************************** End of file ****************************/



  151. void ButtonUse_Demo(void)
  152. {
  153.         WM_HWIN hWin;
  154.         hWin=CreateFramewin();
  155.         while(1)
  156.         {
  157.                 GUI_Delay(100);

  158.         }
  159. }
  160. /*************************** End of file ****************************/
复制代码
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-5-17 11:19:45 | 显示全部楼层
上面是builder生成的代码片段,麻烦硬汉大哥看看
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-5-17 11:21:34 | 显示全部楼层
  1.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//使能CRC时钟,否则STemWin不能使用

  2.           GUI_Init();
  3.                 ButtonUse_Demo();
复制代码

这是主函数调用
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-5-17 15:31:23 | 显示全部楼层
为了验证是不是内存不足导致现实位图,我另外根据教程搞了一个单独显示位图的程序,程序一开始也是现实底色后(蓝色)黑屏
  1. void emwindemo_task(void)
  2. {

  3.         int Xmag,Ymag;  //缩放因子,单位 千分之
  4. GUI_CURSOR_Show();
  5. draw_bitmap();

  6.         while(1)
  7.         {
  8.                 Xmag += 100;
  9.                 Ymag += 100;
  10.                 if(Xmag>=2000)Xmag = 100;
  11.                 if(Ymag>=2000)Ymag = 100;
  12.                 zoom_bitmap(Xmag,Ymag); //绘制缩放的位图
  13.                 GUI_Delay(500);
  14.         }
  15. }
复制代码

程序是参考别人的的,不知道GUI_CURSOR_Show();是什么意思,就把这个屏蔽掉了,程序变成了下面这样,神奇的事情发生了,位图可以显示了。。。。为什么会这样子呢
作为新手,刚实习就独立上手项目,遇到好多问题,到处碰壁,好不容易把底层都搞好了,刚搞GUI就困住了,难受啊)
  1. void emwindemo_task(void)
  2. {

  3.         int Xmag,Ymag;  //缩放因子,单位 千分之
  4. //        GUI_CURSOR_Show();
  5. //        draw_bitmap();

  6.         while(1)
  7.         {
  8.                 Xmag += 100;
  9.                 Ymag += 100;
  10.                 if(Xmag>=2000)Xmag = 100;
  11.                 if(Ymag>=2000)Ymag = 100;
  12.                 zoom_bitmap(Xmag,Ymag); //绘制缩放的位图
  13.                 GUI_Delay(500);
  14.         }
  15. }
复制代码


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-5-17 18:07:29 | 显示全部楼层
将你二楼的完整测试文件上传下,我给你在我们板子上测试下
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-5-20 10:59:26 | 显示全部楼层
eric2013 发表于 2019-5-17 18:07
将你二楼的完整测试文件上传下,我给你在我们板子上测试下

麻烦大佬了

04-demo103-Test BUTTON.rar

1.61 MB, 下载次数: 4

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-5-21 00:24:18 | 显示全部楼层
测试了,可以正常显示
QQ截图20190521002255.jpg
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-5-21 08:13:40 | 显示全部楼层
eric2013 发表于 2019-5-21 00:24
测试了,可以正常显示

谢谢大佬的帮忙
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 07:23 , Processed in 0.266902 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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