mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom Int ohne Push und Pop


Autor: frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

gibt es unter Bascom eigentlich die moeglichkeit einen INT abzuarbeiten
ohne das Bascom vorher alle Register auf den Stack legt?
In meinem INt wird nur eine Flagge gesetzt.
Direkt in Bascom programmiert dauert das ca 100 befehlszyclen...
..ist mir zu lang 1 assembler anweisung reicht da eigentlich.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichwort: NOSAVE

Autor: jon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht nicht

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

z.B.

On Int0 Encoder0 Nosave

da wird nichts gesichert

Gruss Gerhard

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha?
Das zermürbt natürlich mein Hauptargument gegen BASCOM...

...

Autor: Der inoffizielle WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dabei scheint es sich aber um einen undokumentierten Befehl zu handeln.
Mir scheint sogar, Programmieren mit Bascom ist eine Art Geheimsprache,
an der sich einige versuchen, und ihre Fehlschläge dann hier im Forum
der breiten Masse präsentieren.

("Duck und wech!" sollte hier lieber nicht fehlen.... ;)

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Kieler:
Seien wir nicht ungerecht, es gibt hier im Forum nicht unbedingt mehr
BASCOM-Verständnisfragen als ASM- oder C-Verständnisfragen.

Allerdings gibt es bei den BASCOM-Fragern ein paar Leute mehr, die da
meinen, dass das Benutzen einer "kinderleichten Sprache" auch ohne
jegliche Programmierkenntnisse (Algorithmen) Erfolg verspricht. Das
sind aber die Leute, die nach einigen Tagen oder Wochen sowiso wieder
weg sind weil sie den AVR-Krams aufgegeben haben.

Andererseits habe ich Respekt vor den Leuten, die in der Lage sind,
unter BASCOM anspruchsvolle Programme zu schreiben, die sich im Alltag
bewähren.

Bit- & Bytebruch...
...HanneS... (...nur echt mit Pünktchen und ohne "WM"...)

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja, ich habe auch das "Duck & wech..." vergessen...
Sorry...

...

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus der "Bedienungsanleitung" von Bascom:


When you specify NOSAVE, no registers are saved and restored in the
interrupt routine. So when you use this option make sure to save and
restore all used registers.
When you omit NOSAVE all used registers will be saved. These are SREG ,
R31 to R16 and R11 to R0.R12 – R15 are not saved. When you use floating
point math in the ISR(not recommended) you must save and restore
R12-R15 yourself in the ISR.
My_Isr:  Push R12  ‘ save registers  Push R13  Push R14  Push R15
Single = single + 1 ‘ we use FP Pop R15   ‘ restore registers Pop  R14
Pop R13 Pop R12RETURN
You must return from the interrupt routine with the RETURN statement.


MfG Paul

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dabei scheint es sich aber um einen undokumentierten Befehl zu
handeln.

Nicht in der Version, die ich habe. (.8.1)

Da kommt ja auch der Text von Paul her.

@jon: Was geht nicht?

Autor: Der inoffizielle WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Gast: Man beachte das "Duck und wech"...
Zur Erklärung: Es scheint einigen Bascom-"Programmierern"* nicht
möglich zu sein, sich das Manual von Bascom anzugucken.


*Das Thema hat Hannes (ich schreib's mal ohne Punkte) schon schön
erläutert.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ich war wohl etwas blod als ich das gelesen habe ;)

Jetzt verstehe auch ich wie es gemeint war :)

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleine Frage, gibts ein Equivalent dazu auch in C?

Eine Interruptroutine sieht so aus:
 828:  1f 92         push  r1
 82a:  0f 92         push  r0
 82c:  0f b6         in  r0, 0x3f  ; 63
 82e:  0f 92         push  r0
 830:  11 24         eor  r1, r1
 832:  2f 93         push  r18
 834:  3f 93         push  r19
 836:  4f 93         push  r20
 838:  5f 93         push  r21
 83a:  6f 93         push  r22
 83c:  7f 93         push  r23
 83e:  8f 93         push  r24
 840:  9f 93         push  r25
 842:  af 93         push  r26
 844:  bf 93         push  r27
 846:  ef 93         push  r30
 848:  ff 93         push  r31
  uart_IRQ();
 84a:  0e 94 41 06   call  0xc82 <uart_IRQ>
 84e:  ff 91         pop  r31
 850:  ef 91         pop  r30
 852:  bf 91         pop  r27
 854:  af 91         pop  r26
 856:  9f 91         pop  r25
 858:  8f 91         pop  r24
 85a:  7f 91         pop  r23
 85c:  6f 91         pop  r22
 85e:  5f 91         pop  r21
 860:  4f 91         pop  r20
 862:  3f 91         pop  r19
 864:  2f 91         pop  r18
 866:  0f 90         pop  r0
 868:  0f be         out  0x3f, r0  ; 63
 86a:  0f 90         pop  r0
 86c:  1f 90         pop  r1
 86e:  18 95         reti

In uart_IRQ werden allerdings nur r1, r24, r25, r30 und r31 benutzt.

Ziemlich blöde... Wofür hat man denn einen Compiler, der einem Arbeit
abinmmt, wenn der noch nichtmals versteht, welche Register überhaupt
nur gesichert werden müssen.

Autor: Der inoffizielle WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In C musste ich mich komischerweise noch nie um das Popen und Pushen
irge´ndwelcher Register kümmern...

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rahul: Ich weiß nicht ob du mich da falsch gelesen hast, aber ich
wollte, dass der Compiler weniger pusht/poppt. Nämlich nur soviel wie
effektiv nötig ist!

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rahul
Du mußt Dich in Bascom auch nicht um´s Poppen kümmern. (Grins)
Dann werden alle Register von allein gesichert und auch wieder
hergestellt.

Du kannst aber sagen, daß Du die Register "von Hand" sichern
willst,
oder eben gar nicht. (Meist nicht so sinnvoll).

MfG Paul

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.