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: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum