我读ucos.中的os_tmr.c:
一、定时器的建立:
OS_TMR
想使用定时器那些函数要在os_cfg.h中定义 OS_TMR_EN。
返回值是os_tmr结构体(定义在ucos_ii.h中)。
typedef
INT8U
OS_TMR_CALLBACK
void
void
INT32U
INT32U
INT32U
#if OS_TMR_CFG_NAME_EN > 0u
INT8U
#endif
INT8U
INT8U
} OS_TMR;
OSTmrType类型定义在ucos_ii.h中:OS_TMR_TYPE
OS_ARG_CHK_EN要在os_cfg.h中定义一下,来确定要不要一些功能。
OS_TMR_CFG_NAME_EN要你自己在os_cfg.h中定义,来控制要不要用OSTmrName
OSTmrState在ucos_ii.h中有以下几种类型:
参数:
- Dly
定时时间,如果是这个定时器只用一次,那么就用这个,如果定时器要反复用那么它是第一次时用,以后用period。 - Period
定时器从复用时会用到这个作定时时间。 - Opt
这里有两种选项,告诉我们是只用一次还是反复使用。只用一次OS_TMR_OPT_ONE_SHOT,反复使用OS_TMR_OPT_PERIODIC。这些定义在ucos_ii.h中。
#define
#define
#define
#define
#define
- Callback
指向回调函数的指针,这个函数这样声明,void mycallback(OS_TMR *ptmr, void p_arg ); - Callback_arg
参数给callback的。 - Pname
定时器的名字 - Perr
错误指针* OS_ERR_NONE 没有错误
用到的函数OSTmr_Alloc()得到一个定时器结构体。
二、删除一个定时器,也是在我们的功能函数中使用,返回为是否成功删除。
BOOLEAN
- Ptmr
指向定时器结构体。 - Perr
指向错误的指针。
三、得到定时器名字的函数,返回名字的长度。
INT8U
四、定时器还有多长时间溢出。返回还有多长时间溢出。
INT32U
五、获得定时器状态的函数,返回状态。
INT8U
六、启动你的定时器,返回是否成功启动。
BOOLEAN
七、停止定时器,返回是否成功停止。
BOOLEAN
回调函数在这里使用,callback()。
Opt 为OS_TMR_OPT_NONE不使用回调函数。
OS_TMR_OPT_CALLBACK使用回调函数不用参数。
OS_TMR_OPT_CALLBACK_ARG要使用参数。
八、发送信号,这个是在timer tick中使用要您写到ISR中
INT8U
九、从定时器池中得到一个结构体。在建构函数中用
static
十、释放定时器,中删除函数中用
static
十一、OSTmr_Init(void),在OSInit()中用。
十二、static
十三、OSTmr_Task()这个是调度你建立的定时器用的,一但定时时间到就调用回调函数。
我们建立的定时器都进入定时器轮盘里OSTmrWheelTbl[],
十四、static
Ptmr->OSTmrMatch的确定方法
if (type == OS_TMR_LINK_PERIODIC) {
挂载定时器时spoke
pspoke = &OSTmrWheelTbl[spoke];这样确定的置位,当OSTmrTime加到和OSTmrMatch相等时一定会来以这个spoke为下标的数组里找该定时器。至于定义一个OSTmrWheelTbl[]而不是把你所有建立的定时器串成一串是怕一起处理浪费时间吧,这样可以一次少处理几个定时器。
我想看了OSTmr_Task (void *p_arg)这个函数的人可能会好奇为什么用那种方法挂载定时器,当定时时间到了时会找到OSTmrWheelTbl[]正确的下标,并在那个OSTmrWheelTbl[ok]里找到该定时器吧。其实你可以算一下,定义OS_TMR_CFG_WHEEL_SIZE=8,然后在OSTmrTime=6时建立一个定时器(假如定时器只工作一次),OSTmrDly=12,那个这个定时器会挂到OSTmrWheelTbl[2]中,当OSTmrTime加到18时它就会去
OSTmrWheelTbl[2]找该定时器。
十五、static
上一篇:#ifdef DEBUG;debug();#endif
下一篇:IAR for MSP430 关于添加自定义头文件的两种方法
推荐阅读最新更新时间:2024-03-16 14:41
设计资源 培训 开发板 精华推荐
- 呼朋唤友,传播电源设计的秘密!
- 【团购】EE_FPGA V2.0配套器件
- 答题赢好礼:Vicor为现代铁路应用设计电源系统
- 中国版BeagleBone Black超低价团购!11月18日火爆开团
- 【投票瓜分2500元红包】2022得捷电子创新设计大赛优秀作品人气奖由你来定!
- 有奖直播:基于GaN 的高频(1.2MHz)高效率 1.6kW 高密度临界模式 (CrM) 图腾柱功率因数校正 (PFC)转换器的应用介绍
- 阅读TI Think.lnnovate 神级DIY系列博文,你来畅想我送礼!
- 有奖直播|ADI 惯性MEMS应用那些事
- 有奖问答:旋智科技—高性能、高集成电机控制解决方案
- 看视频赢京东卡 | PI无刷直流电机学习中心正式上线