私は LEON2 (SparcV8) プロセッサを使用するプロジェクトに取り組んでおり、他の FPGA とプロセッサを接続する PCI バスがあります。
これを実行すると、RTEMS を使用し、C で記述されたマルチタスク アプリケーションが作成されます。
今、私はプロセッサと pci アーキテクチャにまったく慣れていないので、啓発のために皆さんのところに来ました。
問題は次のとおりです。PCI バス上でメモリの読み取りを実行する 1 つの RTEMS タスクがあるとします。私たちのボードでは、PCI アクセスの長さは約 2us です。さて、私の同僚が問題を提起しました。その PCI 読み取り中に、RTEMS のタスク スケジューラが、別のタスクが起動する時間であり、このタスク ジョブも PCI 読み取りを実行すると判断した場合はどうなるでしょうか。彼のポイントは、タスク切り替えの前に実行された最初の PCI 読み取りが、最初のタスクが実行される前に 2 番目のタスクによって実行される 2 番目の PCI 読み取りによって破損するということです。
このケースはありえますか?
私の見解では、この問題は発生してはならないということです。私にとって、PCI 読み取りは他のメモリ読み取りと同じであり、たとえばアドレス 0x4000'0000 にあるローカル RAM を読み取る代わりに、アドレス 0xA020'0000 を読み取るだけだからです。次に、プロセッサはこれを PCI バス上のアドレスとして変換し、バスを介してこの読み取りを実行します。確かに、この読み取りはローカル メモリの読み取りよりも長くなりますが、このプロセスは途中で中断できません。私の理解が完全にずれている可能性があります。その場合は、お気軽に修正してください。