OpenEdv-开源电子网

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

例11-2定时器回调函数的问题

[复制链接]

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2015-9-10
在线时间
6 小时
发表于 2015-9-10 19:22:42 | 显示全部楼层 |阅读模式
5金钱
想问下定时器回调函数是否是在每次定时器时间到了时候才会被调用。
[mw_shl_code=c,true]void tmr1_callback(void *p_tmr,void *p_arg) { u8 *pbuf; static u8 msg_num; OS_ERR err; pbuf = mymalloc(SRAMIN,10); if(pbuf) { msg_num++; sprintf((char*)pbuf,"ALIENTEK %d",msg_num); OSTaskQPost((OS_TCB* )&Msgdis_TaskTCB, (void* )pbuf, (OS_MSG_SIZE)10, (OS_OPT )OS_OPT_POST_FIFO, (OS_ERR* )&err); if(err != OS_ERR_NONE) { myfree(SRAMIN,pbuf); OSTmrStop(&tmr1,OS_OPT_TMR_NONE,0,&err); tmr1sta = !tmr1sta; LCD_ShowString(40,150,100,16,16,"TMR1 STOP! "); } } }[/mw_shl_code]
Msgdis_TaskTCB中的4个内建消息队列满后,OSTaskQPost((OS_TCB* )&Msgdis_TaskTCB出错,然后进入if(err != OS_ERR_NONE)释放内存并关闭定时器,这时候,定时器关闭了应该不会在进入这个回调函数里面了吧?所以msg_num这个变量应该只会自加到4啊,可是看视频,在内存释放的过程中msg_num还是会自加,一直加到8.想问下这块应该怎么理解?释放内存的时候定时器到底关闭了没?回调函数在什么情况下会进入?谢谢回答的人啦


最佳答案

查看完整内容[请看2#楼]

答案在STM32F4   UCOS开发手册V3.0   第180页   定时器虽然关了,但是消息队列里面还有没处理完的数据,所以msgdis_task不会停下来
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2015-9-10
在线时间
6 小时
 楼主| 发表于 2015-9-10 19:22:43 | 显示全部楼层
答案在STM32F4   UCOS开发手册V3.0   第180页   定时器虽然关了,但是消息队列里面还有没处理完的数据,所以msgdis_task不会停下来
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-9-10 21:27:56 | 显示全部楼层
什么叫定时器,楼主要好好理解
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 16:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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