本帖最后由 Superusrss 于 2024-7-20 08:34 编辑
threadx 的创建信号量时候有说message_size指的是多少个word(4byte)大小, 有几个问题
1:我创建了uart缓冲区 uint8_t uart_buffer[512] 使用这个直接发送是否有点大,是否 tx_queue_create(&uart1_data_queue, "uart1_rx_queue", 128, uart1_rx_buff, 512) 就可以。还是直接全局数组就行
2:由于threadx的queue是直接复制,如此大的消息会不会很占时间; 若传递指针如何实现
3,若单次传递uint8_t类型,使用queue有点浪费了,有什么好的方法
4,我想一个队列传递给两个进程,是否要创建两个队列这样的话,还得再建两个512字节的缓冲区用作tx_queue_receive。。好不方便
ps: 问过所有AI都声称message_size的单位是1个字节而不是word,然而手册上明明白白写着是word
ps2: 吐槽一下,threadx源文件太多了,编译要好久,不如freertos那么简练
最新进展,queue发送一个字符很好用,要发送一个数组时候乱码,代码如下
[C] 纯文本查看 复制代码
uint8_t rx_data;
uint16_t uart1_rx_buff_index = 0;
uint8_t rx_buff1[RX_BUFFER_SIZE];
uint8_t rx_buff2[RX_BUFFER_SIZE];
uint8_t uart_buffer[12];
uint8_t uart_receive_buffer[12];
#define RX_BUFFER_SIZE 5
/* UART RX callback function */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
/* receive data from UART1 */
HAL_UART_Receive_IT(&huart1, &rx_data, 1);
if (uart1_rx_buff_index <= RX_BUFFER_SIZE - 1)
{
current_rx_buffer[uart1_rx_buff_index++] = rx_data;
}
else
{
/* queue full, discard data */
ret = tx_queue_send(&uart1_data_queue, currentt_rx_buffer, TX_NO_WAIT);
if (TX_SUCCESS != ret)
{
// App_Printf("UART1 RX queue full, discard data\r\n");
tx_queue_receive(&uart1_data_queue, &uart_receive_buffer, TX_NO_WAIT);
App_Printf("queue data %s", &uart_receive_buffer);
}
uart1_rx_buff_index = 0;
current_rx_buffer = (current_rx_buffer == rx_buff1) ? rx_buff2 : rx_buff1;
current_rx_buffer[uart1_rx_buff_index++] = rx_data;
}
}
}
|