硬汉嵌入式论坛

 找回密码
 立即注册
查看: 250|回复: 4
收起左侧

[STM32H7] Threadx使用消息队列收发字符串

[复制链接]

3

主题

3

回帖

12

积分

新手上路

积分
12
发表于 2024-4-15 17:19:22 | 显示全部楼层 |阅读模式
有没有使用threadx的消息队列收发字符串的例子,跟着硬汉教程收发数值没问题,收发字符串就出问题了,打印出来是hell111111111111111111111111111111111111,核心代码如下


#define MAX_LOG_MESSAGE_LEN 256
#define LOG_QUEUE_SIZE 20

/* 定义日志队列 */
TX_QUEUE log_queue;
UCHAR log_queue_buffer[LOG_QUEUE_SIZE * MAX_LOG_MESSAGE_LEN];

/* 定义日志处理任务 */
void log_processing_task(ULONG thread_input)
{
    CHAR log_message[MAX_LOG_MESSAGE_LEN];

    while (1)
    {
        /* 从日志队列中接收消息 */
        tx_queue_receive(&log_queue, log_message, TX_WAIT_FOREVER);

        /* 处理日志消息,这里可以替换成实际的日志处理逻辑 */
        printf("Log message: %s\n", log_message);
    }
}

/* 初始化日志处理任务和日志队列 */
void initialize_logging()
{
    /* 创建日志队列 */
    tx_queue_create(&log_queue, "Log Queue", sizeof(CHAR), log_queue_buffer,
                    LOG_QUEUE_SIZE * MAX_LOG_MESSAGE_LEN);

    /* 创建日志处理任务 */
    tx_thread_create(&log_processing_task_thread, "Log Processing Task",
                     log_processing_task, 0,
                     log_processing_task_stack, LOG_PROCESSING_TASK_STACK_SIZE,
                     LOG_PROCESSING_TASK_PRIORITY, LOG_PROCESSING_TASK_PRIORITY,
                     TX_NO_TIME_SLICE, TX_AUTO_START);
}

/* 异步日志记录函数 */
void async_log()
{
     char log_message[MAX_LOG_MESSAGE_LEN] = "helloworld\n";
    /* 向日志队列发送消息 */
    tx_queue_send(&log_queue, log_message, TX_WAIT_FOREVER);
}




回复

使用道具 举报

3

主题

70

回帖

79

积分

初级会员

积分
79
发表于 2024-4-15 17:40:20 | 显示全部楼层
你得补一下字符串的知识,字符串的结束符是啥。你这样打印是很容易数组越界的、字符串越界。
回复

使用道具 举报

3

主题

3

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2024-4-16 11:15:03 | 显示全部楼层
turnip 发表于 2024-4-15 17:40
你得补一下字符串的知识,字符串的结束符是啥。你这样打印是很容易数组越界的、字符串越界。

好像是,直接改成结构体指针了
回复

使用道具 举报

3

主题

70

回帖

79

积分

初级会员

积分
79
发表于 2024-4-16 15:37:50 | 显示全部楼层
yxkm 发表于 2024-4-16 11:15
好像是,直接改成结构体指针了

如果你传的指针,要注意源字符串的生命周期,别消息传递后把源字符串篡改了。
回复

使用道具 举报

3

主题

3

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2024-4-17 13:12:27 | 显示全部楼层
学到了,源字符被覆盖了,申请了内存去存,消息队列接收后把空间释放,现在功能没问题了,感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 17:49 , Processed in 0.258845 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表