UCOSIII再学习——1
程序员文章站
2022-07-12 09:14:54
...
创建一个任务:
//创建主任务
OSTaskCreate((OS_TCB * )&Main_TaskTCB,
(CPU_CHAR * )"Main task",
(OS_TASK_PTR )main_task,
(void * )0,
(OS_PRIO )MAIN_TASK_PRIO,
(CPU_STK * )&MAIN_TASK_STK[0], //堆栈地址起始
(CPU_STK_SIZE)MAIN_STK_SIZE/10, //堆栈深度通常为堆栈大小的十分之一
(CPU_STK_SIZE)MAIN_STK_SIZE, //堆栈大小
(OS_MSG_QTY )0,
(OS_TICK )0,
(void * )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR * )&err);
创建一个定时器 :OS_TMR tmr1; //定义一个定时器
//创建定时器1(当有时间延迟时,执行完一次时间延迟之后,每个周期再按照时间周期执行,单次还是循环则由周期模式决定)
OSTmrCreate((OS_TMR *)&tmr1, //定时器1
(CPU_CHAR *)"tmr1", //定时器名字
(OS_TICK )0, //0ms 时间延迟
(OS_TICK )50, //50*10=500ms 时间周期
(OS_OPT )OS_OPT_TMR_PERIODIC, //周期模式
(OS_TMR_CALLBACK_PTR)tmr1_callback,//定时器1回调函数
(void *)0, //参数为0
(OS_ERR *)&err); //返回的错误码
定时器回调函数:
void tmr1_callback(void *p_tmr,void *p_arg)
创建一个互斥信号量:OS_MUTEX TEST_MUTEX; //定义一个互斥信号量
创建一个信号量: OS_SEM MY_SEM; //定义一个信号量,用于访问共享资源
请求信号量:OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求信号量,此时别的任务不能访问共享资源
memcpy(share_resource,task2_str,sizeof(task2_str)); //向共享资源区拷贝数据,将数据拷贝到共享资源区域
发送信号量:OSSemPost (&MY_SEM,OS_OPT_POST_1,&err); //发送信号量,释放完成之后别的任务才能访问
OSSemPost发送一次信号量MY_SEM.Ctr++;
OSSemPend请求一次信号量MY_SEM.Ctr--;当OSSemPend请求一次后,当再次运行到到该函数时,如果没有OSSemPost则阻塞到该地方,
任务内嵌信号量:
请求信号量: OSTaskSemPend(0,OS_OPT_PEND_BLOCKING,0,&err); //请求任务内建的信号量
发送信号量: OSTaskSemPost(&Task2_TaskTCB,OS_OPT_POST_NONE,&err); //使用系统内建信号量向任务task2发送信号量
创建一个消息队列 :OS_Q DATA_Msg; //定义一个消息队列,用于发送数据
消息队列剩余的个数:(总的-用的)DATA_Msg.MsgQ.NbrEntriesSize-DATA_Msg.MsgQ.NbrEntries
发送消息:
OSQPost((OS_Q* )&KEY_Msg,
(void* )&key,
(OS_MSG_SIZE)1,
(OS_OPT )OS_OPT_POST_FIFO,
(OS_ERR* )&err);
请求消息:
//请求消息KEY_Msg
key=OSQPend((OS_Q* )&KEY_Msg,
(OS_TICK )0,
(OS_OPT )OS_OPT_PEND_BLOCKING,
(OS_MSG_SIZE* )&size,
(CPU_TS* )0,
(OS_ERR* )&err);
上一篇: spring 再学习 1
下一篇: 查找