1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /*******************************************************************************
- * File Name: STimer.c
- * Function Describe: Soft Timer
- * Relate Module:
- * Explain: 针对RTX系统自带的定时器并不好用,特改进增加了本软定时器
- 支持设置回调函数,时间到调用相关回调函数,并且可在回调函数中重新设置定时器重新启动
- 需要注意的是:那个任务创建定时器,则哪个任务执行回调
- * Writer:ShiLiangWen
- * Date: 2015.11.6
- *******************************************************************************/
- #include <stm32f10x.h>
- #include "stdio.h"
- #include "STimer.h"
- #include <rtl.h>
- timer_t FirstTimer={0};//Timer列表中的第一个Timer.计时器永远从这个Timer中计时,时间到达后执行本Timer的Callback,然后将下一个Timer拷贝到本Timer.
- /***********************************************************************************
- *STimerCreate
- *初始化定时器
- 入口参数:
- Timer 定时器实例的指针,必须是实例
- CallBack 时间到的回调函数
- Param 回调函数的参数
- ************************************************************************************/
- void STimerCreate(timer_t *Timer,timer_cb_t CallBack,void *Param)
- {
- Timer->next=NULL;
- Timer->handler=CallBack;
- Timer->param=Param;
- Timer->tcnt=0;
- }
- /***********************************************************************************
- *STimerStart
- 启动定时器
- 入口参数:
- Timer 定时器实例的指针,必须是实例
- ************************************************************************************/
- void STimerStart(timer_t *Timer,uint32_t Interval)
- {
-
- p_timer_t p_tmr,p;
- uint32_t delta,itcnt = Interval;
-
- if (Interval == 0 || Timer == NULL) {
- return ;
- }
-
- p = (p_timer_t) &FirstTimer;
-
- tsk_lock ();
- delta = p->tcnt;
- while (delta < itcnt && p->next != NULL) {
- p = p->next;
- delta += p->tcnt;
- }
- /* Right place found, insert timer into the list */
- Timer->tcnt=Interval;
- Timer->next = p->next;
- Timer->tcnt = (U16)(delta - itcnt);
- p->next = Timer;
- p->tcnt -= Timer->tcnt;
-
- tsk_unlock ();
- }
- /***********************************************************************************
- *STimerStop
- 关停定时器。
- 入口参数:
- Timer 定时器实例的指针,必须是实例
- ************************************************************************************/
- void STimerStop(timer_t *Timer)
- {
- Timer->tcnt=0;
- }
- /***********************************************************************************
- 等待回调,应在任务主循环里执行
- ************************************************************************************/
- void STimerWaitCall(void)
- {
-
- }
|