时间管理
/*时间管理*/ OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err);//1s延迟
任务操作
/*任务操作:创建、删除、挂起、恢复*/ OS_TCB Task1_TaskTCB; void task1_task(void *p_arg); #define TASK1_TASK_PRIO 5 #define TASK1_STK_SIZE 64 CPU_STK TASK1_TASK_STK[TASK1_STK_SIZE]; OSTaskCreate((OS_TCB * )&Task1_TaskTCB, (CPU_CHAR * )"task1 task", (OS_TASK_PTR )task1_task, (void * )0, (OS_PRIO )TASK1_TASK_PRIO, (CPU_STK * )&TASK1_TASK_STK[0], (CPU_STK_SIZE)TASK1_STK_SIZE/10, (CPU_STK_SIZE)TASK1_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )2, //2个时间片,2*5ms = 10ms (void * )0, (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, (OS_ERR * )&err); void task1_task(void *p_arg) { OS_ERR err; while(1) { } } //OSTaskDel((OS_TCB*)&Task2_TaskTCB,&err); //任务删除 //OSTaskSuspend((OS_TCB*)&Task2_TaskTCB,&err); //任务挂起 //OSTaskResume((OS_TCB*)&Task2_TaskTCB,&err); //任务恢复 //OSSched(); //任务级调度
信号量
普通信号量、互斥信号量、任务内嵌信号量
/*信号量操作:普通信号量、互斥信号量、任务内嵌信号量*/ //普通信号量 OS_SEM SEM_1; //普通信号量 OSSemCreate((OS_SEM *)&SEM_1, (CPU_CHAR *)"SEM_1", (OS_SEM_CTR )1, //初始化 信号量 值为0 (OS_ERR *)&err ); OSSemPend(&SEM_1,0,OS_OPT_PEND_BLOCKING,0,&err); //等待信号量 请求 OSSemPost(&SEM_1,OS_OPT_POST_1,&err); //发送信号量 释放 信号量+1 //创建互斥信号量 OS_MUTEX MUTEX_1; //互斥信号量,防止优先级反转 OSMutexCreate((OS_MUTEX *)&MUTEX_1, (CPU_CHAR *)"MUTEX_1", (OS_ERR *)&err); OSMutexPend((OS_MUTEX *)&MUTEX_1, //请求互斥信号量 (OS_TICK )0, (OS_OPT )OS_OPT_PEND_BLOCKING, (CPU_TS *)0, (OS_ERR *)&err); OSMutexPost((OS_MUTEX *)&MUTEX_1, //释放互斥信号量 (OS_OPT )OS_OPT_POST_NONE, (OS_ERR *)&err); //任务内嵌信号量 不用创建 // OSTaskSemPend((OS_TICK )0, //请求系统内部信号量 1s请求一次 Task7_TaskTCB.SemCtr (OS_OPT )OS_OPT_PEND_BLOCKING, (CPU_TS *)0, (OS_ERR *)&err); OSTaskSemPost((OS_TCB *)&Task7_TaskTCB, //释放系统内部信号量 Task7_TaskTCB.SemCtr (OS_OPT )OS_OPT_POST_NONE, (OS_ERR *)&err);
软件定时器
/*软件定时器*/ //创建软件定时器1、2 OS_TMR tmr1; void tmr1_callback(void *p_tmr, void *p_arg);//声明 OSTmrCreate ( (OS_TMR *)&tmr1, //定时器分辨率10ms (CPU_CHAR *)"tmr1", (OS_TICK )500, //初始化延迟 500*10ms = 5s (OS_TICK )100, //周期 100*10ms = 1s (OS_OPT )OS_OPT_TMR_PERIODIC, //有初始化延迟的周期定时器模式 (OS_TMR_CALLBACK_PTR )tmr1_callback, (void *)0, (OS_ERR *)&err ); OSTmrStart(&tmr1,&err);//开启定时器1 OSTmrStop(&tmr1,OS_OPT_TMR_NONE,0,&err); //关闭定时器1 void tmr1_callback(void *p_tmr, void *p_arg) { static u8 cnt=0; cnt++; printf("%s cnt:%d \r\n",__FUNCTION__,cnt); LED1=~LED1; }