void *OSTaskQPend (OS_TICK timeout, //等待时间
OS_OPT opt, //等待时是否堵塞
OS_MSG_SIZE *p_msg_size, //读取出的消息长度
CPU_TS *p_ts, //时间戳
OS_ERR *p_err) //错误码
OS_OPT opt, //等待时是否堵塞
OS_MSG_SIZE *p_msg_size, //读取出的消息长度
CPU_TS *p_ts, //时间戳
OS_ERR *p_err) //错误码
OSTaskQPend()函数用于读取出任务内建消息队列的消息,它会把从任务内建消息队列内读取出的消息以地址的形式返回。
值得一提的是,使用这个函数的时候涉及的多个指针。
例如:p=OSTaskQPend((OS_TICK )0,
(OS_OPT )OS_OPT_PEND_BLOCKING,
( OS_MSG_SIZE* )&size,
(CPU_TS* )0,
(OS_ERR* )&err );
(OS_OPT )OS_OPT_PEND_BLOCKING,
( OS_MSG_SIZE* )&size,
(CPU_TS* )0,
(OS_ERR* )&err );
OSTaskQPend()会把传递的消息以地址的形式传回,所以接收的p一定是一个指针,以存储地址。
OSTaskQPend
()在执行的过程中会往
(OS_MSG_SIZE* )&size形参地址中存储一个具体数值,所以size一定不能是没有被赋值的空白指针,否则系统就会卡死。
所以,定义的时候就是:
u8 * p;
OS_MSG_SIZE size;
如果定义成OS_MSG_SIZE * size;不给size赋值或申请内存,直接在第三个参数位置填上size,这样编译也能通过,但是实际运行就会卡死。