Ich habe ein Datenblatt gelesen und die Variable als definiert gefunden unsigned char near Sample_X
. Was ist das und wie unterscheidet sich das unsigned char Sample_X
?
12
Ich habe ein Datenblatt gelesen und die Variable als definiert gefunden unsigned char near Sample_X
. Was ist das und wie unterscheidet sich das unsigned char Sample_X
?
near
ist ein Beispiel für einen Speicherklassenspezifizierer . Sie sagt dem Compiler etwas darüber, wie oder wo der Speicher für die Variable zugewiesen werden soll. (Weitere Informationen finden Sie in der Antwort von filo weiter untennear
.)Antworten:
Die hier angegebene MCU ist eine Freescale MC9C08-Serie , die eine leicht verbesserte Version ihrer HC08-Architektur verwendet. Dies ist ein 8-Bit-Kern, der (wie viele andere) kürzere Anweisungen und einen schnelleren Zugriff auf "Null-Seiten" -Adressen als andere hat. Nullseitenadressen haben nur eine Länge von 8 Bit anstelle von 16 Bit, sodass Anweisungen, die auf sie verweisen , 2 Byte anstelle von 3 Byte lang sein können und als Ergebnis 1 Zyklus weniger benötigen, um ausgeführt zu werden.
Das Schlüsselwort "near" weist den Compiler an, die Variable, wenn möglich, auf "zero page" zu setzen, um eine bessere Leistung zu erzielen. Compiler, die speziell für die eingebettete Entwicklung geschrieben wurden, wie dieser , implementieren normalerweise solche Erweiterungen für die Sprache (hier als "C Support for Zero Page" bezeichnet).
quelle
register
Schlüsselwort sehr ähnlich (für Fälle, in denen Sie wirklich sicher sind, dass hier eine Optimierung erforderlich ist), aber etwas weniger extrem?Abhängig von der CPU-Architektur kann es unterschiedliche Anweisungen für den Zugriff auf Daten unter verschiedenen Adressen geben. Hier ist ein Beispiel von Keil für einen ihrer Compiler.
Der Near-Zugriff hat eine bestimmte Speicherbeschränkung, daher können Sie dem Compiler Hinweise geben, um einige häufig verwendete Variablen in einem Bereich zu platzieren, auf den mit kürzeren Anweisungen zugegriffen werden kann (offensichtlich ist die Beschreibung des Zugriffs auf einen 32-Bit-Adressraum größer als die 16-Bit-Adresse) Raum). Dies kann zu kleinerem / schnellerem Code führen.
quelle
far
und verweistnear
auf die weitgehend veraltete 8086-Architektur. Dieselben Schlüsselwörter werden auf verwandten, aber unterschiedlichen Arten auf 8-Bit-Mikrocontrollern verwendet.