问题现象:control node(订阅串口node的消息)开启后,再开串口读写的node,control node就会报错“段错误”然后死掉。
网上大概搜了一下,大多说是指针指向或者内存方面的原因。
用rostopic pub工具手动给control node发送topic,进行调试
中途在control node程序中加入调试信息打印输出语句后,重新编译,又提示一堆 时钟不一致的warning ,但最后编译也显示到100%。
然而重新编译完之后,运行control node,并没有该有的打印信息,而且编译过程也没出现绿色的打印信息(一般编译一个改动过的源文件会出现这个),感觉是没编译产生新的可执行文件,还是运行的旧的可执行文件。 也就是时钟不一致warning,导致重新编译没起作用。
然后进入catkin_ws,执行 find ./ -type f |xargs touch
之后再重新编译,编译控制台出现了绿色调试信息打印,再运行程序,就都好了。
时钟不一致,估计是树莓派直接断电而不是执行关机操作导致的。
查了一下,linux系统一般有real-time clock (RTC)硬件时钟,和系统时钟两个。然而树莓派设计的时候好像没有放硬件时钟。
一个独立的硬件(芯片),一般用纽扣电池或超级电容供电
时钟不一致为什么会导致编译不生效,又导致节点运行 段错误?
偶然因为“树莓派直接断电导致数据记录文件未保存”的问题,看到下面这个,是否存在一定关系呢
Linux 读写文件时,异常断电或程序异常中止导致文件出错、损坏
程序运行过程中,有读写配置文件保存当前位置信息的操作。在程序运行过程中突然断电,或者异常终止程序,就会出现配置文件内容出错(内容清空)或者文件直接损坏而无法打开的情况。文件损坏时,可能报出segmentation fault的错误,以致程序没法正常运行。