Это действительно функция архитектуры шины PCI и ее динамическая природа.SM_ANCHOR_ADRS представляет разделяемую память в адресном пространстве PCI ведомой карты.
Проблема заключается в том, что при добавлении большего количества карт адресное пространство PCI может потенциально измениться.Если вы используете автоматическую настройку PCI, вы, по сути, позволяете vxWorks назначать вам адреса.Я не уверен в порядке назначения, но думаю, что адресное пространство выделяется в порядке обнаружения устройств на шине PCI.
Давайте посмотрим, смогу ли я проиллюстрировать:
PCI Address 3 Devices 4 Devices (Added 1)
0x80000000 (base) +------------------+ +---------------------+
| Host Bridge | | Host Bridge |
| Device (0,0,0) | | Device (0,0,0) |
| 0x01000000 size | | 0x01000000 size |
0x81000000 +------------------+ +---------------------+
| Slave 1 | | Slave 1 |
| Device (0,4,0) | | Device (0,4,0) |
| 0x01000000 size | | 0x01000000 size |
0x82000000 +------------------+ +---------------------+
| Slave 2 | | CPCI Card |
| Device (0,8,0) | | Device (0,6,0) |
| 0x01000000 size | | 0x01000000 size |
0x83000000 +------------------+ +---------------------+
| Slave 2 |
| Device (0,8,0) |
| 0x01000000 size |
+---------------------+
Кортеж устройства представляет (Bus #, Device #, Function #).Device # определяется тем, к какому слоту подключена карта PCI. Добавьте возможность использования нескольких шин PCI, и порядок обработки может усложниться.
При использовании конфигурации PCI Auto вы указываетебазовый адрес и размер окон памяти PCI (возможны несколько окон памяти PCI).Затем код отправляется на шину PCI и обнаруживает устройства.Когда устройство обнаружено, оно сообщает системе PCI, сколько памяти ему нужно, и система отображает адреса в окне PCI для этого устройства.В моем примере все устройства запрашивали 0x01000000 оперативной памяти.
Это хорошо работает, когда конфигурация PCI статическая и не изменяется.Однако, как мы видим, если мы добавим новое устройство (CPCI), то порядок устройств изменится, что также приведет к изменению некоторых адресов.
Автоконфигурирование PCI упрощает жизнь, так как вы не используетеНе нужно беспокоиться о настройке всех устройств заранее.Они только что обнаружены.
Однако, если конфигурация переменная, вам, вероятно, нужно настроить вещи вручную: т.е. заранее знать, какие устройства могут присутствовать, и попытаться настроить их.С другой стороны, у вас есть полный контроль над тем, какой адрес вы назначаете данному PCI-устройству.
Чтобы вернуться к вашему вопросу, откуда вы знаете этот адрес?Если у вас есть доступ к оболочке vxWorks, вы можете использовать pciConfigTopoShow (), которая должна показать вам различные найденные устройства PCI и их адресные пространства.