UCOSII软件定时器
来源:互联网 发布:王晓东视频 算法 编辑:程序博客网 时间:2024/06/03 14:04
一、基本知识
1、创建定时器
OS_TMR *OSTmrCreate
(
INT32U dly,
INT32U period,
INT8U opt,
OS_TMR_CALLBACK callback,
void *callback_arg,
INT8U *pname,
INT8U *perr
)
入口参数解释:
(1)dly:延时时间(单位:(1/OS_TMR_CFG_TICKS_PER_SEC)秒)
如果参数opt为:OS_TMR_OPT_ONE_SHOT,则dly表示定时器超时时间
如果参数opt为:OS_TMR_OPT_PERIODIC,则dly表示定时器在开始循环模式前等待第一次启动的超时时间
(2)period:定时器重复运行的时间周期(单位:(1/OS_TMR_CFG_TICKS_PER_SEC)秒)
如果参数opt为:OS_TMR_OPT_PERIODIC,则period表示定时器自动周期重启的时间
如果参数opt为:OS_TMR_OPT_ONE_SHOT,则period无效
(3)opt:选择定时器运行模式
如果参数opt为:OS_TMR_OPT_PERIODIC,则表示定时器会自动重载超时时间,周期运行
如果参数opt为:OS_TMR_OPT_ONE_SHOT,则表示定时器只运行一次
(4)callback:超时处理回调函数(定时器中断服务程序)
必须定义成类似这种函数接口的形式:void MyCallback (OS_TMR *ptmr, void *p_arg);
当定时器时间到了,就执行这个函数
(5)callback_arg:当callback被调用时传递给callback的入口参数
(6)pname:定时器的名称(是一个字符串,如"Timer0")
(7)*perr:定时器错误码,是下面之一:
OS_ERR_NONE:没有错误
OS_ERR_TMR_INVALID_DLY:指定了一个无效的延时时间
OS_ERR_TMR_INVALID_PERIOD:指定了一个无效的周期
OS_ERR_TMR_INVALID_OPT:指定了一个无效的选项
OS_ERR_TMR_ISR :在中断服务程序里调用错误
OS_ERR_TMR_NON_AVAIL:定时器池里没有空闲的定时器
2、启动定时器
BOOLEAN OSTmrStart (OS_TMR *ptmr, INT8U *perr)
这个函数是用来被应用程序调用,来启动定时器的。
入口参数解释:
(1)ptmr:指向待启动的定时器
(2)*perr:错误码
μC/OS-II定时器的创建、启动等函数不能在中断服务程序里调用
二、过程
于定时器相关的函数
OSTmrCreate();
OSTmrDel();
OSTmrNameGet();
OSTmrRemainGet();
OSTmrStateGet();
OSTmrStart();
OSTmrStop();
OSTmrSignal();
1、定义定时器
2、创建定时器
3、写定时器回调函数
4、启动定时器
5、停止定时器
OS_TMR *timer1;//定时器OS_TMR *timer2;void timer1CallBack();//定时器回调函数void timer2CallBack();#define START_TASK_PRIO 10#define START_STK_SIZE 64OS_STK START_TASK_STK[START_STK_SIZE];void startTask(void *p_arg);#define SCAN_TASK_PRIO 7#define SCAN_STK_SIZE 64OS_STK SCAN_TASK_STK[SCAN_STK_SIZE];void scanTask(void *p_arg);int main(){delay_init(168);LED_Init();KEY_Init();OSInit();OSTaskCreate(startTask, (void*)0, (OS_STK*)&START_TASK_STK[START_STK_SIZE - 1], START_TASK_PRIO);OSStart();}//开始任务,创建两个任务后在后面不再使用,删除掉开始任务void startTask(void *p_arg){OS_CPU_SR cpu_sr=0;INT8U err = 0; p_arg = p_arg;OS_ENTER_CRITICAL();timer1 = OSTmrCreate(10, 10, OS_TMR_OPT_ONE_SHOT, timer1CallBack, (void*)0, "OS_TIMER1", &err);//创建定时器timer2 = OSTmrCreate(10, 10, OS_TMR_OPT_PERIODIC, timer2CallBack, (void*)0, "OS_TIMER2", &err);OSTaskCreate(scanTask, (void*)0, (OS_STK*)&SCAN_TASK_STK[SCAN_STK_SIZE - 1], SCAN_TASK_PRIO);//创建任务OSTaskSuspend(START_TASK_PRIO);OS_EXIT_CRITICAL();}//按键扫描任务void scanTask(void *p_arg){u8 key, num;INT8U err = 0;p_arg = p_arg;while(1){key = KEY_Scan(0);switch(key){case WKUP_PRES:OSTmrStart(timer1, &err);//启动定时器break;case KEY0_PRES:OSTmrStart(timer2, &err);break;case KEY1_PRES://关闭定时器break;}OSTimeDlyHMSM(0, 0, 0, 10);}}//LED灯亮灭void timer1CallBack(){LED0 =~ LED0;}//LED灯亮灭void timer2CallBack(){LED1 =~ LED1;}
- UCOSII软件定时器
- UCOSII软件定时器
- ucosii定时器
- STM32上使用UCOSII--软件定时器和任务延时
- STM32上使用UCOSII--软件定时器和任务延时
- ucosii
- ucosii
- ucosii
- UcosII
- 软件定时器
- 软件定时器
- 软件定时器
- 软件定时器
- 学习ucosii要用到的几本书和软件
- 学习ucosii要用到的几本书和软件
- 软件定时器管理浅见
- ucosIII 软件定时器
- uCOS的软件定时器
- java字符追加问题
- C++ SDL学习之路 3rd —— 没法关闭SDL窗口?用事件列表!
- MySQL日志文件
- 文章标题
- 详解Gson使用(一)简单对象转化
- UCOSII软件定时器
- java字符串包含问题
- Spring Boot 初探之JSP
- 天亮教育暑期JavaSe核心基础+大数据应用开发开班了!
- LockFreeHashMap:无阻塞代码技巧
- 作业
- 63. Unique Paths II
- git-gui --批量处理文件
- 五大算法思想:分治、动态规划、贪心、回溯和分支界定