fishros上调xTaskCreate会返回1. 并panic
-
在使用wifi连接本地主机。我已确认wifi连接正常。
[1750239748.194450] info | UDPv4AgentLinux.cpp | init | running... | port: 8000 [1750239748.194722] info | Root.cpp | set_verbose_level | logger setup | verbose_level: 4 [1750239748.379031] info | Root.cpp | create_client | create | client_key: 0x0BE4F9B2, session_id: 0x81 [1750239748.379170] info | SessionManager.hpp | establish_session | session established | client_key: 0x0BE4F9B2, address: 192.168.31.244:16415
fishbot上调xTaskCreate会返回1. 并panic. 这个是主板出问题了吗?
#include "pidcontroller.h" #include "kinematics.h" #include <Arduino.h> #include <WiFi.h> #include <rcl/rcl.h> #include <rclc/rclc.h> #include <rclc/executor.h> #include <micro_ros_platformio.h> #include <Esp32PcntEncoder.h> #include <Esp32McpwmMotor.h> #include <geometry_msgs/msg/twist.h> rcl_allocator_t allocator; rclc_support_t support; rclc_executor_t executor; rcl_node_t node; void micro_ros_task(void* parameter) { IPAddress agent_ip; agent_ip.fromString("192.168.31.100"); set_microros_wifi_transports((char*)"*****", (char*)"*****", agent_ip, 8000); delay(2000); Serial.printf("micro_ros_task after set_microros_wifi_transports\n"); allocator = rcl_get_default_allocator(); rclc_support_init(&support, 0, nullptr, &allocator); rclc_node_init_default(&node, "fishbot_control", "", &support); unsigned int num_handles = 0; rclc_executor_init(&executor, &support.context, num_handles, &allocator); rclc_executor_spin(&executor); } void setup() { Serial.begin(115200); auto ret = xTaskCreate(micro_ros_task, "micro_ros_task", 10240, nullptr, 1, nullptr); Serial.printf("xTaskCreate : %d\n", ret); } void loop() { Serial.printf("in loop\n"); delay(100); }
==============================
in loop in loop in loop in loop in loop in loop in loop in loop Guru Meditation Error: Core 1 panic'ed (IllegalInstruction). Exception was unhandled. Memory dump at 0x400d2af0: 6a352520 04adf01d 65201110 Core 1 register dump: PC : 0x400d2af4 PS : 0x00060730 A0 : 0x00000000 A1 : 0x3ffb4a70 A2 : 0x3ffc3bc0 A3 : 0x3ffc3b38 A4 : 0x3ffc3bf4 A5 : 0x00000000 A6 : 0x00000000 A7 : 0x00000000 A8 : 0x800d2af4 A9 : 0x3ffb4a50 A10 : 0x00000001 A11 : 0xfffffffd A12 : 0x00000000 A13 : 0x00000000 A14 : 0x00000001 A15 : 0x3ffc3b38 SAR : 0x00000019 EXCCAUSE: 0x00000000 EXCVADDR: 0x00000000 LBEG : 0x40089ad8 LEND : 0x40089ae3 LCOUNT : 0x00000000 Backtrace: 0x400d2af1:0x3ffb4a70 ELF file SHA256: e2d1d2acd881461d Rebooting... ets Jul 29 2019 12:21:46 rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0030,len:1184 load:0x40078000,len:13260 load:0x40080400,len:3028 entry 0x400805e4 xTaskCreate : 1 in loop in loop micro_ros_task after set_microros_wifi_transports in loop in loop in loop in loop in loop in loop in loop in loop in loop in loop Guru Meditation Error: Core 1 panic'ed (IllegalInstruction). Exception was unhandled. Memory dump at 0x400d2af0: 6a352520 04adf01d 65201110 Core 1 register dump: PC : 0x400d2af4 PS : 0x00060b30 A0 : 0x00000000 A1 : 0x3ffb4a70 A2 : 0x3ffc3bc0 A3 : 0x3ffc3b38 A4 : 0x3ffc3bf4 A5 : 0x00000000 A6 : 0x00000000 A7 : 0x00000000 A8 : 0x800d2af4 A9 : 0x3ffb4a50 A10 : 0x00000001 A11 : 0xfffffffd A12 : 0x00000000 A13 : 0x00000000 A14 : 0x00000001 A15 : 0x3ffc3b38 SAR : 0x00000019 EXCCAUSE: 0x00000000 EXCVADDR: 0x00000000 LBEG : 0x40089ad8 LEND : 0x40089ae3 LCOUNT : 0x00000000 Backtrace: 0x400d2af1:0x3ffb4a70
-
@hury 一定是程序问题
-
@小鱼
可以看下,上面代码,都是空实现。程序应该是没有问题。
setup里只调了micro_ros_task。
micro_ros_task只是连了wifi,初始化了executor.
executor的num_handles=0
loop也只是做了printf. -
@小鱼
我也用了书中的示例代码:fishbot_motion_control_9.4.1, 也会出现同样的问题。定位了下:rclc_support_init(&support,0,NULL,&allocator); 返回的是1, support初始化就失败了。// 单独创建一个任务运行 micro-ROS 相当于一个线程 void microros_task(void* args) { // 1.设置传输协议并延迟一段时间等待设置的完成 IPAddress agent_ip; agent_ip.fromString("192.168.31.100"); // 设置agent的IP地址 set_microros_wifi_transports((char*)"******",(char*)"******",agent_ip,8000); // 设置传输协议 delay(3000); // 等待2秒,等待WIFI连接 // 2.初始化内存分配器 allocator = rcl_get_default_allocator(); // 获取默认的内存分配器 // 3.初始化支持 rclc_support_init(&support,0,NULL,&allocator); // 初始化支持 // 4.初始化节点 rclc_node_init_default(&node,"fishbot_motion_control","",&support); // 初始化节点 // 5.初始化执行器 unsigned int num_handles = 0; // 订阅和计时器的回调数量,注意这是一个要改的参数 rclc_executor_init(&executor,&support.context,num_handles,&allocator); // 初始化执行器 // 循环执行器 rclc_executor_spin(&executor); }