TA的每日心情 | 开心 2019-11-4 13:48 |
---|
签到天数: 14 天 连续签到: 1 天 [LV.3]偶尔看看II
|
| 时驱函数这个词语说不清楚 我在一份头大的代码里面看到一个中文注释。
应用是 比如控制LED灯一闪一闪(好像没啥难的)包括闪动3次以后停止
比如控制蜂鸣器 需要拉高在拉低,就像LED闪烁一样,需要控制电平高低和总次数。
twinkle 本质是一个前后台程序,后台是时驱函数,前台程序是给后台丢配置参数。
时驱函数是需要放到定时器tiME的中断里面或者UCOS的任务里面周期性调用的所以叫时驱函数
- #include "twinkle.h"
- #include "Initialise.h"
- enum
- {
- FALSE,
- TRUE
- };
- twinkleType JustTesk;
- void twinkle_set(twinkleType *p , uint8_t Mode , uint8_t OpenCnt , uint32_t OpenTime ,uint32_t CloseTime ,uint32_t DelayTime)
- {
- p->timeCnt = 0;
- p->mode = Mode;
- IF( p->mode == BLINK_OPEN_DELAY)
- {
- p->openFlag = FALSE;
- }
- else
- {
- p->openFlag = TRUE;
- }
- p->cnt = 0;
- p->flashCnt = OpenCnt;
- p->delayTime = DelayTime;
- p->openTime = OpenTime;
- p->closeTime = CloseTime;
- }
- void twinkle_timer_isr( twinkleType *p )
- {
- if(p->mode == BLINK_OPEN_DELAY)
- {
- if(p->timeCnt++ > p->delayTime)
- {
- p->timeCnt = 0;
- p->openFlag = TRUE;
- p->mode = BLINK_OPEN_INIT;
- }
- }
- //上面的是扩展功能 主要是下面//
- if(p->openFlag == TRUE)
- {
- if( p->timeCnt ++ < p->openTime)
- {
- //pin_ops.pin_write(p->pin , PIN_HIGH);
- TS_LED1_ON() ;
- }
- else
- {
- //pin_ops.pin_write(p->pin , PIN_LOW);
- TS_LED1_OFF();
- }
- if( p->timeCnt > p->openTime+p->closeTime )
- {
- p->timeCnt = 0;
- if( p->mode != BLINK_OPEN_ALWAYS)
- {
- if( ++p->cnt >= p->flashCnt)
- {
- p->openFlag = FALSE;
- }
- }
- }
- }
- }
[color=rgb(51, 102, 153) !important]复制代码
|
|
|
|
|