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.
Hallo, z.B. On Int0 Encoder0 Nosave da wird nichts gesichert Gruss Gerhard
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.... ;)
@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"...)
Achja, ich habe auch das "Duck & wech..." vergessen... Sorry... ...
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
>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?
@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.
Ja, ich war wohl etwas blod als ich das gelesen habe ;) Jetzt verstehe auch ich wie es gemeint war :)
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.
In C musste ich mich komischerweise noch nie um das Popen und Pushen irge´ndwelcher Register kümmern...
@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!
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.