Threadx使用消息队列收发字符串
有没有使用threadx的消息队列收发字符串的例子,跟着硬汉教程收发数值没问题,收发字符串就出问题了,打印出来是hell111111111111111111111111111111111111,核心代码如下#define MAX_LOG_MESSAGE_LEN 256
#define LOG_QUEUE_SIZE 20
/* 定义日志队列 */
TX_QUEUE log_queue;
UCHAR log_queue_buffer;
/* 定义日志处理任务 */
void log_processing_task(ULONG thread_input)
{
CHAR log_message;
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 = "helloworld\n";
/* 向日志队列发送消息 */
tx_queue_send(&log_queue, log_message, TX_WAIT_FOREVER);
}
你得补一下字符串的知识,字符串的结束符是啥。你这样打印是很容易数组越界的、字符串越界。 turnip 发表于 2024-4-15 17:40
你得补一下字符串的知识,字符串的结束符是啥。你这样打印是很容易数组越界的、字符串越界。
好像是,直接改成结构体指针了 yxkm 发表于 2024-4-16 11:15
好像是,直接改成结构体指针了
如果你传的指针,要注意源字符串的生命周期,别消息传递后把源字符串篡改了。 学到了,源字符被覆盖了,申请了内存去存,消息队列接收后把空间释放,现在功能没问题了,感谢
页:
[1]