硬汉嵌入式论坛

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

[GUI] 使用nxp自带的emwin库的timer不触发

[复制链接]

18

主题

261

回帖

315

积分

高级会员

积分
315
发表于 2017-12-23 19:47:29 | 显示全部楼层 |阅读模式
使用rt1050自带的emwin工程。使用下面代码测试emwin自己的timer。不会触发回调。如果用emwin的仿真器可以正常触发

代码如下
#include "GUI.h"
#include "BUTTON.h"
#include "CHECKBOX.h"
#include "SLIDER.h"
#include "DROPDOWN.h"
#include "RADIO.h"
#include "MULTIPAGE.h"


void _cbWin(WM_MESSAGE * pMsg)
{
    switch (pMsg->MsgId) {
        case WM_TIMER:
        /*
        ... do something ...
        */
        WM_RestartTimer(pMsg->Data.v, 1000);
        break;
        default:
        WM_DefaultProc(pMsg);
    }
}

void MainTask(void)
{
    WM_HWIN hWin;
    WM_HTIMER hTimer;
    hWin = WM_CreateWindow(10, 10, 100, 100, WM_CF_SHOW, _cbWin, 0);
//    hTimer = WM_CreateTimer(WM_GetClientWindow(hWin), 0, 1000, 0);
    hTimer = WM_CreateTimer(hWin, 0, 1000, 0);
    while (1) {
        GUI_Exec();
    }
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2017-12-23 19:50:37 | 显示全部楼层
官方的这个工程,emWin时间基准设置的多少,一般都是1ms,如果时基准的话,这个定时器功能就是没问题的,可以测试下GUI_Delay,延迟时间是否有问题。
回复

使用道具 举报

18

主题

261

回帖

315

积分

高级会员

积分
315
 楼主| 发表于 2017-12-23 21:10:18 | 显示全部楼层
eric2013 发表于 2017-12-23 19:50
官方的这个工程,emWin时间基准设置的多少,一般都是1ms,如果时基准的话,这个定时器功能就是没问题的,可 ...

找到问题了,rt1050的emwin_support文件中函数GUI_TIMER_TIME GUI_X_GetTime(void)直接返回0了。加上滴答定时就好了
回复

使用道具 举报

2

主题

3

回帖

9

积分

新手上路

积分
9
发表于 2019-3-25 19:05:22 | 显示全部楼层
xieyang__ 发表于 2017-12-23 21:10
找到问题了,rt1050的emwin_support文件中函数GUI_TIMER_TIME GUI_X_GetTime(void)直接返回0了。加上滴答 ...

請問可以PO範例嗎
也遇到相同問題
回复

使用道具 举报

18

主题

261

回帖

315

积分

高级会员

积分
315
 楼主| 发表于 2019-3-25 21:06:47 | 显示全部楼层
Ian_tt5zR 发表于 2019-3-25 19:05
請問可以PO範例嗎
也遇到相同問題

现在官方的例程应该没问题了吧。从nxp的网站可以下载到例程
回复

使用道具 举报

11

主题

31

回帖

64

积分

初级会员

积分
64
发表于 2019-7-1 15:14:42 | 显示全部楼层
xieyang__ 发表于 2019-3-25 21:06
现在官方的例程应该没问题了吧。从nxp的网站可以下载到例程

老铁,官方的SDK里这个函数还是return 0 ,在这个函数加上一个系统定时器的初始化函数吗,
回复

使用道具 举报

18

主题

261

回帖

315

积分

高级会员

积分
315
 楼主| 发表于 2019-7-2 21:40:19 | 显示全部楼层
提线木偶 发表于 2019-7-1 15:14
老铁,官方的SDK里这个函数还是return 0 ,在这个函数加上一个系统定时器的初始化函数吗,

是的,自己添加一个定时器
回复

使用道具 举报

4

主题

9

回帖

21

积分

新手上路

积分
21
发表于 2019-7-10 21:27:59 | 显示全部楼层
xieyang__ 发表于 2019-7-2 21:40
是的,自己添加一个定时器

能发个例子么?我添加了定时器初始化函数不起作用
回复

使用道具 举报

18

主题

261

回帖

315

积分

高级会员

积分
315
 楼主| 发表于 2019-7-10 22:28:32 | 显示全部楼层
本帖最后由 xieyang__ 于 2019-7-10 22:33 编辑
liuyawe_R6ilq 发表于 2019-7-10 21:27
能发个例子么?我添加了定时器初始化函数不起作用

我是加入了rtos,就直接返回了系统事件。如果时单独使用定时器,建议使用1ms时间基准,返回对应的计时信息
#include "FreeRTOS.h"
GUI_TIMER_TIME GUI_X_GetTime(void)
{
        //返回系统时间
    return xTaskGetTickCount();
}

下边的demo仅供参考。使用的库和pack都挺老了新版的库会编译不过

链接:https://pan.baidu.com/s/1eVzXt-uGwx-ZydGMiIsqig
提取码:ui84
复制这段内容后打开百度网盘手机App,操作更方便哦

回复

使用道具 举报

4

主题

9

回帖

21

积分

新手上路

积分
21
发表于 2019-7-15 15:54:10 | 显示全部楼层
本帖最后由 liuyawe_R6ilq 于 2019-7-15 17:17 编辑

以下是裸机的定时器调用



void SysTick_Handler(void)
{
        /*每隔1ms,对软件定时器的计数器进行减一操作*/
  if (TimingDelay != 0x00)
  {
    TimingDelay--;
  }
        /*全局运行时间每1ms增1*/
        TimeMS++;
        if (TimeMS == 0x7FFFFFFF)        /* 这个变量是 int32_t 类型,最大数为 0x7FFFFFFF */
        {
                TimeMS = 0;
        }
}
GUI_TIMER_TIME GUI_X_GetTime(void) {

        return TimeMS;
}


void GUI_X_Delay(int Period)
{
        int tEnd = TimeMS + Period;
        while ((tEnd - TimeMS) > 0);
//    volatile int i;
//    for (; Period > 0; Period--)
//    {
//        for (i = 15000; i > 0; i--)
//            ;
//    }
}

回复

使用道具 举报

4

主题

9

回帖

21

积分

新手上路

积分
21
发表于 2019-7-15 15:56:29 | 显示全部楼层
xieyang__ 发表于 2019-7-10 22:28
我是加入了rtos,就直接返回了系统事件。如果时单独使用定时器,建议使用1ms时间基准,返回对应的计时信 ...

谢谢您和各位
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-12 19:20 , Processed in 0.289509 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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