如何确定“BUS-Error”的原因

时间:2016-05-01 18:06:06

标签: python linux embedded

我正在开发一个带有yocto发行版和python 2.7.3的variscite板。

我有时会从python解释器收到总线错误消息 我的程序在错误发生前至少几小时或几天正常运行 但是当我得到它一次时,我会在尝试重启程序时直接得到它 我必须在系统重新运行之前重新启动。

我的程序只使用串口,​​usb通讯和一些tcp套接字。

我可以切换到另一台硬件并遇到同样的问题。

我还使用了python selftest和
public class Doctor { [Required] [Display(Name = "Name")] [UniqueDoctorName] public string DoctorName { get; set; } }

我得到这两个测试的错误

  

test_getattr(test.test_builtin.BuiltinTest)...错误test_nameprep   (test.test_codecs.NameprepTest)...错误

自我测试总是停在

  

test_callback_register_double(ctypes.test.test_callbacks.SampleCallbacksTestCase)...细分   故障

但是当系统运行几个小时后,自检会在

之前停止
  

ctypes.macholib.dyld   总线错误

我用memtester检查了RAM,似乎没问题。
我怎么能找到问题的原因?

2 个答案:

答案 0 :(得分:3)

总线错误通常是由试图访问硬件无法物理寻址的内存的应用程序引起的。在您的情况下,存在分段错误,其可能导致解除引用错误的指针或类似的东西,这导致访问实际上不可寻址的存储器地址。由于总线错误是次要症状,我首先从root开始导致分段错误。

答案 1 :(得分:0)

一年后,我发现问题的间接原因。

我写了一个使用的crc16模块:

from ctypes import c_ushort
...
value = c_ushort(crcValue >>8 ) ...

如果出现BUS-Error,这是一个有问题的部分。

我不认为c_ushort()函数本身会导致问题,它只是表明存在某些问题的函数。

将系统升级到Linux version 3.14.38-6QP+g8740b9f (test@Yocto) (gcc version 4.9.2 (GCC) )

后问题仍然存在