硬汉嵌入式论坛

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

[emWin] emWin定时器的API函数使用注意事项,删除后,切不可再操作定时器的句柄,否则硬件异

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107396
QQ
发表于 2017-2-14 00:46:45 | 显示全部楼层 |阅读模式
这里主要指的是以下函数:
888888.png


调用函数WM_CreateTimer创建,然后调用函数WM_DeleteTimer进行删除,如果此时还用函数WM_DeleteTimer操作此句柄,会硬件异常伺候。
函数WM_GetTimerId 和WM_RestartTimer最好也不要再操作。
回复

使用道具 举报

13

主题

38

回帖

77

积分

初级会员

积分
77
发表于 2018-11-5 17:02:31 | 显示全部楼层
eric2013您好:
請問WM_GetTimerID()要傳入的參數是什麼呢? 看文件是寫"獲取給定定時器的ID,這是什麼意思呢? 就是不知道定時器的ID才會呼叫此函數。 謝謝你
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107396
QQ
 楼主| 发表于 2018-11-6 02:33:38 | 显示全部楼层
victor0726 发表于 2018-11-5 17:02
eric2013您好:
請問WM_GetTimerID()要傳入的參數是什麼呢? 看文件是寫"獲取給定定時器的ID,這是什麼意思 ...
  1.                 case WM_TIMER:
  2.                         if(WM_GetTimerId(pMsg->Data.v) == ID_TimerGraph)
  3.                     {
  4.                                 GRAPH_DATA_YT_AddValue(ahData[0], (_HeartBeat[Index]/2)+20);
  5.                                 GRAPH_DATA_YT_AddValue(ahData[1], (_HeartBeat1[Index]/2)+100);
  6.                                 GRAPH_DATA_YT_AddValue(ahData[2],(_HeartBeat2[Index]/2)+190);
  7.                                
  8.                                 if (++Index == GUI_COUNTOF(_HeartBeat))
  9.                                 {
  10.                                         Index = 0;
  11.                                 }

  12.                                 /* 重启定时器 */
  13.                                 WM_RestartTimer(pMsg->Data.v, 20);
  14.                         }
  15.                         else if(WM_GetTimerId(pMsg->Data.v) == ID_TimerTime)
  16.                         {
  17.                                 /* 显示文本ID_TEXT_5的动态数据 */
  18.                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_5);
  19.                                 sprintf(buf, "%d", rand()%100);
  20.                                 TEXT_SetText(hItem, buf);
  21.                        
  22.                                 /* 显示文本ID_TEXT_4的动态数据 */
  23.                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
  24.                                 sprintf(buf, "%d", rand()%100);
  25.                                 TEXT_SetText(hItem, buf);

  26.                                 /* 显示文本ID_TEXT_3的动态数据 */
  27.                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
  28.                                 sprintf(buf, "%d", rand()%100);
  29.                                 TEXT_SetText(hItem, buf);
  30.                                
  31.                                 /* 显示时间和日期 */
  32.                                 Caculate_RTC(pMsg);
  33.                                
  34.                                 /* 重启定时器 */
  35.                                 WM_RestartTimer(pMsg->Data.v, 1000);
  36.                         }
  37.                         break;
复制代码
回复

使用道具 举报

13

主题

38

回帖

77

积分

初级会员

积分
77
发表于 2018-11-6 09:56:38 | 显示全部楼层
eric2013 您好:

如果不是在發生 case WM_TIMER: 的條件下,是否就無法得知定定時器的ID呢? 因為pMsg->Data.v值就不是指向timerID了。 謝謝你
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107396
QQ
 楼主| 发表于 2018-11-7 02:06:46 | 显示全部楼层
victor0726 发表于 2018-11-6 09:56
eric2013 您好:

如果不是在發生 case WM_TIMER: 的條件下,是否就無法得知定定時器的ID呢? 因為pMsg->D ...

这种情况下,函数WM_GetTimerID填WM_CreateTimer的返回值即可。
回复

使用道具 举报

13

主题

38

回帖

77

积分

初级会员

积分
77
发表于 2018-11-8 10:15:06 | 显示全部楼层
感謝回覆
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
发表于 2020-11-24 15:26:47 | 显示全部楼层
我采用WM_DeleteTimer函数删除就进入硬件异常了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107396
QQ
 楼主| 发表于 2020-11-25 10:07:27 | 显示全部楼层
zxc19970106 发表于 2020-11-24 15:26
我采用WM_DeleteTimer函数删除就进入硬件异常了

你的问题已经在另一个帖子里面给你回复了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-29 21:35 , Processed in 0.221587 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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