Я столкнулся с проблемой сбоя в моей среде с процессором RK3588 , системой Ubuntu 22.04 и версией ядра 5.10. Я использую C ++ для создания нескольких потоков, одна из которых отвечает за функцию readimu . Я представил функцию обратной и запустил свою программу с помощью GDB . После некоторого запуска,
поймал следующую ошибку: он подсказывает в строке 208, но код для этой строки - std :: this_thread: sleep_for (2ms); Это система системы, я не уверен, как еще больше решить эту проблему. Спасибо gdb info:
Thread 11 "ReadIMU" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fe92dd540 (LWP 3744)]
0x0000007ff5d41998 in __GI___clock_nanosleep (clock_id=, clock_id@entry=0, flags=flags@entry=0, req=0x7fe92dc640, rem=0x7fe92dc640) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
78 ../sysdeps/unix/sysv/linux/clock_nanosleep.c: No such file or directory.
(gdb)
(gdb)
(gdb)
(gdb)
(gdb) bt
#0 0x0000007ff5d41998 in __GI___clock_nanosleep (clock_id=, clock_id@entry=0, flags=flags@entry=0, req=0x7fe92dc640, rem=0x7fe92dc640) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
#1 0x0000007ff5d46b6c in __GI___nanosleep (req=, rem=) at ../sysdeps/unix/sysv/linux/nanosleep.c:25
#2 0x0000005555804e0c in std::this_thread::sleep_for (__rtime=...) at /usr/include/c++/11/bits/this_thread_sleep.h:82
#3 0x000000555598831c in mh4::host::controller::imu::IMUHandler::ReadIMU () at /MH4/src/host/controller/imu/ImuHandler.cpp:208
#4 0x00000055558a6adc in std::__invoke_impl (__f=) at /usr/include/c++/11/bits/invoke.h:61
#5 0x0001233b00026b37 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
На самом деле я использовал функцию usle раньше, но она также была вызвана проблемой. code:
Я столкнулся с проблемой сбоя в моей среде с процессором RK3588 , системой Ubuntu 22.04 и версией ядра 5.10. Я использую C ++ для создания нескольких потоков, одна из которых отвечает за функцию readimu . Я представил функцию обратной и запустил свою программу с помощью GDB . После некоторого запуска,[code] GDB[/code] поймал следующую ошибку: он подсказывает в строке 208, но код для этой строки - std :: this_thread: sleep_for (2ms); Это система системы, я не уверен, как еще больше решить эту проблему. Спасибо [b] gdb info: [/b] [code]Thread 11 "ReadIMU" received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7fe92dd540 (LWP 3744)] 0x0000007ff5d41998 in __GI___clock_nanosleep (clock_id=, clock_id@entry=0, flags=flags@entry=0, req=0x7fe92dc640, rem=0x7fe92dc640) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78 78 ../sysdeps/unix/sysv/linux/clock_nanosleep.c: No such file or directory. (gdb) (gdb) (gdb) (gdb) (gdb) bt #0 0x0000007ff5d41998 in __GI___clock_nanosleep (clock_id=, clock_id@entry=0, flags=flags@entry=0, req=0x7fe92dc640, rem=0x7fe92dc640) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78 #1 0x0000007ff5d46b6c in __GI___nanosleep (req=, rem=) at ../sysdeps/unix/sysv/linux/nanosleep.c:25 #2 0x0000005555804e0c in std::this_thread::sleep_for (__rtime=...) at /usr/include/c++/11/bits/this_thread_sleep.h:82 #3 0x000000555598831c in mh4::host::controller::imu::IMUHandler::ReadIMU () at /MH4/src/host/controller/imu/ImuHandler.cpp:208 #4 0x00000055558a6adc in std::__invoke_impl (__f=) at /usr/include/c++/11/bits/invoke.h:61 #5 0x0001233b00026b37 in ?? () Backtrace stopped: previous frame identical to this frame (corrupt stack?) [/code] На самом деле я использовал функцию usle раньше, но она также была вызвана проблемой. [b] code: [/b] [code]void IMUHandler::ReadIMU(void) { char buffer[RX_BUF_LEN]; int nread = 0; unsigned short cnt = 0; int pos; unsigned char recvBuf[RX_BUF_LEN] = {0}; unsigned short recvBufIdx = 0; protocol_info_t outputInfo = {};
memset(buffer, 0, sizeof(buffer)); LOG("start to read imu.");