OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6476|回复: 8

emwin GRAPH图像小工具发现跑波形速度很慢

[复制链接]

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-7-19
在线时间
19 小时
发表于 2018-9-27 10:17:23 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 avenldq 于 2018-9-27 10:19 编辑

[size=13.3333px]

[size=13.3333px][size=13.3333px]emwin GRAPH图像小工具发现跑波形速度很慢,一个简单的心跳波形,一秒钟只能刷新十几个点长度的波形,怎么将刷新速度提高上去呢?[size=13.3333px]调整GUI_Delay(1)的时间没有用?跪请大神帮忙求教!!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-7-19
在线时间
19 小时
 楼主| 发表于 2018-9-27 10:22:57 | 显示全部楼层
emwin GRAPH图像小工具发现跑波形速度很慢,一个简单的心跳波形,一秒钟只能刷新十几个点长度的波形,怎么将刷新速度提高上去呢?调整GUI_Delay(1)的时间没有用?跪请大神帮忙求教!!!
回复

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-9-2
在线时间
14 小时
发表于 2018-9-27 14:12:21 | 显示全部楼层
老哥  你的码我看看呗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-9-28 01:55:23 | 显示全部楼层
尽量优化底层代码。另外,emwin确实效率不高,现在我们改用little gvl,发现比emwin好。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-9-28 01:55:35 | 显示全部楼层
推荐用LGVL
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-7-19
在线时间
19 小时
 楼主| 发表于 2018-9-28 09:31:25 | 显示全部楼层
LGVL是啥东东?
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-7-19
在线时间
19 小时
 楼主| 发表于 2018-9-28 09:44:31 | 显示全部楼层
*********************************************************************************************************
*        函 数 名: _cbDialogInfo
*        功能说明: 主窗口的回调函数
*        形    参:pMsg   参数指针
*        返 回 值: 无
*********************************************************************************************************
*/
static void _cbDialog(WM_MESSAGE * pMsg)
{
        WM_HWIN hItem;
        char buf[10];
        static         char Index = 0;

        switch (pMsg->MsgId)
        {
                case WM_INIT_DIALOG:
                       
                        /* 创建曲线 */
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);
                        GRAPH_SetBorder(hItem, 0, 0, 0, 0);
                        ahData[0] = GRAPH_DATA_YT_Create(_aColor[0], 700, 0, 0);
                        ahData[1] = GRAPH_DATA_YT_Create(_aColor[1], 700, 0, 0);
                        ahData[2] = GRAPH_DATA_YT_Create(_aColor[2], 700, 0, 0);

                        /* 为绘图控件添加数据对象 */
                        GRAPH_AttachData(hItem, ahData[0]);
                        GRAPH_AttachData(hItem, ahData[1]);
                        GRAPH_AttachData(hItem, ahData[2]);
                        WIDGET_SetEffect(hItem, &WIDGET_Effect_None);

                        /* 创建文本 */
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
                        TEXT_SetTextColor(hItem, 0x000000FF);
                        TEXT_SetFont(hItem, &GUI_FontHZ16);
                        TEXT_SetText(hItem, "心率");

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
                        TEXT_SetTextColor(hItem, 0x0000FF00);
                        TEXT_SetFont(hItem, &GUI_FontHZ16);
                        TEXT_SetText(hItem, "呼吸率");

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
                        TEXT_SetTextColor(hItem, 0x0000FFFF);
                        TEXT_SetFont(hItem, &GUI_FontHZ16);
                        TEXT_SetText(hItem, "脉搏率");

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
                        TEXT_SetFont(hItem, GUI_FONT_D48);
                        TEXT_SetTextColor(hItem, 0x000000FF);
                        TEXT_SetText(hItem, "50");
                        TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
                        TEXT_SetFont(hItem, GUI_FONT_D48);
                        TEXT_SetText(hItem, "60");
                        TEXT_SetTextColor(hItem, 0x0000FF00);
                        TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_5);
                        TEXT_SetTextColor(hItem, 0x0000FFFF);
                        TEXT_SetFont(hItem, GUI_FONT_D48);
                        TEXT_SetText(hItem, "70");
                        TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_6);
                        TEXT_SetFont(hItem, GUI_FONT_13B_ASCII);
                        TEXT_SetTextColor(hItem, 0x000000FF);
                        TEXT_SetText(hItem, "bmp");

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_7);
                        TEXT_SetFont(hItem, GUI_FONT_13B_ASCII);
                        TEXT_SetTextColor(hItem, 0x0000FF00);
                        TEXT_SetText(hItem, "BrPM");

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_8);
                        TEXT_SetFont(hItem, GUI_FONT_13B_ASCII);
                        TEXT_SetText(hItem, "bmp");
                        TEXT_SetTextColor(hItem, 0x0000FFFF);

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_9);
                        TEXT_SetFont(hItem, GUI_FONT_16B_ASCII);
                        TEXT_SetTextColor(hItem, 0x00FFFFFF);
                        TEXT_SetText(hItem, "2014-06-17");
                       
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_10);
                        TEXT_SetFont(hItem, GUI_FONT_16B_ASCII);
                        TEXT_SetTextColor(hItem, 0x00FFFFFF);
                        TEXT_SetText(hItem, "00:00:00");
                        break;
                       
                case WM_PAINT:
                        /* 显示标题并重绘背景色 */
                  GUI_SetBkColor(0x00408000);
                        GUI_ClearRect(0,0,800, 24);
                        GUI_SetFont(&GUI_FontHZ16);
                        GUI_DispStringAt("床号 1 姓名: 张三", 5, 3);
                        GUI_SetBkColor(GUI_BLACK);
                        GUI_ClearRect(0,25,LCD_GetXSize()-1, LCD_GetYSize()-1);

                    /* 用于绘制三个白色的圆角方框 */
                        GUI_SetColor(GUI_WHITE);
                        GUI_AA_DrawRoundedRect(680,  25, 799, 108, 6);
                        GUI_AA_DrawRoundedRect(680, 110, 799, 193, 6);
                        GUI_AA_DrawRoundedRect(680, 195, 799, 276, 6);
                        break;
                       
                case WM_TIMER:
                        if(WM_GetTimerId(pMsg->Data.v) == ID_TimerGraph)
                    {
                                GRAPH_DATA_YT_AddValue(ahData[0], (_HeartBeat[Index]/5)+20);
                                GRAPH_DATA_YT_AddValue(ahData[1], (_HeartBeat1[Index]/2)+100);
                                GRAPH_DATA_YT_AddValue(ahData[2],(_HeartBeat2[Index]/2)+190);
                               
                                if (++Index == GUI_COUNTOF(_HeartBeat))
                                {
                                        Index = 0;
                                }

                                /* 重启定时器 */
                                WM_RestartTimer(pMsg->Data.v, 100);
                        }
                        else if(WM_GetTimerId(pMsg->Data.v) == ID_TimerTime)
                        {
                                /* 显示文本ID_TEXT_5的动态数据 */
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_5);
                                sprintf(buf, "%d", rand()%100);
                                TEXT_SetText(hItem, buf);
                       
                                /* 显示文本ID_TEXT_4的动态数据 */
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
                                sprintf(buf, "%d", rand()%100);
                                TEXT_SetText(hItem, buf);

                                /* 显示文本ID_TEXT_3的动态数据 */
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
                                sprintf(buf, "%d", rand()%100);
                                TEXT_SetText(hItem, buf);
                               
                                /* 显示时间和日期 */
//                                Caculate_RTC(pMsg);
                               
                                /* 重启定时器 */
                                WM_RestartTimer(pMsg->Data.v, 1000);
                        }
                        break;
               
         
               
                default:
                        WM_DefaultProc(pMsg);
        }
}

/*
*********************************************************************************************************
*        函 数 名: MainTask
*        功能说明: GUI主函数
*        形    参: 无
*        返 回 值: 无
*********************************************************************************************************
*/
void MainTaskh(void)
{
        /* 初始化 */
        GUI_Init();
         
        /*
         关于多缓冲和窗口内存设备的设置说明
           1. 使能多缓冲是调用的如下函数,用户要在LCDConf_Lin_Template.c文件中配置了多缓冲,调用此函数才有效:
                  WM_MULTIBUF_Enable(1);
           2. 窗口使能使用内存设备是调用函数:WM_SetCreateFlags(WM_CF_MEMDEV);
           3. 如果emWin的配置多缓冲和窗口内存设备都支持,二选一即可,且务必优先选择使用多缓冲,实际使用
                  STM32F429BIT6 + 32位SDRAM + RGB565/RGB888平台测试,多缓冲可以有效的降低窗口移动或者滑动时的撕裂
                  感,并有效的提高流畅性,通过使能窗口使用内存设备是做不到的。
           4. 所有emWin例子默认是开启三缓冲。
        */
        WM_MULTIBUF_Enable(1);
       
        #if GUI_SUPPORT_MEMDEV
   WM_SetCreateFlags(WM_CF_MEMDEV);
  #endif
       
        /*
       触摸校准函数默认是注释掉的,电阻屏需要校准,电容屏无需校准。如果用户需要校准电阻屏的话,执行
           此函数即可,会将触摸校准参数保存到EEPROM里面,以后系统上电会自动从EEPROM里面加载。
        */
    //TOUCH_Calibration();
       
        hWinMain = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
       
        /* 使能UTF-8解码用于汉字显示 */
//        GUI_UC_SetEncodeUTF8();
       
        /* 创建两个定时器 */
        WM_CreateTimer(WM_GetClientWindow(hWinMain), /* 接受信息的窗口的句柄 */
                                   ID_TimerGraph,                  /* 用户定义的Id。如果不对同一窗口使用多个定时器,此值可以设置为零。 */
                                   10,                       /* 周期,此周期过后指定窗口应收到消息*/
                                   0);                             /* 留待将来使用,应为0 */
       
        WM_CreateTimer(WM_GetClientWindow(hWinMain), /* 接受信息的窗口的句柄 */
                                   ID_TimerTime,                  /* 用户定义的Id。如果不对同一窗口使用多个定时器,此值可以设置为零。 */
                                   10,                       /* 周期,此周期过后指定窗口应收到消息*/
                                   0);                             /* 留待将来使用,应为0 */
       
        while (1)
        {
                GUI_Delay(1);
        }
}
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2014-8-5
在线时间
12 小时
发表于 2018-11-22 10:06:01 | 显示全部楼层
请问你的速度提上去了吗?
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1350
金钱
1350
注册时间
2012-4-25
在线时间
195 小时
发表于 2018-11-26 16:50:26 | 显示全部楼层
emwin 波形自己重绘,速度还是可以的。我显示的电压电流波形
1-1
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 03:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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