www.mikrocontroller.net

Forum: Projekte & Code bedingte Spruenge in Assembler und sdcc Frage


Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moin,

ich als ahnungsloser, eigentlich C Programmierer wollte mal etwas Asm
basteln und habe in meiner Atmel Referenz fuer 8051er als einzige
Sprungbefehle den CJNE gefunden. Wie kann ich den sowas wie kleiner
oder groesser abfragen?

Dann hab ich noch ne Frage zu sdcc: wenn ich damit ein Progamm schreibe
ist das Ergebnis recht komisch. Der Code hat im Simulator am Anfang
viele NOPs und Spruenge. Etwa sowas

LCALL <irgendwas>
RETI
NOP
NOP
NOP
NOP
RETI
NOP
NOP
NOP
NOP
RETI

 und das etwa 6 mal. Das eigentlich Programm faengt dann erst bei
<igendwas> and

Ist das normal?

TIM

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal, Du bist hier in der Codesammlung, d.h. hier stehen nur fertige
Beispiele und keine Fragen.

Aber das sollte Dir eigentlich schon der Text gesagt haben, der ganz
groß und fett gedruckt über Deinem Posting gestanden hat !!!


Aber ich will mal nicht so sein.
Der SDCC legt warscheinlich Pseudo-Interupt-Handler an, sobald ein
Interrupt nicht benutzt wird.

Das sieht man zwar oft, ist aber grundsätzlich falsch.
Nicht benutze Interrupts sollten z.B. mit "CLR EA" + "JMP $" belegt
werden, d.h. daß man auch wirklich merkt, daß man einen Fehler gemacht
hat. Ein "RETI" verschleiert den Fehler doch nur.


Werden Interrupts angesprungen, für die man keinen Handler hinterlegt
hat, dann ist das ein schwerwiegender Programmierfehler und dann ist es
besser, wenn sich dieser so früh, wie möglich bemerkbar macht und nicht
erst, nachdem man 1.000.000 Geräte fehlerhaft ausgeliefert hat.

Deswegen ist auch ein "JMP 0000" bei unbenutzen Interrupts genau so
krank.


Peter

Autor: Conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tim,
es ist schon ein paar Jahre her das ich mit der 51ger Familie
gearbeitet habe.
Um nach dem Befehl CJNE festzustellen ob grösser oder kleiner
mußt du das Statuswort im Special-Funktion-Register auswerten.
Das CY - bit gibt an ob ein Überlauf im Accu stattgefunden hat.

Gruß,
Arno

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.