Bascom Int ohne Push und Pop

Gast #349565
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.
Gast #349570
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.... ;)
#349571
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"...)
Gast #349573
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
Gast #349575
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.
Persönliche Seite #349577
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.
Gast #349580
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren