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


von frank (Gast)


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.

von Gast (Gast)


Lesenswert?

Stichwort: NOSAVE

von jon (Gast)


Lesenswert?

geht nicht

von Gerhard (Gast)


Lesenswert?

Hallo,

z.B.

On Int0 Encoder0 Nosave

da wird nichts gesichert

Gruss Gerhard

von Hannes L. (hannes)


Lesenswert?

Aha?
Das zermürbt natürlich mein Hauptargument gegen BASCOM...

...

von Der inoffizielle WM-Rahul (Gast)


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.... ;)

von Hannes L. (hannes)


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"...)

von Hannes L. (hannes)


Lesenswert?

Achja, ich habe auch das "Duck & wech..." vergessen...
Sorry...

...

von Paul Baumann (Gast)


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

von Gast (Gast)


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?

von Der inoffizielle WM-Rahul (Gast)


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.

von Gast (Gast)


Lesenswert?

Ja, ich war wohl etwas blod als ich das gelesen habe ;)

Jetzt verstehe auch ich wie es gemeint war :)

von Simon K. (simon) Benutzerseite


Lesenswert?

Kleine Frage, gibts ein Equivalent dazu auch in C?

Eine Interruptroutine sieht so aus:
1
 828:  1f 92         push  r1
2
 82a:  0f 92         push  r0
3
 82c:  0f b6         in  r0, 0x3f  ; 63
4
 82e:  0f 92         push  r0
5
 830:  11 24         eor  r1, r1
6
 832:  2f 93         push  r18
7
 834:  3f 93         push  r19
8
 836:  4f 93         push  r20
9
 838:  5f 93         push  r21
10
 83a:  6f 93         push  r22
11
 83c:  7f 93         push  r23
12
 83e:  8f 93         push  r24
13
 840:  9f 93         push  r25
14
 842:  af 93         push  r26
15
 844:  bf 93         push  r27
16
 846:  ef 93         push  r30
17
 848:  ff 93         push  r31
18
  uart_IRQ();
19
 84a:  0e 94 41 06   call  0xc82 <uart_IRQ>
20
 84e:  ff 91         pop  r31
21
 850:  ef 91         pop  r30
22
 852:  bf 91         pop  r27
23
 854:  af 91         pop  r26
24
 856:  9f 91         pop  r25
25
 858:  8f 91         pop  r24
26
 85a:  7f 91         pop  r23
27
 85c:  6f 91         pop  r22
28
 85e:  5f 91         pop  r21
29
 860:  4f 91         pop  r20
30
 862:  3f 91         pop  r19
31
 864:  2f 91         pop  r18
32
 866:  0f 90         pop  r0
33
 868:  0f be         out  0x3f, r0  ; 63
34
 86a:  0f 90         pop  r0
35
 86c:  1f 90         pop  r1
36
 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.

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


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!

von Paul Baumann (Gast)


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

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
Noch kein Account? Hier anmelden.