Diskussion:Peripheral Component Interconnect — Änderungen 7979 → 7980

Zeile 16: Zeile 16:
  
 
== Beispielcode ==
 
== Beispielcode ==
−
Der Beispielcode ist [strike]scheinbar[/strike] Fehlerhaft. --[[Benutzer:Programm Noob|Programm Noob]] 22:36, 22. Jul. 2010 (CEST)
+
Der Beispielcode ist [strike]scheinbar[/strike] Fehlerhaft. --[[Benutzer:Programm Noob|Programm Noob]] 19:36, 22. Jul. 2010 (CEST)
 
:Wenns nur scheinbar ist, ist ja alles in Ordnung. Spaß beiseite: Ich habe ihn mir jetzt nicht angesehen, aber du könntest ihn dann ja korrigieren, wenn du aber nicht sicher bist, wie es richtig geht, dann sag uns, was falsch ist, oder wenn dir da auch nicht so sicher bist, dann sag uns wenigstens, woran du siehst, dass er falsch ist. —[[Benutzer:XanClic|Clici McXan]] 20:16, 22. Jul. 2010 (CEST)
 
:Wenns nur scheinbar ist, ist ja alles in Ordnung. Spaß beiseite: Ich habe ihn mir jetzt nicht angesehen, aber du könntest ihn dann ja korrigieren, wenn du aber nicht sicher bist, wie es richtig geht, dann sag uns, was falsch ist, oder wenn dir da auch nicht so sicher bist, dann sag uns wenigstens, woran du siehst, dass er falsch ist. —[[Benutzer:XanClic|Clici McXan]] 20:16, 22. Jul. 2010 (CEST)
 
::Ich melde mich mal, weil ich dazu geraten habe, das hier zu melden: Die Meldung "FEHLER : 32Bit-Memory-BAR %u enthält keine beschreibbaren Adressbits!\n" kommt bei 5 von 6 Geräten an seinem PC. Das liegt den if-Abfragen, die auf sehr komische Bedingungen testen, wie zum Beispiel: (get_number_of_highest_set_bit(barValue) != 31) || (lowestBit > 31) || (lowestBit < 4). Die erste Alternative kann ich nicht mit der Spec in Einklang bringen, und sollte so wie ich das sehe immer wahr sein. Die zweite ist vermutlich auch immer Wahr, außer wenn barValue = 0x80000000, aber dann ist die erste Alternative wahr. Und die dritte Alternative ist immer false. Ich denke mal der Code wurde nie getestet, und vermutlich nicht mal dafür gedacht ausgeführt zu werden. --[[Benutzer:Jidder|Jidder]] 20:35, 22. Jul. 2010 (CEST)
 
::Ich melde mich mal, weil ich dazu geraten habe, das hier zu melden: Die Meldung "FEHLER : 32Bit-Memory-BAR %u enthält keine beschreibbaren Adressbits!\n" kommt bei 5 von 6 Geräten an seinem PC. Das liegt den if-Abfragen, die auf sehr komische Bedingungen testen, wie zum Beispiel: (get_number_of_highest_set_bit(barValue) != 31) || (lowestBit > 31) || (lowestBit < 4). Die erste Alternative kann ich nicht mit der Spec in Einklang bringen, und sollte so wie ich das sehe immer wahr sein. Die zweite ist vermutlich auch immer Wahr, außer wenn barValue = 0x80000000, aber dann ist die erste Alternative wahr. Und die dritte Alternative ist immer false. Ich denke mal der Code wurde nie getestet, und vermutlich nicht mal dafür gedacht ausgeführt zu werden. --[[Benutzer:Jidder|Jidder]] 20:35, 22. Jul. 2010 (CEST)
 
:::Diese Meldung basiert aber nicht auf der if-Abfrage, wobei ich auch nicht erklären kann, wieso die immer kommt… Die Abfrage selbst hingegen sehe ich nicht als falsch an, das höchste Bit muss immer gesetzt sein (es wurde ja 0xFFFFFFF0 reingeschrieben, wäre das höchste Bit nicht gesetzt, dann müsste der Bereich ja 4 GB groß sein (was bei 32 Bit merkwürdig wäre), soweit ich das sehe), das niedrigste Bit sollte eben spätestens 0x80000000 sein (gut, erübrigt sich durch die erste Abfrage) und die dritte sorgt dafür, dass es ein gültiges Speicher-BAR ist (die unteren vier Bit dürfen nicht beschreibbar sein, afaik). Ich probiere den Code mal selbst aus (wie auch immer) und sehe dann weiter. —[[Benutzer:XanClic|Clici McXan]] 22:25, 22. Jul. 2010 (CEST)
 
:::Diese Meldung basiert aber nicht auf der if-Abfrage, wobei ich auch nicht erklären kann, wieso die immer kommt… Die Abfrage selbst hingegen sehe ich nicht als falsch an, das höchste Bit muss immer gesetzt sein (es wurde ja 0xFFFFFFF0 reingeschrieben, wäre das höchste Bit nicht gesetzt, dann müsste der Bereich ja 4 GB groß sein (was bei 32 Bit merkwürdig wäre), soweit ich das sehe), das niedrigste Bit sollte eben spätestens 0x80000000 sein (gut, erübrigt sich durch die erste Abfrage) und die dritte sorgt dafür, dass es ein gültiges Speicher-BAR ist (die unteren vier Bit dürfen nicht beschreibbar sein, afaik). Ich probiere den Code mal selbst aus (wie auch immer) und sehe dann weiter. —[[Benutzer:XanClic|Clici McXan]] 22:25, 22. Jul. 2010 (CEST)
 
::::Ich habe den Code auch mal unverändert getestet und da ließ er sich nichteinmal kompilieren. Es gibt immer die Meldung von GCC pci.c:158: error: invalid operands to binary + (have 'pci_bdf_t' and 'int') Das ist hier die Zeile 119 "const uint32_t barHighValue = pci_config_readd(addr+4,barOffset); // und wieder zurücklesen" --[[Benutzer:Programm Noob|Programm Noob]] 22:36, 22. Jul. 2010 (CEST)
 
::::Ich habe den Code auch mal unverändert getestet und da ließ er sich nichteinmal kompilieren. Es gibt immer die Meldung von GCC pci.c:158: error: invalid operands to binary + (have 'pci_bdf_t' and 'int') Das ist hier die Zeile 119 "const uint32_t barHighValue = pci_config_readd(addr+4,barOffset); // und wieder zurücklesen" --[[Benutzer:Programm Noob|Programm Noob]] 22:36, 22. Jul. 2010 (CEST)