硬汉嵌入式论坛

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

[μCGUI] 请问调用LISTVIEW_AddRow后死机是这么回事呢?

[复制链接]

20

主题

92

回帖

152

积分

初级会员

积分
152
发表于 2018-8-13 23:49:35 | 显示全部楼层 |阅读模式
在主界面添加LISTVIEW,添加Column没问题,但是一添加Row(LISTVIEW_AddRow)就死机了;
搜了一下,遇到类似问题还挺多的,但是没有一个确切的解决方案,请问是什么原因呢?
GUI_Conf.h中我设置的10MB外部SDRAM做动态内存,应该够了吧,不知道这个LISTVIEW受什么影响比较大呢?


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2018-8-14 00:16:16 | 显示全部楼层
方便的话,可以贴一个稍完整的测试代码,我测试下看下。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-8-14 18:47:03 | 显示全部楼层
本帖最后由 tovax 于 2018-8-14 19:03 编辑
eric2013 发表于 2018-8-14 00:16
方便的话,可以贴一个稍完整的测试代码,我测试下看下。

以下代码,不管使用GUI_Font24_ASCII字体,还是SIF字体,只要调用LISTVIEW_AddRow就出问题了;屏蔽掉三行LISTVIEW_AddRow就可以正常显示了:
这代码是用ucguibuilder生成的,没做任何修改;电脑系统是windows10 64bit。
  1. /*
  2. ******************************************************************
  3. **                      uCGUIBuilder                            **
  4. **                  Version:   4.0.0.0                          **
  5. **                     2012 / 04                               **
  6. **                   CpoyRight to: wyl                          **
  7. **              Email:ucguibuilder@163.com                        **
  8. **          This text was Created by uCGUIBuilder               **
  9. ******************************************************************/

  10. #include <stddef.h>
  11. #include "GUI.h"
  12. #include "DIALOG.h"

  13. #include "WM.h"
  14. #include "BUTTON.h"
  15. #include "CHECKBOX.h"
  16. #include "DROPDOWN.h"
  17. #include "EDIT.h"
  18. #include "FRAMEWIN.h"
  19. #include "LISTBOX.h"
  20. #include "MULTIEDIT.h"
  21. #include "RADIO.h"
  22. #include "SLIDER.h"
  23. #include "TEXT.h"
  24. #include "PROGBAR.h"
  25. #include "SCROLLBAR.h"
  26. #include "LISTVIEW.h"





  27. //EventsFunctionList
  28. //EndofEventsFunctionList


  29. /*********************************************************************
  30. *
  31. *       static data
  32. *
  33. **********************************************************************
  34. */

  35. static const char * _lvTable_00[5] ={"R1" , "111" , "222" , "333" , "" };
  36. static const char * _lvTable_01[1] ={"R2" };
  37. static const char * _lvTable_02[1] ={"R3" };


  38. /*********************************************************************
  39. *
  40. *       Dialog resource
  41. *
  42. * This table conatins the info required to create the dialog.
  43. * It has been created by ucGUIbuilder.
  44. */

  45. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  46.     { FRAMEWIN_CreateIndirect,  "Caption",           0,                       0,  0,  800,480,FRAMEWIN_CF_MOVEABLE,0},
  47.     { LISTVIEW_CreateIndirect,   NULL,               GUI_ID_LISTVIEW0,        95, 103,591,266,0,0}
  48. };



  49. /*****************************************************************
  50. **      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
  51. **      Function: to initialize the Dialog items
  52. **                                                      
  53. **      call this function in _cbCallback --> WM_PAINT
  54. *****************************************************************/

  55. void PaintDialog(WM_MESSAGE * pMsg)
  56. {
  57.     WM_HWIN hWin = pMsg->hWin;

  58. }



  59. /*****************************************************************
  60. **      FunctionName:void InitDialog(WM_MESSAGE * pMsg)
  61. **      Function: to initialize the Dialog items
  62. **                                                      
  63. **      call this function in _cbCallback --> WM_INIT_DIALOG
  64. *****************************************************************/

  65. void InitDialog(WM_MESSAGE * pMsg)
  66. {
  67.     WM_HWIN hWin = pMsg->hWin;
  68.     //
  69.     //FRAMEWIN
  70.     //
  71.     FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
  72.     FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
  73.     FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
  74.     //
  75.     //GUI_ID_LISTVIEW0
  76.     //
  77.     LISTVIEW_SetFont(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),&GUI_Font24_ASCII);
  78.     //LISTVIEW_SetAutoScrollH(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),1);
  79.     //LISTVIEW_SetAutoScrollV(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),1);
  80.     LISTVIEW_AddColumn(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),60,"C1",GUI_TA_VCENTER|GUI_TA_LEFT);
  81.     LISTVIEW_AddColumn(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),60,"C2",GUI_TA_VCENTER|GUI_TA_LEFT);
  82.     LISTVIEW_AddColumn(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),60,"C3",GUI_TA_VCENTER|GUI_TA_LEFT);
  83.     LISTVIEW_AddColumn(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),60,"C4",GUI_TA_VCENTER|GUI_TA_LEFT);
  84.     LISTVIEW_AddColumn(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),60,"C5",GUI_TA_VCENTER|GUI_TA_LEFT);
  85.     LISTVIEW_AddColumn(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),60,"C6",GUI_TA_VCENTER|GUI_TA_LEFT);
  86.     LISTVIEW_AddRow(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),_lvTable_00);
  87.     LISTVIEW_AddRow(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),_lvTable_01);
  88.     LISTVIEW_AddRow(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),_lvTable_02);

  89. }




  90. /*********************************************************************
  91. *
  92. *       Dialog callback routine
  93. */
  94. static void _cbCallback(WM_MESSAGE * pMsg)
  95. {
  96.     int NCode, Id;
  97.     WM_HWIN hWin = pMsg->hWin;
  98.     switch (pMsg->MsgId)
  99.     {
  100.         case WM_PAINT:
  101.             PaintDialog(pMsg);
  102.             break;
  103.         case WM_INIT_DIALOG:
  104.             InitDialog(pMsg);
  105.             break;
  106.         case WM_KEY:
  107.             switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
  108.             {
  109.                 case GUI_KEY_ESCAPE:
  110.                     GUI_EndDialog(hWin, 1);
  111.                     break;
  112.                 case GUI_KEY_ENTER:
  113.                     GUI_EndDialog(hWin, 0);
  114.                     break;
  115.             }
  116.             break;
  117.         case WM_NOTIFY_PARENT:
  118.             Id = WM_GetId(pMsg->hWinSrc);
  119.             NCode = pMsg->Data.v;        
  120.             switch (Id)
  121.             {
  122.                 case GUI_ID_OK:
  123.                     if(NCode==WM_NOTIFICATION_RELEASED)
  124.                         GUI_EndDialog(hWin, 0);
  125.                     break;
  126.                 case GUI_ID_CANCEL:
  127.                     if(NCode==WM_NOTIFICATION_RELEASED)
  128.                         GUI_EndDialog(hWin, 0);
  129.                     break;

  130.             }
  131.             break;
  132.         default:
  133.             WM_DefaultProc(pMsg);
  134.     }
  135. }


  136. /*********************************************************************
  137. *
  138. *       MainTask
  139. *
  140. **********************************************************************
  141. */
  142. void MainTask(void)
  143. {
  144.     GUI_Init();
  145.     WM_SetDesktopColor(GUI_WHITE);      /* Automacally update desktop window */
  146.     WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */
  147.     //PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  148.     //FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
  149.     //PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  150.     //BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
  151.     //CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
  152.     //DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
  153.     //SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
  154.     //SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
  155.     //HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
  156.     //RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
  157.         while(1)
  158.         {
  159.         GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
  160.         }
  161. }
复制代码
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-8-14 19:10:08 | 显示全部楼层
http://www.armbbs.cn/forum.php?mod=viewthread&tid=6817
这里说“LISTVIEW_AddRow(_hListView, (GUI_ConstString *)_aTable_1);”,试过了,也不行。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-8-14 20:36:52 | 显示全部楼层
这个是ucgui3.98自带的例程,测试后发现例程是可以正常运行的:
  1. /*
  2. *********************************************************************************************************
  3. *                                             uC/GUI V3.98
  4. *                        Universal graphic software for embedded applications
  5. *
  6. *                       (c) Copyright 2002, Micrium Inc., Weston, FL
  7. *                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
  8. *
  9. *              礐/GUI is protected by international copyright laws. Knowledge of the
  10. *              source code may not be used to write a similar product. This file may
  11. *              only be used in accordance with a license and should not be redistributed
  12. *              in any way. We appreciate your understanding and fairness.
  13. *
  14. ----------------------------------------------------------------------
  15. File        : WIDGET_ListView.c
  16. Purpose     : Demonstrates the use of header widgets
  17. ---------------------------END-OF-HEADER------------------------------
  18. */

  19. #include <stddef.h>
  20. #include <string.h>
  21. #include "GUI.h"
  22. #include "LISTVIEW.h"
  23. #include "FRAMEWIN.h"

  24. /*********************************************************************
  25. *
  26. *       Defines
  27. *
  28. **********************************************************************
  29. */

  30. #define SPEED 650

  31. #define MSG_CHANGE_MAIN_TEXT (WM_USER + 0)
  32. #define MSG_CHANGE_INFO_TEXT (WM_USER + 1)

  33. /*********************************************************************
  34. *
  35. *       Static data
  36. *
  37. **********************************************************************
  38. */

  39. static const GUI_COLOR Colors[]      = { 0, GUI_BLUE };

  40. static const GUI_LOGPALETTE Palette  = {
  41.   2,     /* bps */
  42.   1,     /* transparency */
  43.   Colors /* pointer to colors */
  44. };

  45. static const unsigned char acBarCode[] = {
  46.   _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_, ________, ________, ________, ________, _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_,
  47.   _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_, ________, ________, ________, ________, _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_,
  48.   _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_, ________, ________, ________, ________, _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_,
  49.   _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_, ________, ________, ________, ________, _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_,
  50.   _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_, ________, ________, ________, ________, _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_,
  51.   _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_, ________, ________, ________, ________, _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_,
  52.   _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_, ________, ________, ________, ________, _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_,
  53.   _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_, ________, ________, ________, ________, _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_,
  54.   _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_, ________, ________, ________, ________, _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_,
  55.   _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_, ________, ________, ________, ________, _XXX_X__, XXX__XX_, X_X_X_XX, __X_XXX_,
  56. };

  57. static const GUI_BITMAP bmBarCode = { 96, 10, 12, 1, acBarCode, &Palette};

  58. static const char * _aTable_1[][3] = {
  59.   { "623499-0010001", "1", "Item 1" },
  60.   { "623499-0010002", "2", "Item 2" },
  61.   { "623499-0010003", "3", "Item 3" },
  62.   { "623499-0010004", "4", "Item 4" },
  63.   { "623499-0010005", "5", "Item 5" },
  64.   { "623499-0010006", "6", "Item 6" },
  65.   { "623499-0010007", "7", "Item 7" },
  66.   { "623499-0010008", "8", "Item 8" }
  67. };

  68. static const char * _aTable_2[][3] = {
  69.   { "111111-1111111", "100-A", "Item AAA" },
  70.   { "222222-2222222", "100-B", "Item BBB" },
  71.   { "333333-3333333", "100-C", "Item CCC" },
  72.   { "444444-4444444", "100-D", "Item DDD" },
  73.   { "555555-5555555", "100-E", "Item EEE" },
  74.   { "666666-6666666", "100-F", "Item FFF" },
  75.   { "777777-7777777", "100-G", "Item GGG" },
  76.   { "888888-8888888", "100-H", "Item HHH" }
  77. };

  78. static LISTVIEW_Handle _hListView;

  79. static char _acMainText[100];
  80. static char _acInfoText[100];

  81. /*********************************************************************
  82. *
  83. *       Static code
  84. *
  85. **********************************************************************
  86. */
  87. /*******************************************************************
  88. *
  89. *       _ChangeMainText
  90. *
  91. *  Sends a message to the background window and invalidate it, so
  92. *  the callback of the background window display the new text.
  93. */
  94. static void _ChangeMainText(char* pStr) {
  95.   WM_MESSAGE Message;
  96.   Message.MsgId  = MSG_CHANGE_MAIN_TEXT;
  97.   Message.Data.p = pStr;
  98.   WM_SendMessage(WM_HBKWIN, &Message);
  99.   WM_InvalidateWindow(WM_HBKWIN);
  100. }

  101. /*******************************************************************
  102. *
  103. *       _ChangeInfoText
  104. *
  105. *  Sends a message to the background window and invalidate it, so
  106. *  the callback of the background window display the new text.
  107. */
  108. static void _ChangeInfoText(char* pStr) {
  109.   WM_MESSAGE Message;
  110.   Message.MsgId  = MSG_CHANGE_INFO_TEXT;
  111.   Message.Data.p = pStr;
  112.   WM_SendMessage(WM_HBKWIN, &Message);
  113.   WM_InvalidateWindow(WM_HBKWIN);
  114.   GUI_Delay(SPEED);
  115. }

  116. /*******************************************************************
  117. *
  118. *       _cbBkWindow
  119. */
  120. static void _cbBkWindow(WM_MESSAGE* pMsg) {
  121.   switch (pMsg->MsgId) {
  122.     case MSG_CHANGE_MAIN_TEXT:
  123.       strcpy(_acMainText, pMsg->Data.p);
  124.       WM_InvalidateWindow(pMsg->hWin);
  125.       break;
  126.     case MSG_CHANGE_INFO_TEXT:
  127.       strcpy(_acInfoText, pMsg->Data.p);
  128.       WM_InvalidateWindow(pMsg->hWin);
  129.       break;
  130.     case WM_PAINT:
  131.       GUI_SetBkColor(GUI_BLACK);
  132.       GUI_Clear();
  133.       GUI_SetColor(GUI_WHITE);
  134.       GUI_SetFont(&GUI_Font24_ASCII);
  135.       GUI_DispStringHCenterAt("LISTVIEW Widget - Sample", 160, 5);
  136.       GUI_SetFont(&GUI_Font8x16);
  137.       GUI_DispStringAt(_acMainText, 5, 40);
  138.       GUI_SetFont(&GUI_Font8x8);
  139.       GUI_DispStringAt(_acInfoText, 5, 60);
  140.       break;
  141.     default:
  142.       WM_DefaultProc(pMsg);
  143.   }
  144. }

  145. /*********************************************************************
  146. *
  147. *       _Demo
  148. */
  149. static void _Demo(void) {
  150.   unsigned int i, j;
  151.   int Key = 0;
  152.   int Cnt = 15;
  153.   char acInfoText[] = "-- sec to play with header control";
  154.   HEADER_Handle hHeader;
  155.   hHeader = LISTVIEW_GetHeader(_hListView);
  156.   WM_SetFocus(_hListView);
  157.   _ChangeInfoText("LISTVIEW_AddColumn");
  158.   LISTVIEW_AddColumn(_hListView, 100, "EAN",         GUI_TA_CENTER);
  159.   GUI_Delay(SPEED / 2);
  160.   LISTVIEW_AddColumn(_hListView,  50, "Order #\0x0", GUI_TA_CENTER);
  161.   GUI_Delay(SPEED / 2);
  162.   LISTVIEW_AddColumn(_hListView, 100, "Description", GUI_TA_CENTER);
  163.   GUI_Delay(SPEED / 2);
  164.   _ChangeInfoText("SCROLLBAR_CreateAttached");
  165.   SCROLLBAR_CreateAttached(_hListView, SCROLLBAR_CF_VERTICAL);
  166.   GUI_Delay(SPEED / 2);
  167.   _ChangeInfoText("LISTVIEW_AddRow");
  168.   for (i = 0; i < GUI_COUNTOF(_aTable_1); i++) {
  169.     LISTVIEW_AddRow(_hListView, _aTable_1[i]);
  170.     GUI_Delay(SPEED / 3);
  171.   }
  172.   _ChangeInfoText("LISTVIEW_IncSel");
  173.   for (i = 0; i < LISTVIEW_GetNumRows(_hListView); i++) {
  174.     LISTVIEW_IncSel(_hListView);
  175.     GUI_Delay(SPEED / 4);
  176.   }
  177.   GUI_Delay(SPEED / 4);
  178.   _ChangeInfoText("LISTVIEW_DecSel");
  179.   for (i = 0; i < LISTVIEW_GetNumRows(_hListView); i++) {
  180.     LISTVIEW_DecSel(_hListView);
  181.     GUI_Delay(SPEED / 4);
  182.   }
  183.   GUI_Delay(SPEED / 4);
  184.   _ChangeInfoText("LISTVIEW_SetTextAlign");
  185.   LISTVIEW_SetTextAlign(_hListView, 0, GUI_TA_RIGHT);
  186.   GUI_Delay(SPEED * 0.7);
  187.   _ChangeInfoText("LISTVIEW_SetColumnWidth");
  188.   LISTVIEW_SetColumnWidth(_hListView, 1, 70);
  189.   GUI_Delay(SPEED * 0.7);
  190.   _ChangeInfoText("HEADER_SetTextColor");
  191.   HEADER_SetTextColor(hHeader, GUI_BLUE);
  192.   GUI_Delay(SPEED * 0.7);
  193.   _ChangeInfoText("LISTVIEW_SetItemText");
  194.   for (i = 0; i < GUI_COUNTOF(_aTable_2); i++) {
  195.     for (j = 0; j < GUI_COUNTOF(_aTable_2[i]); j++) {
  196.       LISTVIEW_SetItemText(_hListView, j, i, _aTable_2[i][j]);
  197.     }
  198.   }
  199.   GUI_Delay(SPEED / 2);
  200.   _ChangeInfoText("LISTVIEW_SetBkColor");
  201.   LISTVIEW_SetBkColor(_hListView, 0, GUI_YELLOW);
  202.   GUI_Delay(SPEED * 0.7);
  203.   _ChangeInfoText("LISTVIEW_SetGridVis");
  204.   LISTVIEW_SetGridVis(_hListView, 1);
  205.   GUI_Delay(SPEED * 0.7);
  206.   _ChangeInfoText("HEADER_SetHeight");
  207.   HEADER_SetHeight(hHeader, 30);
  208.   GUI_Delay(SPEED * 0.7);
  209.   _ChangeInfoText("HEADER_SetBitmapEx");
  210.   HEADER_SetBitmap(hHeader, 0, &bmBarCode);
  211.   GUI_Delay(SPEED * 0.7);
  212.   while ((Key != GUI_KEY_ENTER) && (Cnt > 0)) {
  213.     acInfoText[0] = '0' + (Cnt / 10);
  214.     acInfoText[1] = '0' + (Cnt-- % 10);
  215.     _ChangeInfoText(acInfoText);
  216.     GUI_Delay(1000);
  217.     Key = GUI_GetKey();
  218.   }
  219. }

  220. /*********************************************************************
  221. *
  222. *       _DemoListView
  223. */
  224. static void _DemoListView(void) {
  225.   _ChangeMainText("LISTVIEW control without parent");
  226.   _ChangeInfoText("LISTVIEW_Create");
  227.   _hListView = LISTVIEW_Create(10, 80, 300, 89, 0, 1234, WM_CF_SHOW, 0);
  228.   GUI_Delay(SPEED / 2);
  229.   _Demo();
  230.   _ChangeInfoText("LISTVIEW_Delete");
  231.   LISTVIEW_Delete(_hListView);
  232.   GUI_Delay(SPEED);
  233. }

  234. /*********************************************************************
  235. *
  236. *       MainTask
  237. *
  238. **********************************************************************
  239. */
  240. void MainTask(void) {
  241.   GUI_Init();
  242.   WM_EnableMemdev(WM_HBKWIN);
  243.   WM_SetCreateFlags(WM_CF_MEMDEV);
  244.   WM_SetCallback(WM_HBKWIN, _cbBkWindow);
  245.   GUI_CURSOR_Show();
  246.   while(1) {
  247.     _DemoListView();
  248.   }
  249. }
  250.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
复制代码
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-8-14 21:25:46 | 显示全部楼层
ucguibuilder生成的代码,不包含LISTVIEW_AddRow的代码段记为“代码段A”,包含LISTVIEW_AddRow的代码段记为“代码段B”;
ucgui3.98自带的例程记为“代码段C”;
测试步骤:
1. 代码段A ---> OK (注:代码段A屏蔽了LISTVIEW_AddRow函数)
2. 代码段B ---> NG
3. 代码段A ---> NG (注:经过代码段B的测试后,再测试代码段A就不行了)
4. 代码段C ---> OK (注:代码段C是UCGUI3.98自带的Sample里的WIDGET_ListView.c)
5. 代码段A ---> OK (注:代码段C有恢复OK的能力)
以上测试过程说明:本来代码段A是功能正常的,但是烧录代码段B导致死机后,重新烧录代码段A也一样死机,只有烧录一下代码段C才能使代码段A重新恢复正常功能,而代码段B不管怎么样都会死机。

代码段B死机的问题还是没有对比出有什么异常,代码段C为什么能恢复死机功能也成了谜了。。。

(每次烧录后都有重新上电的)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2018-8-15 01:36:30 | 显示全部楼层
tovax 发表于 2018-8-14 18:47
以下代码,不管使用GUI_Font24_ASCII字体,还是SIF字体,只要调用LISTVIEW_AddRow就出问题了;屏蔽掉三行 ...

帮你在我们V6板子上面测试了下,触摸什么的都正常
QQ截图20180815013601.png
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-8-15 04:02:55 | 显示全部楼层
eric2013 发表于 2018-8-15 01:36
帮你在我们V6板子上面测试了下,触摸什么的都正常

十分感谢!这个显示结果跟模拟器是一样的,不过都跟设计本意不一样,ucguibuilder中是这样的:
C1    C2    C3    C4    C5    C6
R1   111   222   333
R2
R3
LISTVIEW_AddRow造成死机的问题,我再对比两段代码看看,有结果再来回复。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-8-15 18:45:17 | 显示全部楼层
本帖最后由 tovax 于 2018-8-15 18:46 编辑

测试结果总结:

1. Column的数量是添加Row的参考基数,如下,有6个Column的话,Row的字符串数组必须是6个,即便是“空”,也要占用一个字符串地址:
static const char * _lvTable_00[6] ={"R1" , "111" , "222" , "333" , "444" , "555"};
static const char * _lvTable_01[6] ={"" , "" , "" , "" , "" , ""};
static const char * _lvTable_02[6] ={"R3" , "111" , "222" , "333" , "444" , "555"};

2. 以上结果由eric2013的测试得出的结论,又按这个思路看了LISTVIEW_AddRow的源码,但是没有仔细分析,应该是这个原因,以下是ucgui源码:
  1.       for (i = 0; i < NumColumns; i++) {
  2.         LISTVIEW_CELL* pCell;
  3.         s = (ppText) ? *ppText++ : 0;
  4.         if (s == 0) {
  5.           ppText = 0;
  6.         }
  7.         NumBytes = GUI__strlen(s) + 1;     /* 0 if no string is specified (s == NULL) */
  8.         if (GUI_ARRAY_AddItem(&pRow->CellArray, NULL, sizeof(LISTVIEW_CELL) + NumBytes)) {
  9.           r = 1;
  10.           break;
  11.         }
  12.         pObj  = LISTVIEW_H2P(hObj);                                            /* Restore after allocating memory */
  13.         pRow  = (LISTVIEW_ROW*) GUI_ARRAY_GetpItem(&pObj->RowArray, RowIndex); /* Restore after allocating memory */
  14.         pCell = (LISTVIEW_CELL*) GUI_ARRAY_GetpItem(&pRow->CellArray, i);
  15.         if (NumBytes > 1) {
  16.           strcpy(pCell->acText, s);
  17.         }
  18.       }
复制代码


3. 昨天同样的代码,我这边死机,而eric2013那边可以正常显示,原因可能是编译器不同,我用的编译器是arm-none-eabi-gcc

4. 这个问题暂时这样了,后续有空再仔细分析,有兴趣深入分析的朋友欢迎交流!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2018-8-16 02:27:49 | 显示全部楼层
tovax 发表于 2018-8-15 18:45
测试结果总结:

1. Column的数量是添加Row的参考基数,如下,有6个Column的话,Row的字符串数组必须是6 ...

回复

使用道具 举报

10

主题

46

回帖

76

积分

初级会员

积分
76
发表于 2020-9-27 16:24:02 | 显示全部楼层
楼主你的问题解决了吗,我现在遇到同样的问题,翻到了你的帖子。项目卡在这里了,挺着急的。谢谢啦
回复

使用道具 举报

76

主题

208

回帖

436

积分

高级会员

积分
436
发表于 2023-10-7 13:45:35 | 显示全部楼层
emwin 5.48 版本 ,listvew 控件在LISTVIEW_DeleteRow 和LISTVIEW_AddRow反复使用中,多试几次会有卡死现象,醉了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 09:18 , Processed in 0.206488 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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