我正在开发一个使用 LEON2 (SparcV8) 处理器的项目,并且我们有一个连接其他 FPGA 和处理器的 PCI 总线。
在此运行我们有一个使用 RTEMS 并用 C 编写的多任务应用程序。
现在我对处理器和 pci 架构一点也不熟悉,这就是我来找你们寻求启发的原因。
问题是这样的:考虑我们有一个 RTEMS 任务,它在 PCI 总线上执行内存读取。在我们的板上,PCI 访问大约有 2us 长。现在我的一位同事提出了一个问题,如果在 PCI 读取期间 RTEMS 的任务调度程序决定是时候触发另一个任务,并且该任务作业也执行 PCI 读取。他的观点是,在任务切换之前执行的第一次 PCI 读取将被第二次 PCI 读取破坏,第二次 PCI 读取将在执行第一个任务之前由第二个任务执行。
这种情况会发生吗?
我的观点是这个问题不应该发生,因为对我来说,PCI读取就像任何其他内存读取一样,只是我们读取地址0xA020'0000而不是读取例如地址0x4000'0000的本地RAM然后处理器将其转换为 PCI 总线上的地址,并通过总线执行此读取。当然这个读取比本地内存读取要长,但是这个过程在中间不应该是可中断的。我的理解很可能完全错误,在这种情况下,请随时纠正我!