Re: Stacküberlauf, die 2. Kategorie: Programmierung (von Erich - 19.07.2006 15:33) | ||
Als Antwort auf Re: Stacküberlauf, die 2. von André H. - 19.07.2006 14:43 | ||
| ||
> So Erich, > > langsam reichts mir !! > So etwas, wie Netiquette sagt Dir sicher nichts. Lieber André, es mag dir zwar seltsam vorkommen, aber ich kann mich nicht erinnern, hier etwas vorsätzlich böses geschrieben zu haben. > Denn dann würdest Du nicht unzählige neue Threads zum selben Thema aufmachen. Also entschuldige mal, ich habe (bzw. hoffentlich hatte bald) ein Problem mit dem Teil und habe nach- gefragt. Irgendwelche Behauptungen, ich hätte dies und das nicht wirklich probiert, sondern nur so getan als ob, in Kombination mit dem Vorwurf, ich würde irgendwen hier meine Arbeit machen lassen wollen, tun mir ehrlich gesagt ein bisschen weh. Und verrate mir doch bitte mal, ob ich bescheuert bin, aber ich verstehe nicht, dass mir hier auch nur Dinge wie: "überprüf die Motorcontroller" etc. gesagt werden, wo doch schon längst in einem der unzähligen Threads klargestellt wurde, dass von der Seite her alls in Ordnung ist. Und daran kanns wohl nicht liegen, dass die CC2 nicht das abarbeitet, was sie abarbeiten soll. > Deshalb habe ich dieses Posting auch in einen vorhandenen Thread verschoben. soll mir recht sein. > Jetzt können sich ein paar Kunden bei Dir bedanken, da� ihre Bestellungen > heute nichtmehr rausgehen, da ich im Forum posten mu�! Erinnert mich an die Richter, die mein Vater als Schöffe immer nicht leidern konnte: "Eigentlich wollte ich ja Urlaub machen, aber wegen IHNEN" usw. Sei mir bitte nicht noch böser, aber gewisse Dinge hätten sich eher und vor allem schneller klären lassen können. > > Ich habe Dein gemailtes Programm gestern Abend auf eine Unit geladen. > Es lief über Nach auch am Morgen noch einwandfrei ohne irgendwelche �nderungen > der Geschwindigkeit, ohne irgendein Aufhängen oder anderer Dinge. > Hier nochmal Dein Programm: ich kenne es und das quit kann ich mir nun auch noch merken. Bei mir lief es eben nur eine Minute. Deswegen habe ich auch nach der Möglichkeit gefragt, ob meine Unit einen Treffer haben könnte. Und weils weiter unten kommt: ich habe nicht behauptet, dass ich unfehlbar bin. Lediglich, dass der Quellcode stimmen müsste, weil er so noch von einem Forumsmitglied überarbeitet wurde. > > Ich habe nur ein quit 1; nach der Schleife eingefügt, um erkennen zu können, > falls die Schleife verlassen wird, was erwartungsgemä� nicht geschehen ist. Habe ich auch nicht behauptet Das Ding bleibt eindeutig in der SChleife stehen. > �brigens kann man das Programm noch um einiges kompakter und optimierter schreiben. möglich. Es soll nur funktionieren > > Ich glaube Dein Hauptproblem liegt immernoch im Ignorieren sämtlicher Dokumentation. Die Dokumentation ist weiterhin nicht die beste. Es kommt oft vor, dass ich etwas überlese, aber vergleicht man die Dokumentation mit der des darauf befindlichen Chips, fällt einem vom Umfang her eine Kleinigkeit auf. > Prüfe daher bitte einmal, ob Du vielleicht mehrere Softwareversionen der Module, der IDE > und HEX-Dateien gemischt hast. > Denn das wäre der einzige Grund, warum es z.B. zu einem Stackunderflow oder > Stackoverflow kommen könnte, wenn die Einsprungadressen von älteren Modulen > zu neueren HEX-Dateien oder von neueren Modulen zu älteren HEX-Dateien genutzt. > > D.h. in Deinem Fall, da� Du folgende Schritte jetzt vornimmst: > - Deinstalliere die IDE > - Lade die aktuelle IDE mit SP herunter und installieren diese > - Lade nun alle Module herunter, die seit erscheinen des letzten SP erschienen sind > und kopiere diese entsprechend in die Lib-und UserLib-Verzeichnisse > - Lade Dir OSOPT V3.1b1 herunter und lade es mit dem CC2Net.de-Download-Tool in die CC2. > - Lade nun sys0002.hex mit vorherigen Löschen von Segment 3 in die CC2. > > Wenn Du das geschafft hast, reden wir weiter. Jo, das werde ich tun. Ich tats bisher halt nur mit OS 3.0, nachdem sich die Unit nicht mehr flashen lie� > > Was den Stack angeht, so kannst Du hier nichts konfigurieren. > Der komplette restliche RAM, der nicht für Globale Variablen verwendet wird, wird als Stack verwendet. > > Und was Du jetzt mit den Long-Variablen hast, kann ich auch nicht verstehen. > Long-Variablen haben einen 32Bit Bereich. Und hier gibt es keine Probleme. ich habe hier folgenden Test seit bald 2 Stunden problemlos laufen: //------------ thread main //------------ { long i; string s; i = 0; lcdext.init(); loop { s = ""; str.putint(s, i); lcdext.print(s); i = i + 1; lcdext.clear(); } } Das Teil zählt von -32768 bis 32767, obwohl als long deklariert. > Du mu�t nur eine Kleinigkeit beachten, wenn Du Integer und Long-Berechnungen mischt. > Aber das steht auch in den FAQ. > > Und, um es nochmal klipp und klar zu sagen: > Die einzigen Bugs, die die CC2 derzeit hat, liegen im Bereich von HWCOM > beim Empfang sehr gro�er Datenmengen an einem Stück. > Aber selbst das tritt nur sehr selten in Einzelfällen auf, so da� ich das nur sehr schwer reproduzieren kann. > Ansonsten sind keinerlei anderen Bugs bekannt. > Meinst Du nicht, da� solche Dinge, die Du beschreibst, nicht auch anderen auffallen müssten ?? > Jedoch gab es in den letzten 6 Jahren keine einzige solche Meldung. > Dabei sei noch angemerkt, da� viele Programme grö�er 50kB VM-Code sind. > Ich habe auch einige eigene und auch Kundenprojekte, die sogar über 100kB VM-Code, > unzähle Threads haben und sehr viel RAM benötigen. > > Aber solange Du so voreingenommen auftrittst, da� "Du unfehlbar bist und es > nur am System/Controller liegen kann", kann Dir kein Mensch mehr helfen. Also ich habe deine Anweisungen so gut es geht befolgt. Mehr kann ich nicht machen. Und solche Vorwürfe führe ich höchstens auf ungeschickte Formulierungen meinerseits zurück - das einzige, wofür ich mich entschuldigen möchte. Aber ich habe keine bösen Absichten. > > Und nochetwas, wei�t Du warum ich in meiner Signatur stehen habe, da� ich > auf keine Mails von Forenpostings antworte ? > Denn sonst hätte ich den gesamten Tag nichts anderes mehr zu tuen, au�er > auf Mails zu antworten.. ja und dann müssten die Kunden warten - ich wei�, ich wei�. > > > Also, bevor noch weitere Postings von Dir kommen, die angebliche Bugs der CC2 > zeigen sollen, die einfach nicht existieren, prüfe ersteinmal alles andere. und schon wieder wird so getan, als würde ich meine Arbeit von anderen erledigen lassen wollen. > Denn ich arbeite tagtäglich mit der CC2, habe bei vielen Kundenprojekten mitgewirkt > und betreue auch einiges an Software. > Meinst Du nicht, da� ein solcher nicht existierender Bug, wie Du ihn beschreibst, > mir irgendwie in den letzten Jahren aufgefallen wäre ?? drum frag ich ja, wo das Problem liegt. > André > > > > > Also nachdem mir ein Mikrocontrollerfachmann den Tipp gegeben hatte, alle unnötigen Variablen > > (also die, die eigentlich der Lesbarkeit dienen und für den gleichen Wert an mehreren Stellen sorgen) > > rauszuschmei�en, weil alles auf einen Stack-�berlauf hindeutet - vor allem, dass das Programm > > weiterkommt, seit ich das gemacht habe, bestätigt dies. Da es sich um ein multithreading-System > > handelt, ist jedem thread ja eine default-Grö�e zugeordnet. Ich habe sinnigerweise aber nur einen > > thread und von daher wäre es schön, wenn mir jemand sagen könnte, wie ich die "stack size" > > erhöhe. > > > > In meinem kleinen Testprogramm wird die loop-Routine ja immer langsamer und hängt sich zum > > Schluss auf: > > auch ein Zeichen. > > Da dort aber nicht so viele Variablen vorkommen, führe ich das auf einen Bug zurück. > > Die Pulsereien gehen einzeln. Allerdings geht das irgendwann schief, sobald das Display dazukommt. > > Im Moment bin ich am Testen: ich lasse eine long-Variable hochzählen und ausgeben. > > Interessant ist, dass long bei CC2 von -32768 bis 32767 geht :) So ein Quatsch ;) Und was ist hier bitte irgendwie auch nur annähernd böse geschrieben? Ich verstehe es nicht!??!? | ||
Antwort schreiben Antworten: |