2010-12-10 3 views
0

Zugriff habe ich einen String an der Stelle 0xAABB definieren:einen C-String aus festen Flash-Standort

const char str[] = "Hi There"; 
const word _Str1 @0xAABB = (word)str; 

Nun, ich möchte diese Zeichenfolge auf 0xAABB befindet zuzugreifen. Was ist die C-Syntax dafür?

+0

Welcher Zielprozessor und Compiler? – nategoose

+0

HCS08, Code Krieger – Punit

+0

Falls jemand wissen möchte, dass es sich um einen 8 Bit von Neumann Architecture Prozessor handelt. Ich habe mich gefragt, ob es eine Harvard-Architektur war. – nategoose

Antwort

0
Verwenden Sie einfach einen Zeiger auf den Speicherort: const char * str = (const char *) 0xAABB;

Edit: (basierend auf Ihren Kommentar) Sie müssen zuerst die Adresse von Ort 0xAABB und dann diesen Wert als die Adresse der Zeichenfolge verwenden:

const char *str = *(const char **)0xAABB; 

Dieser Wille den Zeiger dereferenzieren bei 0xAABB, um die tatsächliche Stringadresse zu erhalten.

+0

Es druckt einige Müllwert. Nun, bei 0xAABB wäre eine Adresse, sagen wir 0xAB. Die tatsächliche Zeichenfolge liegt also hier, wie aus der obigen Definition hervorgeht. – Punit

+0

@Punit: Okay, dann ist es ein 'Char **' dann. – ephemient

+0

@Punit: Siehe meine bearbeitete Antwort. – casablanca

0
#define ADDRESS_OF_YOUR_STRING ((const char *)0xAABB) 

const char *pointer_to_your_string = (const char *)0xAABB; 

Ich hätte das Makro in der Zeigerdefinition verwendet, aber diese sind wirklich getrennte Demonstrationen sein soll, wie dies zu tun. Wenn Sie die Makro-Version in eine Header-Datei schreiben und sie in Ihrem Code verwenden, kann der Compiler ein wenig besser optimieren. Wenn Sie eine globale Zeigervariable verwenden, um auf sie zuzugreifen, kann es sein, dass der Compiler eine zusätzliche Ladung eines Zeigers benötigt.

beides zu verwenden ist das gleiche:

printf("%s\n", ADDRESS_OF_YOUR_STRING); 

sollte gut funktionieren, da printf einen Zeiger auf eine Zeichenfolge für %s erwartet.

Verwandte Themen