ThreadX——IPC应用之消息队列 (2)

TX_WAIT_ERROR (0x04) 在非线程调用中指定了TX_NO_WAIT以外的等待选项

UINT tx_queue_front_send( TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option); 5、获取消息队列信息

描述

该服务检索有关指定消息队列的信息

参数(TX_NULL表示不需要获取该参数代表的信息)

queue_ptr 指向先前创建的消息队列的指针

name 指向目标的指针,用于指向队列名称

enqueued 指向目标的指针,表示当前队列中的消息数

available_storage 指向目标的指针,表示队列当前有空间容纳的消息数

first_suspended 指向目标的指针,该指针指向该队列的挂起列表中第一个线程

suspended_count 指向目标的指针,用于指示当前在此队列上挂起的线程数

next_queue 指向下一个创建队列的指针的目标的指针

返回值

TX_SUCCESS (0x00) 操作成功

TX_QUEUE_ERROR (0x09) 无效的消息队列指针

UINT tx_queue_info_get( TX_QUEUE *queue_ptr, CHAR **name, ULONG *enqueued, ULONG *available_storage TX_THREAD **first_suspended, ULONG *suspended_count, TX_QUEUE **next_queue); 6、从队列获取消息

描述

该服务从指定的消息队列中检索消息。 检索到的消息从队列复制到目标指针指定的存储区域。 然后将该消息从队列中删除

指定的目标存储区必须足够大以容纳消息。 也就是说,由destination_ptr 指向的消息目标必须至少与此队列的消息大小一样大。 否则,如果目标不够大,则会在存储区域中发生内存地址非法错误

参数

queue_ptr 指向先前创建的消息队列的指针

destination_ptr 指向储存消息的地址

wait_option 定义消息队列为空时服务的行为

TX_NO_WAIT (0x00000000) - 无论是否成功都立即返回(用于非线程调用,例如中断里面)

TX_WAIT_FOREVER (0xFFFFFFFF) - 一直等待直到有消息可以获取

0x00000001 ~ 0xFFFFFFFE- 指定具体等待心跳节拍数(如果心跳频率1KHZ,那么单位就是ms )

返回值

TX_SUCCESS (0x00) 操作成功

TX_DELETED (0x01) 线程挂起时删除了消息队列

TX_QUEUE_EMPTY (0x0A) 服务无法检索消息,因为队列在指定的等待时间段内为空

TX_WAIT_ABORTED (0x1A) 被另一个线程、计时器或ISR中断给中止

TX_QUEUE_ERROR (0x09) 无效的消息队列指针

TX_PTR_ERROR (0x03) 消息的目标指针无效

TX_WAIT_ERROR (0x04) 在非线程调用中指定了TX_NO_WAIT以外的等待选项

UINT tx_queue_receive( TX_QUEUE *queue_ptr, VOID *destination_ptr, ULONG wait_option); 7、向队列发送消息

描述

此服务将消息发送到指定的消息队列。发送的消息将从源指针指定的内存区域复制到队列中。

参数

queue_ptr 指向先前创建的消息队列的指针

source_ptr 指向消息的指针

wait_option 定义消息队列已满时服务的行为

TX_NO_WAIT (0x00000000) - 无论是否成功都立即返回(用于非线程调用,例如中断里面)

TX_WAIT_FOREVER (0xFFFFFFFF) - 一直等待直到队列有空位可以放置消息

0x00000001 ~ 0xFFFFFFFE - 指定具体等待心跳节拍数(如果心跳频率1KHZ,那么单位就是ms )

返回值

TX_SUCCESS (0x00) 操作成功

TX_DELETED (0x01) 线程挂起时删除了消息队列

TX_QUEUE_FULL (0x0B) 服务无法发送消息,因为队列在指定的等待时间内已满

TX_WAIT_ABORTED (0x1A) 被另一个线程、计时器或ISR中断给中止

TX_QUEUE_ERROR (0x09) 无效的消息队列指针

TX_PTR_ERROR (0x03) 消息的目标指针无效

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdzdd.html