Also, ich habs gerade nochmal probiert:
Es funktioniert doch, anscheinend hatte ich damals irgendwo einen Fehler...Code:Config Pind.2 = Input Portd.2 = 0 Config Int0 = Rising On Int0 Getreceiver Nosave Config Timer0 = Timer , Prescale = 256 On Timer0 Detectrxpause Nosave 'timer overflow = pause in receiver's signal Dim Empf(5) As Byte ... Getreceiver: 'byte-array, cycles in range: 43, out of range: 28 !PUSH R16 !IN R16, SREG !PUSH R16 !LDS R16, {channel} !INC R16 !STS {channel}, R16 !SUBI R16, 2 !CPI R16, 5 !BRCC NotInRange !PUSH XL !PUSH XH LoadAdr Empf(1) , X !ADD XL, R16 !CLR R16 !ADC XH, R16 !IN R16, TCNT0 !ST X, R16 !POP XH !POP XL !NotInRange: !LDI R16, 6 !OUT TCNT0, R16 !POP R16 !OUT SREG, R16 !POP R16 Return 'that means that there are problems with the receiver Detectrxpause: !PUSH R16 !IN R16, SREG !PUSH R16 !ldi R16, 0 !sts {channel}, R16 !POP R16 !OUT SREG, R16 !POP R16 Return
Habe jetzt auch den Timer0 Interrupt umgeschrieben, wäre nett, wenn du kurz drüberschauen könntest, obs so passt!? Fliegen tut das ganze
Meinst du, ich solle jetzt noch die Arrays mit den temporären Variablen verändern? Habs gerade mal probiert, mithilfe der Overlay Funktion würde kein zusätzlicher Speicher verbraucht.
Außerdem würde ich mir dann die Zuweisung tmpx <--> empf(x) sparen?!Code:Dim Tmp1 As Byte At Empf(1) Overlay Dim Tmp2 As Byte At Empf(2) Overlay Dim Tmp3 As Byte At Empf(3) Overlay Dim Tmp4 As Byte At Empf(4) Overlay Dim Tmp5 As Byte At Empf(5) Overlay
Hältst du das für sinnvoll?
Gruß
Chris
EDIT:
Hab gerade folgendes eingefügt:
Der Code funktioniert. Ich werde jetzt mal im Simulator testen, ob der Code dadurch schneller läuft. Melde mich dann wiederCode:Dim Tmp1 As Byte At Empf(1) Overlay Dim Tmp2 As Byte At Empf(2) Overlay Dim Tmp3 As Byte At Empf(3) Overlay Dim Tmp4 As Byte At Empf(4) Overlay Dim Tmp5 As Byte At Empf(5) Overlay Dim Stmp1 As Integer At Sempf(1) Overlay Dim Stmp2 As Integer At Sempf(2) Overlay Dim Stmp3 As Integer At Sempf(3) Overlay Dim Stmp4 As Integer At Sempf(4) Overlay Dim Stmp5 As Integer At Sempf(5) Overlay
EDIT2:
Hab gerade im Simulator folgendes probiert:
Beide IF-Abfragen brauchen incl. dem !Nop genau 34 Takte. Habe ich etwas anderes gemacht, als du gemeint hast oder bringts doch keine Besserung?Code:If Sempf(1) > -37 And Sempf(1) < 37 Then !nop End If If Stmp1 > -37 And Stmp1 < 37 Then !nop End If







Zitieren

Lesezeichen