如何在C++中从FPGA的memcpy“总线错误”中恢复?

xn1cxnb4  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(82)

我所读到的一切都表明memcpy不会抛出异常,所以try-catch语句不能用来处理这样的错误。硬件团队已经为我提供了内存地址和范围,我正在通过mmap访问它们,但有一些集成问题(即,他们需要修复的事情)。
一个DDR通道工作得很好,而同样的代码在另一个通道上做同样的操作时经常会死。程序只是在终端上打印“总线错误”而停止。
一旦弄清楚了这一点,内存交互应该会更流畅,但这个接口接受来自另一个设备(即另一个团队)的内存操作。我可以尝试验证任何传入的操作,但随后有可能硬件团队也会做一些奇怪的事情来更改有效的操作,或者简单地导致“总线错误”。
那么,我如何才能使我的C++应用程序不会因为来自另一个团队的未来/意外更改而死亡呢?我需要设置一个信号处理程序吗?还有其他选择吗?

jfgube3f

jfgube3f1#

一个信号处理程序与这些相结合似乎是为了.

static sigjmp_buf jmpbuf;
siglongjmp(jmpbuf,signum); // call from within signal handler

if(sigsetjmp(jmpbuf,1)) {
    std::cout << "Something bad happened
} else {
    // Normal operation, basically saving a checkpoint before a dangerous operation
}

字符串

相关问题