Я работаю над проектом, в котором используется процессор LEON2 (SparcV8), и у нас есть шина PCI, которая соединяет другие ПЛИС и процессор.
На этом у нас есть многозадачное приложение, использующее RTEMS и написанное на C.
Теперь я совсем не знаком с архитектурой процессора и pci, поэтому я прихожу к вам, ребята, для просветления.
Проблема заключается в следующем: учтите, что у нас есть одна задача RTEMS, которая выполняет чтение памяти на шине PCI. На нашей плате доступ по PCI составляет примерно 2us. Теперь мой коллега поднял вопрос, что если во время этого чтения PCI планировщик задач RTEMS решит, что пришло время запустить другую задачу, и что эта задача также должна выполнить чтение PCI.
Он считает, что первое чтение PCI, выполненное до переключения задач, будет повреждено вторым чтением PCI, которое будет выполнено вторым заданием перед выполнением первого.
Может ли это случиться?
Моя точка зрения состоит в том, что эта проблема не должна возникать, потому что для меня чтение PCI похоже на любое другое чтение памяти, только то, что вместо чтения локальной оперативной памяти, которая находится, например, по адресу 0x4000'0000, мы читаем адрес 0xA020'0000 процессор затем преобразует это как адрес на шине PCI и выполняет это чтение через шину.
Конечно, это чтение дольше, чем чтение из локальной памяти, но этот процесс не должен прерываться в середине.
Мое понимание может быть совершенно неверным, в этом случае не стесняйтесь меня поправлять!