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

问题描述 投票:0回答:1

我读到的所有内容都表明

memcpy
不会引发异常,因此 try-catch 语句不能用于处理此类错误。硬件团队向我提供了内存地址和范围,并通过
mmap
访问它们,但存在一些集成问题(即需要他们修复的问题)。

一个 DDR 通道可以完美运行,而执行相同操作的相同代码通常会因另一个通道而失效。程序只是停止并在终端上打印“总线错误”。

一旦弄清楚这一点,内存交互应该会更加流畅,但是这个接口接受来自另一个设备(即另一个团队)的内存操作。我可以尝试验证任何传入的操作,但是硬件团队也有可能会做一些奇怪的事情来更改有效的内容,或者只是导致有效操作的“总线错误”。

那么我怎样才能防止我的 C++ 应用程序因其他团队未来/意外的更改而死亡呢?我需要设置信号处理程序吗?还有其他选择吗?

c++ error-handling mmap memcpy
1个回答
0
投票

与这些组合的信号处理程序似乎是有序的......

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
}
© www.soinside.com 2019 - 2024. All rights reserved.