如何在函数 xQueueReceive 返回的 FreeRtos 上打印字符缓冲区
How to print char buffer on FreeRtos returned by function xQueueReceive
我正在为一个项目使用 Free RTOS。
我有一个更高优先级的任务将 char 缓冲区附加到 Free RTOS 队列,还有一个更小的优先级任务从队列中弹出 char 缓冲区并打印它们。
QueueHandle_t xQueue1 = xQueueCreate(10,50);
//higher priority task
for(;;){
char buffer[50];
sprintf(buffer, "%s, %d\n", t1[i].name, tman_tick);
if( xQueue1 != 0 ){
if( xQueueSend( xQueue1,( void * ) &buffer,( TickType_t ) 0 ) != pdPASS ){
/* Failed to post the message, even after 10 ticks. */
}
}
}
//lower priority task
for(;;){
void * xStructure;
char *ptemp;
if( xQueueReceive( xQueue1,& (xStructure),( TickType_t ) 10 ) == pdPASS ){
/* xStructure now contains a copy of xMessage. */
printf("ENTERS HERE\n");
ptemp = (char *)xStructure;
printf("HERE TOO\n");
printf("%s\n", ptemp);
}
}
我认为除了最后一次打印外一切正常。它打印“ENTERS HERE”和“HERE TOO”,但在转换为 char 数组后,它无法打印 ptemp,我不知道为什么。
我是否以错误的方式进行了转换?
来自 FreeRTOS 文档:
pvBuffer A pointer to the memory into which the received data will be copied.
您必须提供指向已分配内存的指针。由于您的队列项有 50 个字节长,因此您需要传递一个指向至少 50 个字节长的内存块的指针。
char xStructure[50];
if (xQueueReceive( xQueue1, xStructure, (TickType_t)10) == pdPASS ){
}
我正在为一个项目使用 Free RTOS。
我有一个更高优先级的任务将 char 缓冲区附加到 Free RTOS 队列,还有一个更小的优先级任务从队列中弹出 char 缓冲区并打印它们。
QueueHandle_t xQueue1 = xQueueCreate(10,50);
//higher priority task
for(;;){
char buffer[50];
sprintf(buffer, "%s, %d\n", t1[i].name, tman_tick);
if( xQueue1 != 0 ){
if( xQueueSend( xQueue1,( void * ) &buffer,( TickType_t ) 0 ) != pdPASS ){
/* Failed to post the message, even after 10 ticks. */
}
}
}
//lower priority task
for(;;){
void * xStructure;
char *ptemp;
if( xQueueReceive( xQueue1,& (xStructure),( TickType_t ) 10 ) == pdPASS ){
/* xStructure now contains a copy of xMessage. */
printf("ENTERS HERE\n");
ptemp = (char *)xStructure;
printf("HERE TOO\n");
printf("%s\n", ptemp);
}
}
我认为除了最后一次打印外一切正常。它打印“ENTERS HERE”和“HERE TOO”,但在转换为 char 数组后,它无法打印 ptemp,我不知道为什么。 我是否以错误的方式进行了转换?
来自 FreeRTOS 文档:
pvBuffer A pointer to the memory into which the received data will be copied.
您必须提供指向已分配内存的指针。由于您的队列项有 50 个字节长,因此您需要传递一个指向至少 50 个字节长的内存块的指针。
char xStructure[50];
if (xQueueReceive( xQueue1, xStructure, (TickType_t)10) == pdPASS ){
}