Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > 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