Das Schlüsselwort __packed wird verwendet, um den Compiler von der Ausrichtung der Datenstrukturen auf Byte- oder Wortgrenzen abzuhalten, um eine effizientere Datenspeicherung zu erzielen, oder um ein Mapping auf eine externe Datenquelle zu erzielen. Im Beispiel in Bild 1 bewirkt dieses Schlüsselwort, dass sich die Größe des Struct-Typen von 8 Byte auf 5 Byte verringert, weil auf die Ausrichtung der Datentypen auf »Long Word« verzichtet wurde.
Das Schlüsselwort __irq weist den Compiler an, dass die betreffende Funktion für die Bearbeitung eines Interrupts verwendet wird. Im Beispiel in Bild 2 wird gezeigt, was geschieht, wenn man dieses Schlüsselwort entfernt. Man kann erkennen, dass beide Funktionen das Register R1 nutzen. Im Fall der __irq-Funktion wird der Inhalt von R1 gesichert und wiederhergestellt. Die Funktion ohne das Schlüsselwort __irq nutzt R1 ohne vorherige Wiederherstellung. Der Compiler weiß, dass bei Zugriff aus einer Interrupt-Funktion der Inhalt des Registers R1 unbestimmt ist und daher zunächst wiederhergestellt werden muss.
Handelt es sich also bei dem Code, den Sie im Modultest geprüft haben, wirklich um den, der auf Ihrem Zielsystem laufen wird? Oder handelt es sich dabei nicht eher um eine modifizierte Version des Codes, die erstellt wurde, um dem Werkzeuganbieter das Leben zu erleichtern?
Zielumgebung berücksichtigen
Eine Interpretation von Compiler-Schlüsselworten durch Testwerkzeuge kann – wie die beiden oben angesprochenen Beispiele zeigen – erhebliche Auswirkungen auf den erzeugten Objektcode haben. Wird dies also nicht korrekt erledigt, dann entspricht der erzeugte nicht mehr wirklich dem auf dem Zielsystem ausgeführten Code.
Angesichts einer dramatischen Zunahme der Komplexität und Wiederverwendung von Code kommt der gleiche Code oft auf vielen unterschiedlichen Hardwarebausteinen und -systemen zum Einsatz. Wechselt man zwischen unterschiedlichen CPU-Familien und Werkzeugketten, so ist es wichtig, dass man jede Variante überprüft, und dass man sicherstellt, dass die Tests unter Berücksichtigung der endgültigen Zielumgebung ausgeführt werden.
Bei der Verwendung von Werkzeugen zur Testautomatisierung kommt es also darauf an, Werkzeuge einzusetzen, die nicht nur den standardisierten C- und C++-Sprachumfang, sondern auch die von den sonstigen eingesetzten Entwicklungswerkzeugen verwendeten Schlüsselwort-Erweiterungen unterstützen.
Mit »VectorCAST« möchte Vector Software ein Höchstmaß an Übereinstimmung zwischen der Testumgebung und der Zielumgebung gewährleisten.