时间管理
/*时间管理*/
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;
}