Ich hab auf dem Tiny13 ein kleines Programm entwickelt, welches Steuerimpulse eines Fernsteuer-Empfängers auswertet und damit zwei weitere Servo-Ausgänge anbietet. Das läuft auch alles wunderbar. Nun habe während der Zeit nach dem Einschalten eine Funktion eingebaut, die eine Messung der Eingangs-Impulse ermöglicht. Diese Wege sollen im EEPROM gespeichert werden,dazu habe ich das Atomic-Beispiel aus dem Datenblatt benutzt, Programmiersprache ist Assembler. Auch die Werte werden problemlos in den ersten vier Bytes des EEPROMS abgelegt. Aber dann läuft das Programm so, als sei das Timing total verstellt. Die Servoausgänge bewegen die Servos in "komische Stellungen", das Eingangssignal wird auch nicht mehr korrekt ausgewertet. Starte ich den Prozessor neu, ohne erneut eine Einmessung durchzuführen, so werden die Daten aus dem EEPROM gelesen, das Programm läuft dann völlig korrekt. Der Prozessor läuft mit knappen 10 MHz (interner Oszillator), der Teiler ist (manuell im Programm) auf 1 gesetzt. Habe ich was im Handbuch überlesen? Muss der Teiler vor dem EEPROM-Schreiben auf 8 gesetzt werden? Interrupts sind während des Schreibens deaktiviert. Wenn alle Stricke reißen und das nicht zu lösen ist, so würde ich gerne einen Reset ausführen. Macht man das am besten über den Watchdog-Counter oder gibt es eine einfachere Möglichkeit? Danke für Eure Tipps...
Es ist immer wieder prickelnd, wie jemand krampfhaft versucht, das Zeigen von Code zu vermeiden. Code läßt sich nicht beschreiben, zumindest nicht, wenn ein Fehler zu suchen ist. Da muß der exakte, vollständige, ohne Warnungen compilierbare Code her, sonst ist das witzlos. Narürlich ist eine zusätzliche Beschreibung immer gut. Daran kann man oft erst erkennen, was der Programmierer eigentlich will. Am besten ist es natürlich, wenn das gleich als Kommentar im Source steht (Funktionsheader usw.). Dann steigt der Programmierer auch ein Jahr später durch seinen eigenen Code durch. Kommentare sind nicht für andere, sondern vor allem für einen selbst! Peter
Also, der Codes ist nix dolles, nix, was mich Reich macht. Ich halte es ganz einfach für diese Grundsätzliche Anfrage (Tiny 13, EEPROM-Schreiben, danach Timing verhunzt) für Unsinn, Code einzufügen. Der EEPROM-Schreib-Befehl ist das Beispiel aus dem Datenblatt, wird das EEPROM nach dem Messen nicht geschrieben, so läuft alles. Also ist ein Fehler im Code nahezu auszuschließen. Es muss um ein Grundsätzliches Problem gehen, vielleicht ist auch der Tiny kaputt, muss ich noch testen. Das einzig komosche ist, dass der SBIC-Befehl am Anfang (der auf den Abschluss eines evtl. noch stattfindenden EEPROM-Vorgangs wartet) im AVR-Studio in Großbuchstaben geschrieben werden muss, der Befehl wird mit kleinen Buchstaben nicht erkannt, alle anderen Befehle habe ich mit Kleinbuchstaben schreiben können.
Hartmut Wagener schrieb: Der Killozap, wie schön. Huhu! > Also ist ein > Fehler im Code nahezu auszuschließen. Es muss um ein Grundsätzliches > Problem gehen, vielleicht ist auch der Tiny kaputt, muss ich noch > testen. Meist ist es leider doch ein Fehler im Code. Eigentlich praktisch immer.
Hartmut Wagener schrieb: > Also ist ein > Fehler im Code nahezu auszuschließen. Wieviel Jahre programmierst Du schon? Je länger man programmiert, umso vorsichtiger wird man mit solchen Behauptungen. Der Grund ist, sie waren immer falsch. Ich programmiere lieber in C, dann hat man schonmal nen Haufen Trivialfehler ausgeschlossen. Fehler sind dann fast nur rein logische, d.h. man schreibt nicht das hin, was man meint. Peter
Na, Assembler schreib ich seit 1980 ... Cyblord, kennen wir uns vom RC-Line-Forum?
Hi >Das einzig komosche ist, dass der SBIC-Befehl am Anfang (der auf den >Abschluss eines evtl. noch stattfindenden EEPROM-Vorgangs wartet) im >AVR-Studio in Großbuchstaben geschrieben werden muss, der Befehl wird >mit kleinen Buchstaben nicht erkannt, alle anderen Befehle habe ich mit >Kleinbuchstaben schreiben können. Halte ich für ein Gerücht. MfG Spess
spess53 schrieb: > Hi > >>Das einzig komosche ist, dass der SBIC-Befehl am Anfang (der auf den >>Abschluss eines evtl. noch stattfindenden EEPROM-Vorgangs wartet) im >>AVR-Studio in Großbuchstaben geschrieben werden muss, der Befehl wird >>mit kleinen Buchstaben nicht erkannt, alle anderen Befehle habe ich mit >>Kleinbuchstaben schreiben können. > > Halte ich für ein Gerücht. Der Editor des AVR-Studios zeigt bekannte Befehle farblich markiert an. Beim sbic-Befehl macht er das nur, wenn er groß geschrieben wird.
Hartmut Wagener schrieb: > Na, Assembler schreib ich seit 1980 ... > > Cyblord, kennen wir uns vom RC-Line-Forum? Ja woher denn sonst?
Ich wette auf einen Fehler im Programm :-)
So, hier ist das Programm angehängt. Die EEPROM-Write-Routine ist hier in den Sourcetextes eingefügt, aber auch als Sub-Routine passiert das selbe. Die EEPROM-Write-Routine wird innerhalb eines Timer-Interrupts aufgerufen, ich hab auch schon versucht, das außerhalb zu machen, aber ohne Erfolg, da lief gar nix mehr.
Peter Dannegger schrieb: > Es ist immer wieder prickelnd, wie jemand krampfhaft versucht, das > Zeigen von Code zu vermeiden. Nicht nur das. Auch der stets aussagekräftig gewählte Titel des Beitrags ist ehr als Erlebnisbericht zu verstehen: der Prozessor ist danach "von der Rolle". [Versteckte Beleidigung gelöscht]
Das mit dem SBIC ist nur bei Dir so, aber ich vermisse auch die .include Datei. Welche hast Du genommen. Wenn ich das richtig sehe, läuft das ganze Programm im Timer-Interrupt, der alle 25µs aufgerufen wird. Da bleibt nicht viel Zeit, auch noch das EEprom zu beschreiben. Ausserhalb der IR Routine kann gar nichts funktionieren, da das Status Register nicht gesichert wird. Warum muss der Interrupt so schnell hintereinander aufgerufen werden? Das macht keinen Sinn, wenn die IR-Routine viel, viel, aber auch ganz viel, länger ist. Für was brauchst Du denn den Timer? Gruss HerrMueller
Also, der EEPROM-Write läuft innerhalb des Timer-Interrupts. Wenn ich das recht verstanden habe, so wird die Behandlung von Interrupts automatisch unterbunden, sofern eine Int5errupt-Routine bearbeitet wird. Also ist es völlig egal, wie oft da was aufgerufen wird, da es keine Rolle spielt, wenn die Interrupt-Behandlung mal länger dauert. Also kann auch ein EEPROM beschrieben werden, da erst nach dem reti die Interrupts wieder aktiviert werden. Oder sehe ich das falsch?
Ach, übrigens, das mit dem SBIC bzw. sbic ist auf meinem Rechner hier und auf meinem Notebook so, beide aber mit selbem Release installiert. Also bei mir zwei mal ... Muss wohl mal ne Fehlermeldung rausgeben.
"Wenn ich das recht verstanden habe, so wird die Behandlung von Interrupts automatisch unterbunden, sofern eine Int5errupt-Routine bearbeitet wird." Nö, nested Interrupt geht auch.
Hartmut Wagener schrieb: > Assembler schreib ich seit 1980 ... So schaut das aber nicht aus, eigentlich eher grausam. Problem dürfte sein, dass bei der Verzögerung das EEprom zu schreiben, der 8Bit-Timer während des Schreibens überläuft. Daraufhin ist TOV0 bereits wieder gesetzt, ohne dass die ISR zu Ende ist. Das hat zur Folge, dass die ISR sofort nach RETI wieder neu ausgeführt wird. Vor dem RETI wird aber der Timer vorgeladen und läuft nach 18 Takten über. Zum Zeitpunkt des erneuten Zählerüberlaufs wird die ISR bereits erneut ausgeführt, TOV0 wird somit immer wieder innerhalb der ISR gesetzt und die ISR's folgen ohne Verzögerung. Der Timer nimmt dann keine andere Funktion mehr außer der einer Endlosschleife wahr. Ein Löschen des TOV0 vor dem RETI dürfte Wunder wirken.
MWS schrieb: > Hartmut Wagener schrieb: >> Assembler schreib ich seit 1980 ... > > So schaut das aber nicht aus, eigentlich eher grausam. Nun, sind wir hier bei nem Schönheitswettbewerb? Solche Kommentare sind verzichtbar... Ich hab hier im Forum schon mal vor einigen Jahren eine Frage gestellt bzgl. der Möglichkeiten der Ein/Ausgänge der Chips, da wurde mir mitgeteilt, ich sollte doch die Datenblätter konsultieren. Heute habe ich es ausprobiert und weiß endlich mehr. Soll das hier ein Forum sein, in dem Fragen zur Mikrocontroller-Programmierung gestellt werden können oder ist das ein Form, in dem Opfer gesucht werden, um abzulästern? Eine Beleidigung wurde ja schon auf meine Meldung gelöscht, sind die Elektronik-Programmierer nur so drauf oder was?
Heinz schrieb: > "Wenn ich das recht verstanden habe, so wird die Behandlung von > Interrupts automatisch unterbunden, sofern eine Int5errupt-Routine > bearbeitet wird." > Nö, nested Interrupt geht auch. Seite 13 Atiny 13 - "Wenn ein Interrtupt ausgeführt wird, so werden alle weiteren Interrupts unterbunden. Es ist aber möglich, verschachtelte Interrupts zu ermöglichen." Ich lasse hier jetzt mal alle Kommentare sein ...
Hartmut Wagener schrieb: > Soll das hier ein Forum sein, in dem Fragen zur > Mikrocontroller-Programmierung gestellt werden können oder ist das ein > Form, in dem Opfer gesucht werden, um abzulästern? Eine Beleidigung > wurde ja schon auf meine Meldung gelöscht, sind die > Elektronik-Programmierer nur so drauf oder was? Ist ja nicht so das schon versucht wurde dir zu helfen. Aber du hast dann zuerst mal hervorgehoben das du ja schon seit 32 Jahren ASM code schreibst und indirekt damit gesagt das damit alles gut ist und Kritiken am Code lächerlich sind. Und dann lieferst du nen Code der quasi geguttenbergt ist und regst dich darüber auf das dich dann keiner mehr so richtig ernst nimmt? Mann, Mann, Mann...
Nun, wenn ich alös Gast Namens RTL-II hier so eine Antwort posten würde, dann würde ich auch "Mann Mann Mann" schreben. Wie arm ist das denn? Und meinen Code gegutenbergt zu bezeichnen, das ist die Höhe. Was für ein Dünnpfiff ...
Hartmut Wagener schrieb: > Und meinen Code gegutenbergt zu bezeichnen, das ist die Höhe. Was für > ein Dünnpfiff ... Niemand macht solche Kommentare in ASM: /* Ausgabe-Programmteil */ ..und jetzt besser mal Dampf ablassen bevor bei dir noch mehr Tippfehler entstehen.
Hartmut, in der Tat sind die Sitten hier etwas rauher, das kannst du mit rcline aber mal gar nicht vergleichen... Trotzdem stimmt die Kompetenz meistens und man bekommt auf fast alle Fragen eine Antwort. Aber du musst dir halt auch was sagen lassen. Auch zu deinem Code denn darin steckt nunmal das Problem. > Heinz schrieb: >> "Wenn ich das recht verstanden habe, so wird die Behandlung von >> Interrupts automatisch unterbunden, sofern eine Int5errupt-Routine >> bearbeitet wird." >> Nö, nested Interrupt geht auch. > > Seite 13 Atiny 13 - > "Wenn ein Interrtupt ausgeführt wird, so werden alle weiteren Interrupts > unterbunden. Es ist aber möglich, verschachtelte Interrupts zu > ermöglichen." > > Ich lasse hier jetzt mal alle Kommentare sein ... Es stimmt beides. Beim Einstieg in eine ISR wird das I-Bit automatisch gelöscht. ABER man kann es in der ISR auch sofort wieder aktivieren und dann sind nested interrupts möglich. gruß cyblord
Nun, aber da hatte ich halt recht, es ist drissegal wie lange ich in der Interrupt-Routine brauche, wenn ich nicht selbst die Interrupts absichtlich wieder aktiviere, so geht mich das alls nix an ... Und ich muss mich vor Selbstdarstellern hier in Acht nehmen, die meist als Gäste posten ... :) Na, da kommt ja Freude auf ... :)
Na Hartmut, unterbunden hört sich halt nach nicht möglich an. Das stimmt ja nicht. Vorrübergehend deaktiviert wäre richtig.
Hartmut Wagener schrieb: > Nun, aber da hatte ich halt recht, es ist drissegal wie lange ich in der > Interrupt-Routine brauche, wenn ich nicht selbst die Interrupts > absichtlich wieder aktiviere, so geht mich das alls nix an ... Aber nur fast. MWS hat da ja was zu geschrieben. Wenn innerhalb der ISR ein weiterer Interrupt erfolgt, so wird zwar nicht gesprungen, aber das zugehörige Flag wird trotzdem gesetzt. Und wenn nun die ISR zuende ist, wird sofort nach dem reti wieder hinheingesprungen. Und das widerholt sich endlos. Ich weiß nicht ob dies die Ursache für dein Problem ist, aber es ist ganz sicher kein guter Programmierstil und führt fast immer zu einem nicht gewollten Programmverhalten. Du könntest am Ende der ISR das Flag auch manuell löschen. Dann wird aufjedenfall erst wieder beim nächsten Interrupt gesprungen. Aber wie gesagt, schön ist anders. gruß cyblord
RTL II schrieb: > Niemand macht solche Kommentare in ASM: > > /* Ausgabe-Programmteil */ > > ..und jetzt besser mal Dampf ablassen bevor bei dir noch mehr Tippfehler > entstehen. Was soll denn der Kack? Niemand schreibt sowas in ASM? Bist du Moses oder was? So was blödes hab ich lange nicht gelesen ... Honkiger geht es wohl kaum noch ...
Schade um die Zeit, in der ich Dein Programm angeschaut habe. Vielleicht versuchst Du Dein Glück lieber woanders.
Na, mit 32 Jahren ASM Erfahrung und einem Programm, dass nach menschlichem Ermessen als fehlerfrei angesehen werden kann ist das Glück vielleicht dein bestes Pferd :D
@Herrmueller: Wieso Schade? Findest du es also in Ordnung, dass Gäste hier Kommentare über Programmierstil abgeben und dabei den Kontakt zur Realität verlieren? Ich lasse mich gerne kritisieren, aber bitte nicht so, dass jemand sein Ego aufbessern will... Das ist absolut unterste Kanone, geht gar nicht. ...
Oh, noch mehr Gäste, die die Finger nicht still halten können ...
Ich wärme mich nur am late night flame.
Hartmut Wagener schrieb: > ch lasse mich gerne kritisieren, aber bitte nicht so, dass jemand sein > Ego aufbessern will... Das ist absolut unterste Kanone, geht gar nicht. Hmm, aus irgendeinem Grund hat ja gerade der OP damit angefangen.
Hartmut Wagener schrieb: > Also, der Codes ist nix dolles, da hast Du recht >Wenn alle Stricke reißen und das nicht zu lösen ist, so würde ich gerne >einen Reset ausführen. Schlies einfach am Resetpin ein Signal an das alle paar ms ein Reset auslöst. die Lösung ist gut genug für dich. >Na, Assembler schreib ich seit 1980 ... ... und jetzt dein zweiter Versuch?
Hartmut Wagener schrieb: > Oh, noch mehr Gäste, die die Finger nicht still halten können ... ....wie sollte man auch, bei so einer zart besaiteten und zu gleich von sich selbst so überzeugten seele wie dir ;-) nimm nicht immer alles so persönlich, vor allem solltest du als "reifer erwachsener" mit 32 jahren programmiererfahrung über solchen kommentaren stehen und diese müde belächeln können. es ist schon klar, das nicht immer der code ein glanzstück ist, gerade in der entwicklungsphase. bis auf wenige ausnahmen möchte ich den code von manchen pöplern gern mal sehen, der wird garantiert nicht besser sein... so,nun zurück zum thema.....bist du inzwischen weiter gekommen? hast du dich nicht evtl. doch in der interruptsache vertan? irgendein register nicht gerettet,wodurch der rücksprung undefiniert erfolgt?
Hartmut Wagener schrieb: > Nun, sind wir hier bei nem Schönheitswettbewerb? Wenn es um vermutete Programmfehler handelt, dann gehts oft eben nicht anders, als dass andere Leute den Code betrachten. Und da kommt die Lesbarkeit des Codes ins Spiel. Allein schon ganz trivial erscheinende Dinge können da schon eine Rolle spielen, beispielsweise deutliche Trennlinien zwischen Hauptprogramm und den einzelnen Unterprogrammen und Interrupt-Handlern. Und wenn man dann schon einen recht grossen optisch schwach strukturierten Interrupt-Handler hat, in dem sich das ganze Programm befindet, dann empfiehlt es sich, die Spaghettis ansatzweise zu entwirren, indem man den Namen von Labels der damit verbundenen Bedeutung oder zumindest der Bedeutung der jeweiligen Programmsektion zuzuordnet. Statt sie global durchzunummerieren. Natürlich hast du das Programm nicht für andere geschrieben, sondern für dich. Es könnte also egal sein. Bis zu dem Punkt, wo man im Forum landet und "gezwungen wird" den Code rauszurücken. Dann muss man damit leben, dass andere sich drüber äussern. Mit der höflicheren Variante, sich gleich abzuwenden, ist dir nämlich auch nicht gedient.
"Schönheit" ist vielleicht ein etwas merkwüdiger Begriff im Kontext "Programmieren" - führt aber zu lesbarem Code wo es Spaß macht sich damit zu befassen. So überfliege ich das und verliere die Lust daran. Wenn sich der Programmautor so wenig Mühe gibt ...
Hartmut Wagener schrieb: > Form, in dem Opfer gesucht werden, um abzulästern? Eine Beleidigung > wurde ja schon auf meine Meldung gelöscht, sind die > Elektronik-Programmierer nur so drauf oder was? Wer vorgibt 32 Jahre Assembler zu schreiben und z.B. derartige nichtssagende Labels und unstrukturierten Code schreibt, muss sich das sagen lassen. Es als Beleidigung zu betrachten ist persönliche Sichtweise, erst mal war's nur eine Feststellung und sonst nichts. Hast Du wenigstens, nachdem Du die Klappe bis an die Kiefergelenke aufgerissen hast, den eigentlichen Inhalt meiner Nachricht auf dem Controller ausprobiert ?
Hi >so,nun zurück zum thema.....bist du inzwischen weiter gekommen? >hast du dich nicht evtl. doch in der interruptsache vertan? >irgendein register nicht gerettet,wodurch der rücksprung undefiniert >erfolgt? Sein oben gepostetes Programm besteht nur aus einem Interrupt mit allen Konsequenzen für mögliche Erweiterunhgen. Eigentlich stäuben sich bei dem 'Programm' bei mir die Nackenhaare. Die angesagten mehr als 30 Jahre Programmieren sind anscheinend nicht sonderlich mit Erfahrungsgewinn begleitet gewesen zu sein. MfG Spess
Hartmut Wagener schrieb: > Na, Assembler schreib ich seit 1980 ... das heißt nicht, daß er das 32 Jahre lang gemacht hat. Auch nicht, daß er sich mit diesem Prozessor beschäftigt hat ...
Hartmut Wagener schrieb: > Nun, aber da hatte ich halt recht, es ist drissegal wie lange ich in der > Interrupt-Routine brauche, wenn ich nicht selbst die Interrupts > absichtlich wieder aktiviere, so geht mich das alls nix an ... So ein Code ist aber Murks. Die Wahrscheinlichkeit, damit irgendwelche komischen kaum behebbaren Timingprobleme zu bekommen, ist extrem hoch. Und die hast du ja auch. Da du dir aber zu dem Thema nix sagen läßt und die Erklärung mehrfahch ignoriert hast wirst du wohl mit den Fehlern leben müssen. > Und ich muss mich vor Selbstdarstellern hier in Acht nehmen, die meist > als Gäste posten ... :) Wer dir seine ehrliche Meinung zu dem Programm sagt, ist deshalb noch nicht ein Selbstdarsteller. Der bist eher du, wenn du behauptest, seit 32 Jahren Assembler zu programmieren, um damit zu belegen, daß dein Programm ja ganz toll sein muß und über jeglicher Kritik steht. Hartmut Wagener schrieb: > Was soll denn der Kack? Niemand schreibt sowas in ASM? Bist du Moses > oder was? So was blödes hab ich lange nicht gelesen ... > > Honkiger geht es wohl kaum noch ... Ach, und du regst dich darüber auf, wenn andere dich beleidigen?
Zur benutzten Include-Datei: Die braucht man beim aktuellen AVR-Studio nicht, wenn man den Prozessor dort auswählt, die wird dann automatisch eingebunden. Ich hatte versucht, die EEPROM-Schreibroutine ins "Hauptprogramm" zu verlagern und über ein Flag mitzuteilen, wann geschrieben werden soll. Das hat aber gar nicht funktioniert, daher habe ich die Routine wieder ins Interrupt-Programm gelegt.
Rolf Magnus schrieb: > Wer dir seine ehrliche Meinung zu dem Programm sagt, ist deshalb noch > nicht ein Selbstdarsteller. Der bist eher du, wenn du behauptest, seit > 32 Jahren Assembler zu programmieren, um damit zu belegen, daß dein > Programm ja ganz toll sein muß und über jeglicher Kritik steht. Nun, Selbstdarsteller wurde von mir benutzt, als hier jemand "gegutenbergter Code" geschrieben hat. Die "Behauptung", seit 32 Jahren Assembler zu programmieren hab ich nur gemacht, weil jemand danach gefragt hat. Nirgends hab ich geschrieben, dass mein Programm über jeder Kritik steht. Und es gibt keinerlei Gründe, die eine Beleidigung auch nur im entferntesten erlauben würden MWS schrieb: > Hast Du wenigstens, nachdem Du die Klappe bis an die Kiefergelenke > aufgerissen hast, den eigentlichen Inhalt meiner Nachricht auf dem > Controller ausprobiert ? Nein, hab ich nicht, ist Sonntag ... Auch habe ich meine Klappe nicht bis an die Kiefergelenke aufgerissen, wie kommst du zu solchen Vermutungen? :)
A. K. schrieb: > Hartmut Wagener schrieb: > >> Nun, sind wir hier bei nem Schönheitswettbewerb? > > Wenn es um vermutete Programmfehler handelt, dann gehts oft eben nicht > anders, als dass andere Leute den Code betrachten. Und da kommt die > Lesbarkeit des Codes ins Spiel. > > Allein schon ganz trivial erscheinende Dinge können da schon eine Rolle > spielen, beispielsweise deutliche Trennlinien zwischen Hauptprogramm und > den einzelnen Unterprogrammen und Interrupt-Handlern. > > Und wenn man dann schon einen recht grossen optisch schwach > strukturierten Interrupt-Handler hat, in dem sich das ganze Programm > befindet, dann empfiehlt es sich, die Spaghettis ansatzweise zu > entwirren, indem man den Namen von Labels der damit verbundenen > Bedeutung oder zumindest der Bedeutung der jeweiligen Programmsektion > zuzuordnet. Statt sie global durchzunummerieren. > > Natürlich hast du das Programm nicht für andere geschrieben, sondern für > dich. Es könnte also egal sein. Bis zu dem Punkt, wo man im Forum landet > und "gezwungen wird" den Code rauszurücken. Dann muss man damit leben, > dass andere sich drüber äussern. Mit der höflicheren Variante, sich > gleich abzuwenden, ist dir nämlich auch nicht gedient. Ich bin mir durchaus bewusst, dass eine derartige Labelnamen-Vergabe nicht optimal ist, aber ein derartiges Programm wächst halt. Um spätere Verschönerung kann man sich immer noch kümmern. Bei der Beantwortung einer Frage ist es dann halt ein Unterschied, ob jemand schreibt "Grausam" und Vermutungen über die Intelligenz des Programmierers anstellt oder ob man höflich darauf hinweist, dass die Namensgebung nicht optimal ist. Menschen, die halt provozierend schreiben ("geguttenbergt" usw.), das sind halt wirklich Selbstdarsteller, die meinen, ihr Ego durch solche Schreiberei aufbauen zu müssen. Auch wenn sie Tipps geben, die vielleicht zielführend sein könnten, sie machen das alles kaputt, da sie herablassend und abwertend schreiben. Vermutlich ist aber der Samstag-Abend die schlechteste Zeit, um eine Frage in diesem Forum zu stellen... Danke jedenfalls für deine Antwort, die keinerlei unnötige Polemik enthält.
Hartmut Wagener schrieb: > Bei der Beantwortung einer Frage ist es dann halt ein Unterschied, ob > jemand schreibt "Grausam" und Vermutungen über die Intelligenz des > Programmierers anstellt ... Im Unterschied zu defekten Schaltkreisen oder nicht funktionabler Software können Menschen "nicht nicht-kommunizieren" (vgl. Watzlawick, P.; https://de.wikipedia.org/wiki/Watzlawick#.E2.80.9EMan_kann_nicht_nicht_kommunizieren.21.E2.80.9C). Dieser Hauptsatz menschlicher Kommunikation sollten in erster Linie diejenigen beachten, die einleitend ein Thema eröffnen (TO). Was nun folgt ist zunächst eine Reaktion darauf. Dabei hat die Wahl der Überschrift eine gestaltende Wirkung. Wenn nun wie z.B. bei diesem Thema bei einem Mikroprozessor die Zuschreibung "von der Rolle" gewählt wird, darf man sich nicht wundern, wenn dies gerne metaphorisch aufgenommen und weiterverwendet wird. Man kann es Foristen nicht verübeln, wenn sie dies als dankbare Beiträge zur Bespaßung aufgreifen - nicht nur am Samstag Abend, sondern für alle Zeit solange der Beitrag lesbar bleibt.
Mit Assembler mache ich kaum noch was, spess53 ist hier der King darin. Du solltest Deinem Programm eine Struktur verpassen, Spaghetti-Codestyle ist nicht der Bringer. Da sehen andere kaum durch und Du nach einiger Zeit auch nicht mehr. Die Spaghetti-Code Phase sollte man eigentlich nach spätestens 2 Jahren Programmiererfahrung hinter sich gelassen haben. Schreibe für jede Aufgabe eine Funktion, die Du aufrufst. Und falls Du Angst hast, die Call+Ret kosten zuviel Zeit, schreibe sie als Funktionsmacro. Vermutlich ist in Deinem Programm eine Statemaschine versteckt, die durch die langen EEPROM-Schreibzeiten aus dem Tritt kommt. Eine Statemaschine kann aus dem Tritt kommen, daher sollte sie einen Synchronisationsmechanismus haben, um sich selber wieder einzufangen. Sie muß also so programmiert sein, daß sie aus jedem möglichen Zustand in einen gültigen Zustand zurück findet. Für das EEPROM Schreiben mache eine Funktion. Diese sollte das Byte erst prüfen, ob überhaupt ein Schreiben notwendig ist. Um die Schreibzeit einzusparen, nimm den EEPROM-Interrupt oder mache es abweisend. D.h. wenn das letzte Schreiben noch nicht fertig ist, mache was anderes. Du kannst es auch in der Mainloop machen. Peter
Hartmut Wagener schrieb: > Auch habe ich meine Klappe nicht > bis an die Kiefergelenke aufgerissen, wie kommst du zu solchen > Vermutungen? :) Eine kleine Auswahl: > in dem Opfer gesucht werden, um abzulästern? > gegutenbergt zu bezeichnen, das ist die Höhe. Was für > ein Dünnpfiff > Und ich muss mich vor Selbstdarstellern hier in Acht nehmen, die meist > als Gäste posten ... :) > Was soll denn der Kack? Niemand schreibt sowas in ASM? Bist du Moses > oder was? So was blödes hab ich lange nicht gelesen ... > Honkiger geht es wohl kaum noch ... > Bei der Beantwortung einer Frage ist es dann halt ein Unterschied, ob > jemand schreibt "Grausam" und Vermutungen über die Intelligenz des Und eine Vermutung über die Intelligenz des Programmierers hab' ich eben nicht angestellt. Man könnte sagen, ich habe die genannte ASM-Erfahrung seit 1980 hinterfragt, den Rest hast Du hinein interpretiert. Ansonsten hatte ich mir zumindest die Mühe gemacht den Fehler in Deinem schwer zu lesenden Quellcode zu erkennen und lieferte Dir einen Hinweis. Ob's DER Hinweis ist, wissen wir, wenn Du das SBI TIFR, TOV0 eingebaut hast.
Jetzt mal wieder on-topic hier: Hast du dich jetzt mal der problematischen Interruptsache angenommen? Wurde dadurch irgendwas besser?
Ich hab im Moment den Progger nicht am Start geht erst wieder morgen früh, die Familie will auch mal was von einem haben ... Ich würde die EEPROM-Routine viel lieber aus dem Interrupt-Bereich herausholen, aber das hatte beim ersten Versuch überhaupt nicht geklappt. Schaun wir morgen mal weiter ...
MWS schrieb: > Hartmut Wagener schrieb: >> Auch habe ich meine Klappe nicht >> bis an die Kiefergelenke aufgerissen, wie kommst du zu solchen >> ellt. Man könnte sagen, ich habe die genannte ASM-Erfahrung > seit 1980 hinterfragt, den Rest hast Du hinein interpretiert. > > Ansonsten hatte ich mir zumindest die Mühe gemacht den Fehler in Deinem > schwer zu lesenden Quellcode zu erkennen und lieferte Dir einen Hinweis. > Ob's DER Hinweis ist, wissen wir, wenn Du das SBI TIFR, TOV0 eingebaut > hast. Vergebene Liebesmüh, der Code-Stil ist gruselig und daran erkennt man zumeist auch das entsprechende Logik-Design. Trifft hier beides zu.
Bernd schrieb: > Vergebene Liebesmüh, der Code-Stil ist gruselig und daran erkennt man > zumeist auch das entsprechende Logik-Design. Trifft hier beides zu Bla bläh blubber fasel ...
MWS schrieb: > Man könnte sagen, ich habe die genannte ASM-Erfahrung > seit 1980 hinterfragt, den Rest hast Du hinein interpretiert. Nun, das kann man sehen wie man will. Wenn Du meinst, dass es zielführend ist, Worte wie "grausam" in Posts zu verwenden, dann ist das Deine Sache. Ich habe jedenfalls diesen Post am Anfang gar nicht weiter durchgelesen, denn warum sollte ich mir etwas durchlesen, wenn derartige unangebrachte Sprache verwendet wird? Ist dann zwar nett, dass du dir denn Code durchgelesen hast, aber nicht nur ich werde derart reagieren, wenn die Netiquette nicht eingehalten wird. Ein kleines, winzig kleines Smiley nach dem Grausam hätte alles verändert ...
So, Problem ist gelöst: Ich habe, nachdem ich das Programm auf dem Chip kaufen hatte, den Debugger/Simulator kaum noch angefasst. Die EEPROM-Routine hatte ich versucht, aus dem Interrupt-Teil herauszuholen über ein FLag, welches mitteilt, wann ein EEPROM-Write erwünscht ist. Im Programm hatte ich dan in der EEPROM-Write-Routine absichtlich den SEI-Befehl ausgeklammert, um festzustellen, ob die Subroutine aufgerufen wird, obwohl eigentlich nicht gespeichert werden sollte (Gespeichert werden soll nur, wenn man innerhalt ber ersten fünf Sekunden den Knüppel des Fernsteuer-Senders bewegt). Und siehe da, das Teil blieb hängen. Nun habe ich das Programm so im Debugger durchlaufen lassen und war erstaunt dass auch hier ein Aufruf der EEPROM-Routine erfolgte. Langsames Abbarbeiten der einzelnen Schritte zeigte dann das Problem auf: Die Flags wurden während der Abfrage des Write-Flags durch die Interrupt-Routine verändert, so dass ein Aufruf stattfand, obwohl das Register des Write-Flagsnoch den Wert 0 hatte. Daher habe ich nun am Anfang der Interrupt-Routine das SREG-Register auf den Stack gesichert udn am Ende wieder hergestellt, und siehe da, das Programm läuft wie die Wutz. Der Aufruf des EEPROM-Write aus der Interrupt-Routine kann noch andere Problemchen gemacht haben, die ich aber ohne Stimulis im Debuger schlecht überprüfen kann.
Na geht doch. Gratuliere. Solche Fehler werden bei einer sauberen Planung und Realisation von Anfang an vermeidbar. Leicht.
Ich betreibe das als Hobby, daher kann ich mir den Aha-Faktor erlauben, das passiert mir auch nicht noch ein zweites mal ...
Hartmut Wagener schrieb: > Ich betreibe das als Hobby, daher kann ich mir den Aha-Faktor erlauben, > das passiert mir auch nicht noch ein zweites mal ... Klar. Aber das nächste Mal weißt Du's ;) In 42 Jahren geht's dann weiter ? :-)))
Hartmut Wagener schrieb: > Ich habe jedenfalls diesen Post am Anfang gar nicht weiter > durchgelesen, denn warum sollte ich mir etwas durchlesen, wenn derartige > unangebrachte Sprache verwendet wird? Das war nicht unangebracht, sondern die Wahrheit. Und unabhängig davon, ob mir des Anderen Sprache gefällt oder nicht, würde ich immer auf den Inhalt der Nachricht achten. > Ist dann zwar nett, dass du dir denn Code durchgelesen hast, aber nicht > nur ich werde derart reagieren, wenn die Netiquette nicht eingehalten > wird. Na, wenn Du die Netiquette zitierst, dann pack' Dich doch mal selbst an der Nase. Zart-beseelt würde ich Deine Ausdrucksweise auch nicht nennen. Außerdem frag Dich doch mal selbst, wie aufgrund der nun erkannten Problematik, da überhaupt etwas ohne Code zu machen gewesen wäre. Der Code kam dann mal im 11. Post dieses Threads, das war genauso wenig nett, denn die Frage aus Deinem ersten Post war auf Basis Deines Beitrages schlicht nicht beantwortbar. > Ein kleines, winzig kleines Smiley nach dem Grausam hätte alles Ein Smiley hätte bedeutet, dass ich's nicht so meine. Wobei Du natürlich die Vorlage mit > Na, Assembler schreib ich seit 1980 ... selbst aufgebaut hast. Wenn man sich so lange mit Assembler beschäftigt, dann schreibt man im eigenen Interesse keinen solchen Code wie den gezeigten.
> Das war nicht unangebracht, sondern die Wahrheit. Es spielt ganz einfach keine Rolle, ob etwas die Wahrheit ist. Will man helfen und auch,d ass die Hilfe angenommen wird, so lässt man sowas besser sein. > Zart-beseelt würde ich Deine Ausdrucksweise auch nicht nennen. Nun, wenn einem Therapie-Bedürftigkeit in einem der vorderen Posts nachgesagt wird, dann ist es halt vorbei mit der Gelassenheit. > Der Code kam dann mal im 11. Post dieses Threads, das war genauso wenig nett, Was hat das mit nett zu tun? Man kann den Code dann liefern, wenn man ihn zur Verfügung hat. Schon krass, was hier für Kosntrukte gebildet werden. > Ein Smiley hätte bedeutet, dass ich's nicht so meine. Das halte ich für unwahr. Es wäre genau so bei mir und jedem anderen angekommen. > selbst aufgebaut hast. Wenn man sich so lange mit Assembler beschäftigt, dann schreibt man im eigenen Interesse keinen solchen Code wie den gezeigten. Das mag ja alles schön und gut sein, aber es ist halt nicht deine Aufgabe, mir dies mitzuteilen.
Hartmut Wagener schrieb: > Nun, wenn einem Therapie-Bedürftigkeit in einem der vorderen Posts Nicht von mir. Außerdem, das Leben ist kein Ponyhof. Hartmut Wagener schrieb: > Das mag ja alles schön und gut sein, aber es ist halt nicht deine > Aufgabe, mir dies mitzuteilen. > Will man helfen und auch,d ass die Hilfe angenommen wird, so lässt man > sowas besser sein. Ich denke, Du hast die falsche Vorstellung von einem Diskussionsforum. a) es dient, wie's der Name so schön sagt, der Diskussion. Eine Diskussion kann sehr weit gespannt werden, ist aber sicher nicht darauf beschränkt jemand helfen zu müssen. Wäre die Aufgabenstellung zu leistende Hilfe für ein bestimmtes Produkt, so würde sich's Support-Forum oder bezahlter Support nennen. b) Eine "Aufgabe" in eigentlichen Sinne habe ich nicht und muss ich auch nicht wahrnehmen, ich bin ein ganz normaler Diskussionsteilnehmer. Weder muss ich Dir helfen, noch mir von Dir sagen lassen, wie mein Diskussionsbeitrag auszusehen hat. Auch ein Beitrag mit lediglich der Aussage: "Der gezeigte Code ist eigentlich eher grausam." wäre noch legitim gewesen, da zutreffend und themenbezogen. c) Gehen wir mal davon aus, dass Du 1980 um die 20 Jahre alt warst, so bist Du jetzt um die 50, also in einem Alter in dem keine heftigen Trotzreaktionen mehr zu erwarten sind. Ich muss Dir also nicht den Bauch kraulen, nur damit Du Dir dann freundlicherweise meine Lösung ansiehst. Prinzipiell bin ich interessiert zu erfahren, ob der von mir gefundene Fehler auch der tatsächliche war. Andererseits, wenn Du es so hältst, Dir nicht passende Kommentare ungeachtet deren Inhalts zu überlesen, dann ist das letzten Endes Dein Schaden und nicht meiner.
Herr Mueller schrieb: Datum: 04.03.2012 00:01 > Ausserhalb der IR Routine kann gar nichts funktionieren, da das Status > Register nicht gesichert wird. Hartmut Wagener schrieb: Datum: 05.03.2012 06:52 > Daher habe ich nun am > Anfang der Interrupt-Routine das SREG-Register auf den Stack gesichert > udn am Ende wieder hergestellt, und siehe da, das Programm läuft wie die > Wutz. Verstehst Du nun, warum ich geschrieben habe: Herr Mueller schrieb: > Schade um die Zeit, in der ich Dein Programm angeschaut habe. Wenn Du die Antworten, die man Dir geschrieben hat auch gelesen hättest, anstatt 40 Posts und 1 1/2 Tage lang nur beleidigt um Dich zu schlagen, wär dir der Zeitverlust und einige 'Beleidigungen' erspart geblieben. Eigentlich würde mich jetzt nur noch interessieren, auf was für einem Gerät Du 1980 Assembler propgrammiert hast. herrmueller
Nicht vom Monitor verwirren lassen, das Teil hatte keine Grafikkarte ... Es gab eine 8080-Karte und später eine Z80-Karte, 2KB RAM, 2KB batteriegepufferter RAM, 3 8 Bit-Ports. Alle Platinen wurden von mir und meinem Bruder hergestellt.
Cool! Ich kannte damals jemanden, der hate einen AIM65 von Rockwell (6502). Auf dem hatte ich ein bisschen 'programmiert'. Allerdings ohne ein Assemblerprogramm. Ich hatte die Befehle einzeln in Hex eingegeben. Das waren noch Zeiten.
Ja, genau so hab ich die auch eingegeben. 78 MOV A,B, C2 JNZ CA JZ, diese Hexcodes weiss ich heute noch ... Und bei den Branches musste man immer schön zählen ... (beim Z80, der 8080 kannte keine Branches)
Herr Mueller schrieb: > Ich kannte damals jemanden, der hate einen AIM65 von Rockwell (6502). > Auf dem hatte ich ein bisschen 'programmiert'. Allerdings ohne ein > Assemblerprogramm. Ich hatte die Befehle einzeln in Hex eingegeben. Dann wars kein AIM65 oder du hast sie aus einem Hex-Listung abgetippt. Der AIM65 hatte nämlich einen simplen nicht-symbolischen Assembler im Monitorprogramm, da war anders als beim KIM-1 kein Hex nötig.
Wer so ein wenig Feeling für diese Computergeneration bekommen möchte, der kann sich ja die erste Chip herunterladen: http://www.chip.de/downloads/c1_downloads_auswahl_15815484.html?t=1331074379&v=3600&s=f4a6f1c2317e6ff2111fbb34356275d4 Mein Bruder hatte die damals gekauft, aber ich kann die nicht mehr finden, ist wohl irgendwann doch ins Altpapier gewandert ...
Tja, ich bin zu jung um das mitgemacht zu haben. Aber im Gegensatz zu manch anderem bin ich da auch nicht traurig drüber, denn SO hätte ich bestimmt kein Spaß am Programmieren gefunden :-P Ist doch kein Wunder, dass man derartigen Code wie oben (d.h.: alles in einer Datei, alles stur untereinander geschrieben) schreibt, wenn man das auf so einem Gerät gelernt hat. Denn dort ist ja überhaupt keine Code-Strukturierung möglich. Das sinnvolle Strukturieren des Codes ist gewissermaßen genau das, was einen guten Programmierer ausmacht (heutzutage). Klar, damals war man ein guter Programmierer, wenn man die Assembler-Befehle in HEX-Code auswendig konnte :-P
Und Du gehörst zu denen die nur ab XML aufwärts lesen können ... Was ein Unsinn.
Hi >Ist doch kein Wunder, dass man derartigen Code wie oben (d.h.: alles in >einer Datei, alles stur untereinander geschrieben) schreibt, wenn man >das auf so einem Gerät gelernt hat. Denn dort ist ja überhaupt keine >Code-Strukturierung möglich. Seit wann kann man in Assembler nicht strukturiert programmieren? >Das sinnvolle Strukturieren des Codes ist gewissermaßen genau das, was >einen guten Programmierer ausmacht (heutzutage). Damals auch schon. Schlechten Code kann man in jeder Programmiersprache produzieren. Das ist kein Privileg von Assembler. Das 'Programm' vom TO ist kein Maßstab. MfG Spess
Simon K. schrieb: > Ist doch kein Wunder, dass man derartigen Code wie oben (d.h.: alles in > einer Datei, alles stur untereinander geschrieben) schreibt, wenn man > das auf so einem Gerät gelernt hat. Denn dort ist ja überhaupt keine > Code-Strukturierung möglich. Die Strukturierung sollte halt nicht erst beim eingeben mit dem Gerät passieren. Wenn man sich das ASM Programm vorher auf einem Blatt Papier aufschreibt kann man das genauso strukturieren wie heute auch, nur das eintippen dauert halt etwas länger.
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.