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

Re: Zeit und Datum gehen auf 0 bei Prog > 16Kb Kategorie: Programmierung C (von Henry - 28.02.2014 20:32)
Als Antwort auf Re: Zeit und Datum gehen auf 0 bei Prog > 16Kb von Franz-Peter - 23.02.2014 10:00
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> > > > > > > Hallo
> > > > > > >
> > > > > > > Ich nutze das Application Board mit Pro Mega128 für eine Heizungs - und Haussteuerung
> > > > > > > Ich nutze 1-wire Temperatursensoren, I2C Relaisplatinen von CCTools und eine RS232 Kopplung
> > > > > > > zu einem Linux Webserver (Foxboard).
> > > > > > > Ab ziemlich genau 16Kb Byte Code geht die interne Uhr auf 0, Datum und Uhrzeit.
> > > > > > > Es ist egal welchen Code und auch wo ich ihn einfüge. Die Anzahl der Variablen scheint keine Rolle
> > > > > > > zu spielen 217 Byte globale Variablen, ohne Multithreading.
> > > > > > > Ich nutze IDE 2.13.0.15 mit der neuen Version bricht die serielle Kopplung nach kurzer Zeit ab.
> > > > > > > Kann mir jemand einen Tip geben wie ich mehr Bytecode nutzen kann.
> > > > > > >
> > > > > > > Danke und viele Grüße Henry
> > > > > > >
> > > > > > >
> > > > > >
> > > > > > Hallo,
> > > > > >
> > > > > > ich benutze für meine Haussteuerung das Projectboard mit dem Mega128. Mein Bytecode liegt bei ca. 28Kb.
> > > > > > Ich habe immer Angst
> > > > > > über die magische 30Kb Grenze zu kommen..
> > > > > > Ich hatte eine zeitlang das Problem, das die Minuten oder Sekunden zum Teil über 59 gegangen sind.
> > > > > >  Ich hatte allerdings auch 14 Threads im Einsatz.
> > > > > > Obwohl ich die Speicher der einzelnen Threads sehr großzügig ausgelegt hatte,
> > > > > > war die Vermutung von PeterS, dass der Speicher überschrieben wird.
> > > > > > Ich habe dann das Programm deutlich vereinfacht und auf 2 Threads reduziert.
> > > > > > Seitdem habe ich keine Probleme mehr. Auch die Umstellung auf 2.31.0.89 lief dann ohne Probleme.
> > > > > > Ich würde auf jeden Fall erstmal auf die neue IDE gehen und das Programm in Teilen reduzieren
> > > > > > (mal ohne 1-wire Temperatursensoren), bis die serielle Kopplung wieder geht.
> > > > > >
> > > > > > Grüße Joerg
> > > > > >
> > > > > > Hallo Joerg
> > > > > > Vielen Dank für den Lösungsansatz, ich denke da habe ich Reserven. Ich dachte bis jetzt das
> > > > > > Flashspeicher (128KB - 51KB - 4KB) noch reichlich verfügbar ist. Wie kommt es eigentlich zu
> > > > > > diesem Engpass?
> > > > > > Viele Grüsse Henry
> > > >
> > > > Hallo Henry,
> > > >
> > > > keine Ahnung woran das liegt. Ich wollte das immer mal testen durch Dummy Code.
> > > > Bin aber bisher nicht dazu gekommen. Ist halt schon eine Bastellei...
> > > > Aber der wechsel, zu eine anderen Platform wäre für mich schon sehr aufwendig....
> > > >
> > > >
> > > > Grüße Joerg
> > > >
> > > Hallo,
> > > meines Wissens liegt die 'magische' Grenze beim CC-Pro 128 bei 64kByte Flash-Speicher. Allerdings
> > > inklusive Interpreter. Die Ursache liegt darin, dass beim Daten-Zugriff auf die oberen 64kByte ein
> > > anderer Maschinenbefehl nötig ist. So wie ich das sehe, ist der Bytecode den wir beim Programmieren
> > > erstellen ja 'Daten' für den Interpreter. Sobald der also über der 64kByte-Grenze liegt, muss der
> > > Interpreter das berücksichtigen, und anders darauf zugreifen. Und da gibt es wohl so den einen oder
> > > anderen 'Fallstrick'.
> > > Bei mir läuft es derzeit aber ganz ordentlich. Ich hoffe das bleibt auch bei der nächsten
> > > Programmänderung so....
> > >
> > > Gruß
> > > Franz-Peter
> >
> > Hallo,
> >
> > Vielen Dank für die Info
> > Ich habe gleichmal gegoogelt und unter:
> > Handbuch Atmega
> > gelesen, das die Adressregister 16bit (65Kb)sind und der Flash Wordweise aufgebaut ist. Wenn man dann
> > Bytecode wörtlich nimmt könnte es bei Sprüngen schwierig werden. Wie man das als Endanwender
> > beinflussen kann ist mir noch nicht klar.
> > Ich habe jetzt mal mit 2.31.0.89 experimentiert. So bald ich ein Programmteil weglasse läuft der Rest.
> > Ansonsten kommt: 22000ms Interpreter beendet
> >
> > Viele Grüsse Henry
>    
> Hallo Henry,
> als Endanwender kann man das gar nicht beeinflussen, das muss der Interpreter entsprechend
> verarbeiten. Prinzipiell kann er das auch, es gibt wohl aber ein paar Sonderfälle, wo es evtl. noch
> hakt. PeterS hat da schon einiges gemacht, aber ob es inzwischen völlig fehlerfrei ist ???...
>
> Mit dem Maschinenbefehl 'lpm' kann man schon byteweise auf das Flash zugreifen. Bit0 der Adresse im
> Z-Register wird dabei genutzt, um zwischen Byte 0/1 des adressierten Words im Flash zu unterscheiden.
> Allerdings bleiben dann nur noch 15Bit für die Adressierung des Wortes übrig, und das ist eben die
> besagte 32K-Worte (bzw 64kByte) -Grenze. Um das ganze Flash Byteweise adressieren zu können, gibt es
> beim Mega128 den Befehl elpm, der dann aber 17Bit zur Adressierung benötigt. Diese Spezialität wird
> übrigends in dem von dir verlinkten Dokument unterschlagen - da muss man dann ins Datenblatt von Atmel
> schauen.
> Gruß
> Franz-Peter
>
> P.S. hast Du bei deinem Programm die Überwachung der Array-Grenzen aktiviert? In dem Fall beendet sich
> der Interpreter auch, wenn die Prüfung einen Fehler ergibt. Das hat mir auch schon ein paar graue
> Haare beschert ;-))

Hallo

Danke für genaue Beschreibung des Problems.
Mit der Überwachung Array-Grenzen habe ich experimentiert, ohne Änderung.
Ich habe jetzt mein Steuerprogramm auf Code sparen optimiert, eigentlich nur mehrfach ausgeführten
Code in Unterfunktionen zum mehrfachen Aufruf umgeschrieben 1,5kb eingespart und es funktionieren
beide IDE Versionen (2.13.0.15 und 2.31.0.89). Ich konnte jetzt auch die Rollo-Steuerung realisieren
Bin erstmal erleichtert, aber ich fürchte, ich werde irgendwann wieder an die Grenze stossen.
Bei der neuen IDE Version 2.31.0.89 habe ich Probleme beim Stoppen des Programms im Normalmodus
zum neu laden.
Bei den bisherigen Versionen zog ich nur kurz das USB ab und wieder ran schon konnte ich neu laden
Jetzt kommt beim Abziehen folgende Meldung 2x: Application Error
Exception EInOutError in module CP_IDE.exe at 002D77E5.
Device read error
Anschliessend muss ich Unit suchen. Ich benutze Win 7 64bit und die Unit ist etwas abseits.

Viele Grüsse Henry


    Antwort schreiben


Antworten: