硬汉嵌入式论坛

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

[emWin] emWin电脑仿真程序可以运行,但下载到板子上就不行了?

[复制链接]

45

主题

45

回帖

45

积分

初级会员

积分
45
发表于 2017-9-11 09:32:52 | 显示全部楼层 |阅读模式
emWin电脑仿真程序可以运行,但下载到板子上就不行了?
1,如图,当t % 300 == 0时对GRAPH :图形小工具清除 GRAPH_DATA_YT 对象的所有数据项
电脑仿真可以,但下载到板子上,它就直接循环了?
2,用stlink仿真 调试能查看t的数值变化吗?
捕获.PNG
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107418
QQ
发表于 2017-9-11 09:40:57 | 显示全部楼层
把模拟器的仿真代码贴出来,仅你写的程序部分即可,方便我测试下。
回复

使用道具 举报

45

主题

45

回帖

45

积分

初级会员

积分
45
 楼主| 发表于 2017-9-11 10:09:46 | 显示全部楼层

回 eric2013 的帖子

  1. #include "DIALOG.h"
  2. #include "EMWINGUI.h"
  3. /*********************************************************************
  4. *
  5. *       Defines
  6. *
  7. **********************************************************************
  8. */
  9. #define ID_WINDOW_0    (GUI_ID_USER + 0x00)
  10. #define ID_GRAPH_0    (GUI_ID_USER + 0x02)
  11. #define ID_BUTTON_0    (GUI_ID_USER + 0x03)
  12. #define ID_BUTTON_1    (GUI_ID_USER + 0x04)
  13. #define ID_BUTTON_2    (GUI_ID_USER + 0x05)
  14. #define  ID_TEXT_0    (GUI_ID_USER + 0x06)
  15. #define  ID_TEXT_1    (GUI_ID_USER + 0x07)
  16. #define  ID_TEXT_3    (GUI_ID_USER + 0x08)
  17. // USER START (Optionally insert additional defines)
  18. int t =0;
  19. int temperature=30;     //温度
  20. int humidity=15;     //湿度
  21. int Atemperature = 5;     //温度
  22. int Ahumidity = 10;     //湿度
  23. #define BORDER_BOTTOM_A         160    //距离下边框刻度的尺寸160
  24. #define BORDER_LEFT_A           15  //距离左边框的尺寸15
  25. #define PROGBAR_DEFAULT_FONT &GUI_Font13_ASCII //进度条内部显示文本所使用的字体
  26. static GRAPH_SCALE_Handle hScaleV;       //垂直刻度句柄
  27. static GRAPH_SCALE_Handle hScaleH;       //水平刻度句柄
  28. #define SCALE_FACTOR 10
  29. unsigned i;
  30. char bufa[2];
  31. static int _Stop;
  32. enum SENSOR_TYPE{ DHT11, DS18B20 };        //DHT11传感器,DS18B20传感器,芯片内部温度检测
  33. static enum SENSOR_TYPE sensor_type  ;    //默认为内部温度传感器
  34. /*************************************************i*******************
  35. *
  36. *       Static data
  37. *
  38. **********************************************************************
  39. */
  40. static void Caculate_DFHII(WM_MESSAGE * pMsg)
  41. {
  42.     WM_HWIN hWin = pMsg->hWin;
  43.     //TEXT_SetFont(hWin, FONT_GEAR12);
  44.     TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_3), "1234");
  45.     switch (sensor_type)
  46.     {
  47.     case DHT11:
  48.         if ((temperature >= 0) && (temperature <= 10)) //1度到10度黄色防冻
  49.         {
  50.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_YELLOW);
  51.             sprintf(bufa, "%2d℃注意防冻", temperature);
  52.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  53.         }
  54.         if ((temperature >= 11) && (temperature <= 20))  //10度到20度绿注意保暖
  55.         {
  56.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_CYAN);
  57.             sprintf(bufa, "%2d℃注意保暖", temperature);
  58.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  59.         }
  60.         if ((temperature >= 21) && (temperature <= 25))//21度到25度红温暖
  61.         {
  62.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_GREEN);
  63.             sprintf(bufa, "%02d℃", temperature);
  64.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  65.         }
  66.         if ((temperature >= 26) && (temperature <= 35))//21度到25度红炎热
  67.         {
  68.             TEXT_SetBkColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_MAGENTA);
  69.             sprintf(bufa, "%02d℃天气炎热", temperature);
  70.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  71.         }
  72.         if ((temperature >= 36) && (temperature <= 50))//21度到25度红酷热
  73.         {
  74.             TEXT_SetBkColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_RED);
  75.             sprintf(bufa, "%02d℃天气酷热", temperature);
  76.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  77.         }
  78.         if ((humidity >= 20) && (humidity <= 39)) //1度到16度黄色
  79.             GRAPH_SetVSizeY(WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0), 0);
  80.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_1), GUI_YELLOW);
  81.         if ((humidity >= 40) && (humidity <= 60))  //29度到32度绿
  82.             GRAPH_SetVSizeY(WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0), 0);
  83.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_1), GUI_GREEN);
  84.         if ((humidity >= 61) && (humidity <= 100))//29度到32度红
  85.         {
  86.             GRAPH_SetVSizeY(WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0), 300);
  87.             TEXT_SetBkColor(WM_GetDialogItem(hWin, ID_TEXT_1), GUI_RED);
  88.         }
  89.         sprintf(bufa, "%02d %RH", humidity);
  90.         TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_1), bufa);
  91.         break;
  92.     case DS18B20:
  93.         if ((Atemperature >= 0) && (Atemperature <= 10)) //1度到10度黄色防冻
  94.         {
  95.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_YELLOW);
  96.             sprintf(bufa, "%2d℃注意防冻", Atemperature);
  97.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  98.         }
  99.         if ((Atemperature >= 11) && (Atemperature <= 20))  //10度到20度绿注意保暖
  100.         {
  101.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_CYAN);
  102.             sprintf(bufa, "%2d℃注意保暖", Atemperature);
  103.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  104.         }
  105.         if ((Atemperature >= 21) && (Atemperature <= 25))//21度到25度红温暖
  106.         {
  107.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_GREEN);
  108.             sprintf(bufa, "%02d℃", Atemperature);
  109.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  110.         }
  111.         if ((Atemperature >= 26) && (Atemperature <= 35))//21度到25度红炎热
  112.         {
  113.             TEXT_SetBkColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_MAGENTA);
  114.             sprintf(bufa, "%02d℃天气炎热", Atemperature);
  115.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  116.         }
  117.         if ((Atemperature >= 36) && (Atemperature <= 50))//21度到25度红酷热
  118.         {
  119.             TEXT_SetBkColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_RED);
  120.             sprintf(bufa, "%02d℃天气酷热", Atemperature);
  121.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  122.         }
  123.         sprintf(bufa, "%02d %RH", Ahumidity);
  124.         TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_1), bufa);
  125.         
  126.         break;
  127.     default:
  128.         break;
  129.     }
  130. }
  131. /*********************************************************************
  132. *
  133. *       _aDialogCreate
  134. */
  135. static const GUI_WIDGET_CREATE_INFO _aDialoggraph[] = {
  136.     { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 320, 240, 0, 0x0, 0 },
  137.     { GRAPH_CreateIndirect, "Graph", ID_GRAPH_0, 0, 0, 320, 240, 0, 0x0, 0 },
  138.     { BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 23, 217, 80, 20, 0, 0x0, 0 },
  139.     { BUTTON_CreateIndirect, "Button", ID_BUTTON_2, 125, 217, 80, 20, 0, 0x0, 0 },
  140.     { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 220, 217, 80, 20, 0, 0x0, 0 },
  141. };
  142. /*****************测试******************************/
  143. static GUI_COLOR _aColor[] = { GUI_RED, GUI_GREEN, GUI_LIGHTBLUE }; // Array of colors for the GRAPH_DATA objects
  144. static I16 _aValue[3];
  145. static GRAPH_DATA_Handle  _ahData[3]; // Array of handles for the GRAPH_DATA objects
  146. static void _AddValues(void) {
  147.     switch (sensor_type)
  148.     {
  149.     case DS18B20:
  150.         //if (ID_BUTTON_0 == 0)
  151.         //{
  152.         GUI_Delay(80);
  153.         _aValue[1] = Ahumidity;
  154.         _aValue[0] = Atemperature;
  155.         GRAPH_DATA_YT_AddValue(_ahData[0], _aValue[0] * 3);//数据对象的句柄, /增加到数据对象的值
  156.         GRAPH_DATA_YT_AddValue(_ahData[1], _aValue[1] * 3);//数据对象的句柄, /增加到数据对象的值
  157.     /*    }*/
  158.         break;
  159.     case DHT11:
  160.         GUI_Delay(160);
  161.         _aValue[1] = humidity;
  162.         _aValue[0] = temperature;
  163.         GRAPH_DATA_YT_AddValue(_ahData[0], _aValue[0] * 3);//数据对象的句柄, /增加到数据对象的值
  164.         GRAPH_DATA_YT_AddValue(_ahData[1], _aValue[1] * 3);//数据对象的句柄, /增加到数据对象的值
  165.         break;
  166.     default:
  167.         break;
  168.     }
  169.    
  170. }
  171. /*********************************************************************
  172. *
  173. *       Static code
  174. *
  175. **********************************************************************
  176. */
  177. static void _UserDraw(WM_HWIN hWin, int Stage) {
  178.     if (Stage == GRAPH_DRAW_LAST) {
  179.         GUI_SetFont(&GUI_Font13_ASCII);
  180.         switch (sensor_type)
  181.         {
  182.         case  DS18B20:
  183.             GUI_DispStringAt("DS18B20", 270, 10);
  184.             break;
  185.         case DHT11:
  186.             GUI_DispStringAt("DHT11", 270, 10);
  187.             break;
  188.         default:
  189.             break;
  190.         }
  191.     }
  192. }
  193. /*********************************************************************
  194. *
  195. *       _cbDialog
  196. */
  197. static void _cbgraph(WM_MESSAGE * pMsg) {
  198.     WM_HWIN hItem;
  199.     WM_HWIN hItema;
  200.     int     NCode;
  201.     int     Id;
  202.     switch (pMsg->MsgId) {
  203.     case WM_TIMER:
  204.         /* 显示时间和日期 */
  205.         Caculate_DFHII(pMsg);
  206.         /* 重启定时器 */
  207.         WM_RestartTimer(pMsg->Data.v, 1000);
  208.         break;
  209.     case WM_INIT_DIALOG:
  210.         hItem = WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);
  211.         GRAPH_SetBorder(hItem, 20, 10, 0, 35);
  212.         /* ****** 测试******************************************/
  213.         /* 创建三个数据对象_ahData[i] */
  214.         for (i = 0; i < GUI_COUNTOF(_aColor); i++) {
  215.             _aValue[i] = rand() % 180;
  216.             /* 创建成功的话,返回数据句柄 */
  217.             /* 显示的曲线颜色,可以显示的最大数据个数,数据指针,要添加的数据个数 */
  218.                 _ahData[i] = GRAPH_DATA_YT_Create(_aColor[i], 300, 0, 0);
  219.             //被添加的数据数量
  220.             /* 为绘图控件添加数据对象 */
  221.             GRAPH_AttachData(hItem, _ahData[i]);
  222.             GRAPH_DATA_YT_SetOffY(_ahData[i], 0);//数据的垂直偏移。
  223.             GRAPH_DATA_YT_SetAlign(_ahData[i], GRAPH_ALIGN_LEFT);//数据的对齐方式。
  224.         }
  225.         /* ****** 测试******************************************/
  226.         /* 设置图形控件属性 */
  227.         GRAPH_SetUserDraw(hItem, _UserDraw);//设置用户回调函数
  228.         GRAPH_SetGridDistX(hItem, 25);        //设置水平网格间距
  229.         GRAPH_SetGridDistY(hItem, 15);        //设置垂直网格间距
  230.         GRAPH_SetGridVis(hItem, 1);            //设置网格可见
  231.         
  232.         hScaleV = GRAPH_SCALE_Create(BORDER_LEFT_A, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL,15); //绘制垂直刻度
  233.         GRAPH_SCALE_SetTextColor(hScaleV, GUI_YELLOW); //设置刻度的文本颜色
  234.         GRAPH_SCALE_SetFactor(hScaleV, 0.333);//设置用于计算从像素转换到所需单位的计算因子
  235.         GRAPH_AttachScale(hItem, hScaleV);   //将刻度对象附加到图形小工具
  236.         hScaleH = GRAPH_SCALE_Create(BORDER_BOTTOM_A, GUI_TA_LEFT, GRAPH_SCALE_CF_HORIZONTAL,25);
  237.         GRAPH_SCALE_SetFactor(hScaleH, 0.2);//设置用于计算从像素转换到所需单位的计算因子
  238.         GRAPH_SCALE_SetTextColor(hScaleH, GUI_DARKGREEN);
  239.         GRAPH_AttachScale(hItem, hScaleH);   //将刻度对象附加到图形小工具
  240.         GRAPH_SCALE_SetPos(hScaleH,208);//显示位置
  241.         //BUTTON_SetFont(hItem, FONT_GEAR12);
  242.         hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
  243.         BUTTON_SetText(hItem, "返回");
  244.         //
  245.         // Initialization of 'Button'
  246.         //
  247.         hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
  248.         BUTTON_SetText(hItem, "DS18B20");
  249.         //
  250.         // Initialization of 'Button'
  251.         //
  252.         hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
  253.         BUTTON_SetText(hItem, "DFH11");
  254.         //hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
  255.         //TEXT_SetTextAlign(hItem, TEXT_CF_LEFT);
  256.         break;
  257.     case WM_NOTIFY_PARENT:
  258.         Id = WM_GetId(pMsg->hWinSrc);
  259.         NCode = pMsg->Data.v;
  260.         switch (Id) {
  261.         case ID_BUTTON_0: // 返回
  262.             switch (NCode) {
  263.             case WM_NOTIFICATION_CLICKED:
  264.                 break;
  265.             case WM_NOTIFICATION_RELEASED:
  266.                
  267.                 break;
  268.             }
  269.             break;
  270.         case ID_BUTTON_1: // Notifications sent by 'Button'
  271.             switch (NCode) {
  272.             case WM_NOTIFICATION_RELEASED:
  273.                 t = 0;
  274.                 GRAPH_DATA_YT_Clear(_ahData[1]);
  275.                 GRAPH_DATA_YT_Clear(_ahData[0]);
  276.                 sensor_type = DS18B20;
  277.                 break;
  278.             }
  279.             break;
  280.         case ID_BUTTON_2: // Notifications sent by 'Button'
  281.             switch (NCode) {
  282.             case WM_NOTIFICATION_RELEASED:
  283.                 t = 0;
  284.                 GRAPH_DATA_YT_Clear(_ahData[1]);
  285.                 GRAPH_DATA_YT_Clear(_ahData[0]);
  286.                 sensor_type = DHT11;
  287.                 break;
  288.             }
  289.             break;
  290.         }
  291.         break;
  292.     default:
  293.         WM_DefaultProc(pMsg);
  294.         break;
  295.     }
  296. }
  297. /*************************** End of file ****************************/
  298. void MainTask(void) {
  299.     GUI_Init();
  300.     WM_HWIN hDlg;
  301.     WM_HWIN hGraph;
  302.     WM_HWIN htextb;
  303.     hDlg = GUI_CreateDialogBox(_aDialoggraph, GUI_COUNTOF(_aDialoggraph), _cbgraph, WM_HBKWIN, 0, 0);
  304.     htextb = TEXT_CreateEx(26, 12, 44, 20, hDlg, WM_CF_SHOW, TEXT_CF_LEFT, ID_TEXT_0, 0);
  305.     TEXT_SetFont(htextb, PROGBAR_DEFAULT_FONT);
  306. htextb = TEXT_CreateEx(26, 34, 44, 20, hDlg, WM_CF_SHOW, TEXT_CF_LEFT, ID_TEXT_1, 0);
  307. TEXT_SetFont(htextb, PROGBAR_DEFAULT_FONT);
  308. htextb = TEXT_CreateEx(240, 0, 80, 11, hDlg, WM_CF_SHOW, TEXT_CF_LEFT, ID_TEXT_3, 0);
  309. TEXT_SetTextAlign(htextb, TEXT_CF_RIGHT);
  310.     WM_CreateTimer(hDlg,  /* 接受信息的窗口的句柄 */
  311.         0,              /* 用户定义的Id。如果不对同一窗口使用多个定时器,此值可以设置为零。 */
  312.         100,         /* 周期,此周期过后指定窗口应收到消息*/
  313.         0);             /* 留待将来使用,应为0 */
  314.     while (1) {
  315.         //if (t % 10 == 0)//每100ms读取一次
  316.         //{
  317.         //    DHT11_Read_Data(&temperature, &humidity);        //读取温湿度值            
  318.         //}
  319.             _AddValues();
  320.             if (t % 300 == 0)
  321.             {
  322.                     GRAPH_DATA_YT_Clear(_ahData[0]);
  323.                     GRAPH_DATA_YT_Clear(_ahData[1]);
  324.                     t = 0;
  325.             }
  326.             t++;
  327.         
  328.             GUI_Delay(100);
  329.     }
  330. }
复制代码
eric2013:
把模拟器的仿真代码贴出来,仅你写的程序部分即可,方便我测试下。
emWin电脑仿真程序可以运行,但下载到板子上就不行了?
1,如图,当t % 300 == 0时对GRAPH :图形小工具清除 GRAPH_DATA_YT 对象的所有数据项
电脑仿真可以,但下载到板子上,它就直接循环了?
2,用stlink仿真 调试能查看t的数值变化吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107418
QQ
发表于 2017-9-12 10:18:58 | 显示全部楼层

回 pengzisheng 的帖子

pengzisheng:emWin电脑仿真程序可以运行,但下载到板子上就不行了?
1,如图,当t % 300 == 0时对GRAPH :图形小工具清除 GRAPH_DATA_YT 对象的所有数据项
电脑仿真可以,但下载到板子上,它就直接循环了?
2,用stlink仿真 调试能查看t的数值变化吗?
....... (2017-09-11 10:09) 
的确是,下载到板子里面后,仅仅一个控件显示,无波形显示。

把你的程序,精简下,然后排查问题吧。
回复

使用道具 举报

1

主题

3

回帖

1

积分

新手上路

积分
1
发表于 2017-9-14 11:10:41 | 显示全部楼层
把动态内存改大点试试
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-30 18:58 , Processed in 0.208441 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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