Hallo Ich habe ein Pic Programm, bei dem ich zwei 256 Byte grosse Arrays habe. Sobald ich das Programm compilieren möchte kommt bei mir folgende Fehlermeldung: Error - section '.udata_LCD.o' can not fit the section. Section '.udata_LCD.o' length=0x00000200 Errors : 1 Der Fehler kommt, weil die Arrays zu gross sind(wenn die Arrays kleiner sind geht es), obwohl der Pic knapp 4Kbyte speicher hat (Pic 18f4620) und ich sonst nicht viel Speicher brauche. Nun möchte ich mal versuchen ob es geht, wenn ich die Speicher adressen der Arrays manuell vergebe. Der Pic hat im RAM 15 Banken, mit je 256 Byte speicher. Wenn ich es jetzt irgendwie hinbekomme, dass z.B.Bank10 für Array1 ist und Bank11 für Array2 ist, könnte es vielleicht gehen. Da das Problem wahrscheinlich daran liegt, dass der Pic innerhalb von einem Array die Bank nicht umschalten kann und der Compiler zu blöde ist das Array in eine Eigene Bank zu speichern. Weiss jemand, wie ich mit dem C18 Compiler Speicheradressen von Variablen manuell festlegen kann? liebe Grüsse David
Probiers mal mit "far ... array[256]" oder der Compiler-Option, Daten nicht implizit als "near" ins kleine Access-RAM zu stopfen. Letzteres dürfte freilich deutlich mehr Code zur Folge haben, weil er dann alle Daten banked, nicht nur die Arrays.
"far ... array[256]" hat nichts gebracht. Die Compiler-Option war schon auf Large Data modell(all Ram Banks). Hat beides nichts gebracht. Beitrag "globale Variable in mehreren C-Files" Hier steht etwas wie man mit dem C30 Compiler die Adresse von Variablen festlegen kann. Eigentlich suche ich so etwas für den C18. Die Methode wie dort beschrieben wird funktioniert beim C18 nicht.
David schrieb: > Weiss jemand, wie ich mit dem C18 Compiler Speicheradressen von > Variablen manuell festlegen kann? Ja. Dein Compiler-Handbuch. Das befindet im "doc" Unterversichnis des C18 Installationsverzeichnisses und heißt hlpC18ug.chm. Da darfst Du ruhig reinschauen, das kostet nichts extra. Da gehst Du dann auf "Suchen, tippst "Locating Data" ein, und wählst als Thema "Locating Data". Da steht dann genau, wie es geht. fchk
Frank K. schrieb: > Ja. Dein Compiler-Handbuch. Das befindet im "doc" Unterversichnis des > > C18 Installationsverzeichnisses und heißt hlpC18ug.chm. Da darfst Du > > ruhig reinschauen, das kostet nichts extra. > > > > Da gehst Du dann auf "Suchen, tippst "Locating Data" ein, und wählst als > > Thema "Locating Data". Da steht dann genau, wie es geht. Cool Danke für die Hilfe
David schrieb: > "far ... array[256]" hat nichts gebracht. Die Compiler-Option war schon > auf Large Data modell(all Ram Banks). Hat beides nichts gebracht. Hallo ich hab auch das gleiche Problem:( dass ich ein Array mit 256 Komponennten brauche aber der Compiler die selbe Fehlermeldung bringt, wäre super wenn mir jemand sagen könnte wie/ wo ich die Einstellung Large Data modell einstellen kann danke im Voraus für jede Hilfe mgf Alex
Wie groß ist jede einzelne Variable? Byte, Int, Long, Float?? Ich kenne den Compiler und Controller nicht, aber eventuell kann er ein Array nur am Stück in eine Bank packen. Mit int Array[256] braucht er 512 Bytes, also mehr als eine Bank... Versuche mal das Array so lange zu verkleinern, bis es nicht mehr knallt. Bei welcher Größe ist das erreicht?
Hallo zusammen, Der folgende Link könnte vielleicht hilfreich sein: http://www.xargs.com/pic/c18large.html
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.