Hallo ich habe folgendes Problem. Ich möchte einer Hand voll(große Hand) Variablen vom Datentyp uint8 Werte zuweisen. Die, ich nenn sie mal, Startwerte befinden sich im ROM. ich bin wie folgt vorgegangen (die ganzen Deklarationen lass ich mal außen vor) uint8 i; for(i=erste_konstante; i<letze_konstante, i++) { variable[i] = romvariable[i]; } Der punkt wo es hakt leigt bei "romvariable&i" also in Worten ausgedrückt ich möchte Variable1 die Romvariable1 zuweisen. Dies natürlich gerne über die For-Schleife damit ich nicht für alle Variable1 = Romvariable1; Variable2 = Romvariable2; Variable3 = Romvariable3; Variable4 = Romvariable4; händisch machen muss. Hat jemand eine Idee ich komme gerade nicht weiter. mfg
beginner schrieb: > Der punkt wo es hakt leigt bei "romvariable&i" Ja aber die Adresse von deinem Zählindex interessiert doch auch keinen.
Hm, entweder verstehe ich deine Frage falsch oder du hast ein grundlegendes C-Problem. Genau dafür gibts doch die Arrays (hast du ja in der Schleife auch benutzt)... unsigned int Variable[10]; const unsigned int Romvariable[10]={....};
Du hast das Problem schon selber gelöst. Du brauchst romvariable1, romvariable2, romvariable3 .... gar nicht. Denn Du hast ja eben romvariable[1], romvariable[2], romvariable[3] .... Genau dazu sind Arrays da.
beginner schrieb: > Der punkt wo es hakt leigt bei "romvariable&i" Den Punkt sehe ich nirgends in deinem nichts-sagenden Quellcode-Mini-Schnippsel. EDIT: Hat sich erledigt. Und was hakt da? Wie sieht es mit Fehlermeldungen aus? Bist du auf einem µC? Werden die Werte auch wirklich aus dem (EEP)ROM ausgelesen? Die Fehlerbeschreibung und die Randbedingungen sind ziemlich dürftig.
beginner schrieb: > also in Worten ausgedrückt ich möchte Variable1 die Romvariable1 > zuweisen. Dies natürlich gerne über die For-Schleife damit ich nicht für > alle > > Variable1 = Romvariable1; > Variable2 = Romvariable2; > Variable3 = Romvariable3; > Variable4 = Romvariable4; > > händisch machen muss. hänge in obige Aussage überall um die Zahlen ein [ ], und Du hast das Resultat vom Code, den Du geschrieben hast. Und Dein Problem gelöst.
Um zu versuchen den Grund für die Verwirrung hier mal ein bisschen
direkter auf den Punkt zu bringen:
Du schreibst:
>...über die For-Schleife ...
und hast auch den Code dafür hier:
1 | for(i=erste_konstante; i<letze_konstante, i++) |
2 | {
|
3 | variable[i] = romvariable[i]; |
4 | }
|
D.h. Du hast genau den Code für den Zweck, nach dem Du hier fragst, schon vorliegen. Was ist also das Problem?
Klaus schrieb: > Um zu versuchen den Grund für die Verwirrung hier mal ein bisschen > direkter auf den Punkt zu bringen: > > Du schreibst: > >>...über die For-Schleife ... > > und hast auch den Code dafür hier: > for(i=erste_konstante; i<letze_konstante, i++) > { > variable[i] = romvariable[i]; > } > > D.h. Du hast genau den Code für den Zweck, nach dem Du hier fragst, > schon vorliegen. Was ist also das Problem? Da hat sich ein kleiner Fehler eingeschlichen: vor "i++" gehört ein ";" und kein ",". Gruß Fnord
Klaus schrieb: > variable[i] = romvariable[i]; "romvariable" ist natürlich keine Variable, sondern, da sie im ROM steht eine Konstante. Diesen konstanten Wert kannst du den Variablen aber auch zum Zeitpunkt der Compilierung zuweisen: unsigned char variable[] = {8, 27, 43, 1, 222}; und gut ist. Das Anlegen eines Arrays im ROM (Flash) ist in diesem Fall nur unnötiger Ballast, genauso wie das Umkopieren zur Laufzeit an irgendeiner Stelle des Programms. Und unübersichtlicher ist es auch. mfg.
Nicht unbedingt. Die Konstanten stehen so oder so im ROM, und es kann durchaus weniger Code verbrauchen, wenn sie dort explizit als Feld deklariert sind. Wie es im einzelnen ausgeht, kommt auch noch auf den Compiler und dessen Einstellungen an. Völlig hinfällig wird dein Vorschlag, wenn zur Programmlaufzeit die Startwerte teilweise nochmals geladen werden müssen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.