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

Re: Mehrdimensionale Arrays Kategorie: Programmierung C (von PeterS - 22.10.2009 14:54)
Als Antwort auf Re: Mehrdimensionale Arrays von ER - 21.10.2009 20:59
Ich nutze:
C-Control Pro Mega32, C-Control Pro Mega128, CC-Pro 32 Application Board, CC-Pro 128 Application Board, Pro-Bot128
> > > > > Hallo,
> > > > >
> > > > > ich bin von C-Control I auf C-Control Pro MEGA128 umgestiegen. Ich programmiere in CompactC.
> > > > >
> > > > > Ich möchte eine Ablaufsteuerung aufbauen. Dazu habe ich "früher" häufig mit den Tabellen
> > > > > (Table-Anweisung) gearbeitet.
> > > > >
> > > > > Nun habe ich in C versucht, dies mit Arrays nachzubilden.
> > > > >
> > > > > Ich sto�e jedoch ständig auf Schwierigkeiten!
> > > > >
> > > > > Mehrdimensionale Arrays können nicht referenziert werden!!. Parameterübergaben gehen
> > > > > nur bei eindimensionalen Arrays. Als Rückgabewerte einer Funktion kann man sie
> > > > > nicht verwenden. Dynamisch (Grö�enangabe durch Variablen) kann man sie nicht
> > > > > erstellen, es exestieren keine Funktionen um die Dimensionen eines Arrays ermitteln
> > > > > zu können und und und...
> > > > >
> > > > > Eine sinnvolle alternative für meine Ablaufsteuerung wäre noch Struc(turen) zu benutzen.
> > > > > Geht nicht!
> > > > > Vieleicht habe ich ja auch aufs falsche Pferd gesetz. Habt ihr noch einen Hinweis?
> > > > >
> > > > > Vielen Dank!
> > > >
> > > > Ja es gibt Einschränkungen, aber es ist immer noch mehr möglich als auf der C-Control I,
> > > > dort hat man nur globale statische ein-dimensionale Arrays vom Typ Word. Ich überlege noch wie
> > > > man Referenzen übergeben und zurückgeben kann, ohne die komplette Pointerarithmetik mit
> > > > einzubauen.
> > > >
> > > > Dynamisch (Grö�enangabe durch Variablen) gehen nur mit den C99 Standard und auch dort nur lokal,
> > > > weil sie auf dem Stack angelegt werden. Der Speicher ist zu klein um sinnvoll mit einem Heap
> > > > zu arbeiten. Der C-Control Pro Compiler kann sich nicht mit einem kommerziellen Compiler
> > > > messen, und selbst die unterstützen grö�tenteils nicht C99. Wenn Du das alles haben willst, mu�t
> > > > Du schon den GNU Compiler benutzen.
> > > >
> > > > Gruss Peter
> > > >
> > > > >
> > > > > Fred
> > >
> > > Hallo Fred,
> > > ich habe auch viel mit der CC1 gearbeitet und auch mit LOOKTAB.
> > > Die CC Pro kann keine mehrdimensionalen flash arrays.
> > > Ich habe aber eine Lösung gefunden,  mit der ich leben kann.
> > >
> > >
> > >
> > > // Table komplett definieren und ab ins flash:
> > > flash byte match1[8]  = {16, 244,  35,  78, 1, 8, 0, 203};
> > > flash byte match2[8]  = {16, 156, 193,  78, 1, 8, 0, 240};
> > > flash byte match3[8]  = {16, 156, 193,  78, 1, 8, 0, 240};
> > > flash byte match4[8]  = {16, 156, 193,  78, 1, 8, 0, 240};
> > > flash byte match5[8]  = {16, 156, 193,  78, 1, 8, 0, 240};
> > > flash byte match6[8]  = {16, 156, 193,  78, 1, 8, 0, 240};
> > > flash byte match7[8]  = {16, 156, 193,  78, 1, 8, 0, 240};
> > > flash byte match8[8]  = {16, 156, 193,  78, 1, 8, 0, 240};
> > > flash byte match9[8]  = {16, 156, 193,  78, 1, 8, 0, 240};
> > > flash byte match10[8] = {16, 156, 193,  78, 1, 8, 0, 240};
> > > flash byte match11[8] = {16, 156, 193,  78, 1, 8, 0, 240};
> > > flash byte match12[8] = {16, 156, 193,  78, 1, 8, 0, 240};
> > > flash byte match13[8] = {16, 156, 193,  78, 1, 8, 0, 240};
> > >
> > >
> > > // 1 Zeile im Ram definieren
> > > byte array1[8];         // Schmierarray
> > >
> > > // 1 Zeile vom flash ins Ram kopieren und verarbeiten
> > > array1 = match1
> > >
> > > Anders gehts leider nicht
> > >
> > > mfg Ellen
> > >
> > >
> > >
> >
> > Wieso keine mehrdimensionallen Arrays? Klar geht das:
> >
> > flash byte fglob[2][2]={10,11,12,13};
> >
> >
> > Gruss Peter
>
> Hallo Peter,
> ich hab meinen Beitrag vom 15.8. gelesen.
> Dur hast natürlich recht.
>
> Das Problem ist folgendes.
>
> Du musst mindestens soviel RAM bereitstellen, wie das Flash array groÃ? ist.
> Mit 1 k Ram geht das Problem schon los.
> Auf das flash array kannst Du nicht indiziert zugreifen und keine strukturierte
> Programmierung machen. Fred hat das auch erkannt.
> Ist das mit der IDE 2.1 erledigt?

Nope. Werde ich aber bis Ende Januar in Angriff nehmen.

Gruss Peter

>
> Die Anweisung LOOKTAB bei der CC1 bietet die Möglichkeit 1 dimensional
> auf Tabellen zu zugreifen.
>
> GruÃ?
> Ellen
>
>
>
>
>
>


    Antwort schreiben


Antworten: