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