和在线程中不一样的地方在于,线程中调用 `rt_mq_send_wait` 时 `thread` 指针*肯定*是当前线程;在中断中调用 rt_mq_send_wait ,因中断不定什么时候出现, `thread` 指针可能是任意被创建的(有机会进入运行态的)线程。 为了不失一般性,我们再次假设,这个中断优先级比较低,可能被另外一个中断嵌套。而且假设在...
rt_mq_send_wait() 与 rt_mq_send() 的区别在于有等待时间,如果消息队列已经满了,那么发送线程将根据设定的 timeout 参数进行等待。如果设置的超时时间到达依然没有空出空间,这时发送线程将被唤醒并返回错误码。下表描述了该函数的输入参数与返回值: ...
rt_err_t rt_mq_send_wait(rt_mq_t mq, const void *buffer, rt_size_t size, rt_int32_t timeout) 此函数的参数timeout为发送等待超时时间,单位为系统时钟节拍。其他参数与rt_mq_send()相同。 如果消息队列已经满了,发送线程会根据设定的timeout参数等待消息队列中因为收取消息而空出空间。若超时时间到...
注意:在中断服务例程中发送邮件时,应该采用无等待延时的方式发送,直接使用rt_mq_send()或者等待超时设定为 0 的函数rt_mq_send_wait()。 3. 接收消息 线程接收消息的函数接口如下, rt_err_t rt_mq_recv(rt_mq_t mq, void *buffer, rt_size_t size, rt_int32_t timeout) 1. 2. 参数mq为消息队列...
rt_err_trt_mq_send_wait(rt_mq_tmq, constvoid*buffer, rt_size_tsize, rt_int32_ttimeout) 此函数的参数timeout为发送等待超时时间,单位为系统时钟节拍。其他参数与rt_mq_send()相同。 如果消息队列已经满了,发送线程会根据设定的timeout参数等待消息队列中因为收取消息而空出空间。若超时时间到达依然没有...
rt_mq_delete 完成量 登录后复制rt_completion_wait 队列类 登录后复制rt_wqueue_wait rt_data_queue_push rt_data_queue_pop 延时 登录后复制rt_thread_sleep rt_thread_delay rt_thread_delay_until rt_thread_mdelay 注:源码中摘录,并无理论考证,更无实际验证 ...
rt_err_t rt_mq_send_wait(rt_mq_t mq,const void *buffer,rt_size_t size,rt_int32_t timeout) 此函数的参数timeout为发送等待超时时间,单位为系统时钟节拍。其他参数与rt_mq_send()相同。 如果消息队列已经满了,发送线程会根据设定的timeout参数等待消息队列中因为收取消息而空出空间。若超时时间到达依...
发送消息,其实所有的步骤都是在rt_mq_send_wait函数中的,再次强调,学会看源码! 关键的几个地方说明一下: 当然这里没有特意的说明等待时间问题,因为发送和接收都可以阻塞等待,这里不是要理解的重点。 发送完完成以后如果发现有线程在等待消息队列,会发生一次调度: ...
发送消息,其实所有的步骤都是在rt_mq_send_wait函数中的,再次强调,学会看源码! 关键的几个地方说明一下: 当然这里没有特意的说明等待时间问题,因为发送和接收都可以阻塞等待,这里不是要理解的重点。 发送完完成以后如果发现有线程在等待消息队列,会发生一次调度: ...
发送消息,其实所有的步骤都是在rt_mq_send_wait函数中的,再次强调,学会看源码! 关键的几个地方说明一下: 当然这里没有特意的说明等待时间问题,因为发送和接收都可以阻塞等待,这里不是要理解的重点。 发送完完成以后如果发现有线程在等待消息队列,会发生一次调度: ...