Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Zeiger im Atmel Mega Kategorie: Programmierung C (von PeterS - 9.01.2011 12:49)



Allen die hier über die Problematik von String Arrays nachgedacht haben,
will ich hier weitere Einschränkungen der Atmel Mega Prozessoren vor
Augen führen. Schaut man sich auf einem Windows in C ein String Array an:

char *str_array[3]={"a","b","c"};

Dann sind dort in dem Array einfach 3 Zeiger auf die Strings. Bei einer
Atmel CPU mü�ten dann einfach Zeiger auf das Flash sein, das ist aber nicht
so einfach. Die Megas haben eine Harvard Architektur, das heiÃ?t die Adressen
von RAM und FLASH sind getrennt. Bei einem kommerziellen C-Compiler für
den Atmel Mega muÃ? ich einen Zeiger vorher deklarieren, ob er auf das
RAM oder FLASH zeigen soll. Das bedeutet das es in der Bibliothek eine
String Compare Funktion immer 2x gibt, einmal für den Vergleich mit RAM,
einmal für den Vergleich mit Text im FLASH. Würde ich alle Möglichkeiten
bei einer Funktion mit 2 Zeigern als Argument haben wollen, so bräuchte
ich glatt die gleiche Funktion viermal.

Normalerweise arbeitet ein kommerzieller C-Compiler, wie der C-Control
Interpreter mit 16-Bit Adressen. Der Befehlssatz des Atmel Mega ist auf
8Bit und 16Bit Operationen optimiert. Möchte ich aber bei dem C-Compiler
die oberen 64kb des Mega128 ansprechen, so geht dies nur umständlich über
Memory Bank Switching.

Wegen diesen Einschränkungen sind die Zeiger im C-Control Pro Interpreter
auch auf das RAM begrenzt. Ein Aufruf

funk("a", 2, "b");

in CompactC ist ein Trick. In Wahrheit wird beim Aufruf der Funktion, vorher
die Strings aus dem FLASH in das RAM kopiert, und dann Zeiger auf das RAM
der Funktion übergeben.


Ich hoffe einige finden diesen Exkurs interessant, denn er zeigt ein paar
der Limitierungen auf, die die Prozessor Architektur beinhaltet. Diese
Probleme treten auch bei der Benutzung von teuren (IAR ca. â?¬650) kommerziellen
C-Compilern auf, und dürften die meisten Anfänger überfordern. In der C-Control
Pro verberge ich diese Einschränkungen, um dem Einsteiger die Arbeit zu
erleichtern.

Gruss Peter


    Antwort schreiben


Antworten: