硬汉嵌入式论坛

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

[emWin] STemWin触摸例程代码影响实时性问题请教

[复制链接]

2

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2015-7-21 20:52:01 | 显示全部楼层 |阅读模式
void Touch_MainTask(void)
{
    GUI_PID_STATE TouchState;
    int xPhys, yPhys;
    GUI_CURSOR_Show();
    GUI_CURSOR_Select(&GUI_CursorCrossL);
    GUI_SetBkColor(GUI_WHITE);
    GUI_SetColor(GUI_BLACK);
    GUI_Clear();
    GUI_DispString("Measurement of\nA/D converter values");   
    while(1)
    {        
        GUI_TOUCH_GetState(&TouchState);  /* Get the touch position in pixel */
        xPhys = GUI_TOUCH_GetxPhys();     /* Get the A/D mesurement result in x */
        yPhys = GUI_TOUCH_GetyPhys();     /* Get the A/D mesurement result in y */
        /* Display the measurement result */
        GUI_SetColor(GUI_BLUE);
        GUI_DispStringAt("Analog input:\n", 0, 20);
        GUI_GotoY(GUI_GetDispPosY() + 2);
        GUI_DispString("x:");
        GUI_DispDec(xPhys, 4);
        GUI_DispString(", y:");
        GUI_DispDec(yPhys, 4);
        /* Display the according position */
        GUI_SetColor(GUI_RED);
        GUI_GotoY(GUI_GetDispPosY() + 4);
        GUI_DispString("\nPosition:\n");
        GUI_GotoY(GUI_GetDispPosY() + 2);
        GUI_DispString("x:");
        GUI_DispDec(TouchState.x,4);
        GUI_DispString(", y:");
        GUI_DispDec(TouchState.y,4);
        /* Wait a while */
        GUI_Delay(1);                             
        GUI_TOUCH_Exec();      //-----------------------问题1            
    }
}

问题1:GUI_TOUCH_Exec()代码必须放在这段代码中才能实现触摸校准运行,放在10ms定时中断中无法实现触摸校准功能;
问题2:在这段代码中增加LED闪烁:

while(1)
    {        
        GUI_TOUCH_GetState(&TouchState);  /* Get the touch position in pixel */
        xPhys = GUI_TOUCH_GetxPhys();     /* Get the A/D mesurement result in x */
        yPhys = GUI_TOUCH_GetyPhys();     /* Get the A/D mesurement result in y */
        /* Display the measurement result */
        GUI_SetColor(GUI_BLUE);
                ...........                ...........

        /* Wait a while */
        GUI_Delay(1);                             
        GUI_TOUCH_Exec();

               //问题2:增加的LED闪烁代码
                if (bFlag == SET)                        //10ms中断标志
        {
            static uint8_t LedCnt = 50;            
            bFlag = RESET;
                if (--LedCnt == 0)
                {
                    LedCnt = 50;
                    TEST_LED_TOGGLE;
                }
        }

        }
测试发现LED不是0.5s闪烁,延迟很厉害,大概3~4秒,去掉GUI_Delay(1)和  GUI_TOUCH_Exec()代码也一样,只有去掉GUI_Delay(1)和  GUI_TOUCH_Exec()之前的代码才能正常闪烁,说明问题不在这两句代码,这些代码为什么阻塞如此严重?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2015-7-22 16:46:56 | 显示全部楼层
不好意思啊,现在才顾上回复楼主。
1.  可以放在中断里面的,我们V5板子最早的裸机例子就是把函数GUI_TOUCH_Exec()放在中断里面的。
     估计是你的工程有问题。

2.  这个函数GUI_TOUCH_Exec()会调用你的触摸屏AD值采集,估计在这个里面有问题。
回复

使用道具 举报

2

主题

2

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-7-22 16:58:45 | 显示全部楼层

回 eric2013 的帖子

eric2013:不好意思啊,现在才顾上回复楼主。
1.  可以放在中断里面的,我们V5板子最早的裸机例子就是把函数GUI_TOUCH_Exec()放在中断里面的。
     估计是你的工程有问题。

2.  这个函数GUI_TOUCH_Exec()会调用你的触摸屏AD值采集,估计在这个里 .. (2015-07-22 16:46) 
谢谢你的回复,刚接触STemWin,有些问题还得多指教。
这里确实是STemWin最专业的论坛,主要还是eric2013热情专业。
刚买了《基于STemWin的STM32开发与实践》,写的很好。
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2015-7-23 10:26:19 | 显示全部楼层
可以在debug中单行执行,mdk中可以看看每一行代码用了多长时间。

然后再相应的那一行深入分析。

注意,由于配置debug的时候没有PLL的设置,所以一般显示的时间是按照晶振那个来的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2015-7-23 14:47:07 | 显示全部楼层

回 armszx 的帖子

armszx:谢谢你的回复,刚接触STemWin,有些问题还得多指教。
这里确实是STemWin最专业的论坛,主要还是eric2013热情专业。
刚买了《基于STemWin的STM32开发与实践》,写的很好。 (2015-07-22 16:58) 
[s:142]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-14 18:55 , Processed in 0.047390 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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