@2918095496 这个经过测试,找到了问题所在,在程序运行过程中,有几个语句的初始化出现了问题,导致了以上的问题出现,具体问题如下:
void StartDefaultTask(void *argument)
{
//micro-ROS configuration
rmw_uros_set_custom_transport(
true,
(void *) &huart1,
cubemx_transport_open,
cubemx_transport_close,
cubemx_transport_write,
cubemx_transport_read);
rcl_allocator_t freeRTOS_allocator = rcutils_get_zero_initialized_allocator();
freeRTOS_allocator.allocate = microros_allocate;
freeRTOS_allocator.deallocate = microros_deallocate;
freeRTOS_allocator.reallocate = microros_reallocate;
freeRTOS_allocator.zero_allocate = microros_zero_allocate;
if (!rcutils_set_default_allocator(&freeRTOS_allocator)) {
printf("Error on default allocators (line %d)\n", LINE);
}
// micro-ROS app
rcl_publisher_t publisher;
std_msgs__msg__Int32 msg;
rclc_support_t support;
rcl_allocator_t allocator;
rcl_node_t node;
allocator = rcl_get_default_allocator();
//create init_options
rcl_ret_t ret1 = rclc_support_init(&support, 0, NULL, &allocator);
// create node
rcl_ret_t ret2 = rclc_node_init_default(&node, "cubemx_node", "", &support);
// //create publisher
rclc_publisher_init_best_effort(
&publisher,
&node,
ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32),
"cubemx_publisher");
msg.data = 0;
for(;;)
{
rcl_ret_t ret = rcl_publish(&publisher, &msg, NULL);
if (ret != RCL_RET_OK)
{
printf("Error publishing (line %d)\n", LINE);
}
msg.data++;
osDelay(10);
}
/* USER CODE END 5 */
}
在以上几个初始化的时候会报错,rclc_support_init()在这个初始化时有时,返回数字1报一般性错误,rclc_node_init_default()这个会因为上一个初始化报错,返回数字101,上下文错误,还有就是 rcl_publish()会返回数字300,RCL_RET_PUBLISHER_INVALID指返回rcl_publisher_t无效。
目前问题还没有解决,希望能给些指导,谢谢。