Witam
Mam pytanie co do kodu poniżej ze strony Bartka. Chciałbym dokonać szybkiego kopiowania pomiedzy tablicami z tym że do sześciu Led(1), Led(2)...
nie wiem jak to dopisać
$regfile = "m32def.dat"
$crystal = 8000000
Ddra = &B11111111 : Porta = &B11111111
Ddrb = &B00011111 : PORTB = &B11100000
Ddrc = &B11111111 : Portc = &B00000000
Ddrd = &B11111111 : PORTD = &B00000000
Config TIMER2 = Timer , Prescale = 8 , Compare = Disconnect , Clear Timer = 1
Enable COMPARE2 : On COMPARE2 Int0_isr : COMPARE2 = 124
Enable Interrupts
'****************** Zmienne *******************
'***********************************************
Dim Licznik As Byte
Dim Led(6) As Byte
Dim Leds_pwm As Byte , M As Byte , Speed As Byte , Old_val As Byte
D1 Alias Portc.0 : D2 Alias Portc.1 : D3 Alias Portc.2 : D4 Alias Portc.3 : D5 Alias Portc.4
D6 Alias Portc.5
Sw1 Alias PINB.5
Sw2 Alias Pinb.6
Do
If Speed = 0 Then
If Sw1 = 0 Then
If Leds_pwm < 100 Then Incr Leds_pwm
End If
If Sw2 = 0 Then
If Leds_pwm > 0 Then Decr Leds_pwm
End If
If Old_val <> Leds_pwm Then 'jesli wartość różni się od poprzedniej
Old_val = Leds_pwm ' to zapamiętaj tę wartość
Speed = 127 - Leds_pwm ' odejmij aktualną wartość PWM od 127
Shift Speed , Left , 1 ' Pomnóż razy dwa
M = Memcopy(leds_pwm , Led(1) , 3 , 2 , 4 , 6 , 5)' tak nie działa
End If
End If
Loop
'************ Przerwanie timer 0 ***************
'***********************************************
Int0_isr:
Incr Licznik
If Licznik = 100 Then Licznik = 0
If Licznik < Led(1) Then Set D1 Else Reset D1
If Licznik < Led(2) Then Set D2 Else Reset D2
If Licznik < Led(3) Then Set D3 Else Reset D3
If Licznik < Led(4) Then Set D4 Else Reset D4
If Licznik < Led(5) Then Set D5 Else Reset D5
If Licznik < Led(6) Then Set D6 Else Reset D6
If Speed > 0 Then Decr Speed
Return
Memcopy
- niveasoft
- Posty: 1216
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Memcopy
W memcopy po nawiasie podajesz co ma być źródłem danych do skopiowania
Po przecinku podajesz gdzie to kopiować.
Po następnym przecinku podajesz ile bajtów chcesz skopiować.
Na samym końcu podajesz "opcję"
Chodzi w tym o to że, dla przykładu, chciałbyś wszystkie elementy wypełnić jedną wartością "A" czyli 65
Wtedy podajesz wartośc 65 jako te bazową, ale ona jest jedna, to nie jest tablica.
Chciałbyś więc by caly czas tylko ten jeden znak 65 był kopiowany, ale do kolejnych bajtów tablicy.
Wtedy wybiera się opcję 2 - gdzie tylko adres docelowy danych jest zwiększany a ten adres źródła jest stały
Nie chciałbym mącić w głowie, ale w druga stronę działa to tak że można w jedno miejsce, na przykład port, wysyłac kolejne dane z tablicy i wtedy wybieramy opcje 1 Wtedy kolejne bajty będą się pojawiać na wybranym porcie.
Wracając do pytania syntax powinien wyglądać mniej więcej tak M=Memcopy(Led(1),Led(2),5,2) 'skopiuj 5 razy wartość Led(1) do kolejnych Led(2),Led(3),Led(4) ,Led(5) itd zaczynając od Led(2)
Po przecinku podajesz gdzie to kopiować.
Po następnym przecinku podajesz ile bajtów chcesz skopiować.
Na samym końcu podajesz "opcję"
Chodzi w tym o to że, dla przykładu, chciałbyś wszystkie elementy wypełnić jedną wartością "A" czyli 65
Wtedy podajesz wartośc 65 jako te bazową, ale ona jest jedna, to nie jest tablica.
Chciałbyś więc by caly czas tylko ten jeden znak 65 był kopiowany, ale do kolejnych bajtów tablicy.
Wtedy wybiera się opcję 2 - gdzie tylko adres docelowy danych jest zwiększany a ten adres źródła jest stały
Nie chciałbym mącić w głowie, ale w druga stronę działa to tak że można w jedno miejsce, na przykład port, wysyłac kolejne dane z tablicy i wtedy wybieramy opcje 1 Wtedy kolejne bajty będą się pojawiać na wybranym porcie.
Wracając do pytania syntax powinien wyglądać mniej więcej tak M=Memcopy(Led(1),Led(2),5,2) 'skopiuj 5 razy wartość Led(1) do kolejnych Led(2),Led(3),Led(4) ,Led(5) itd zaczynając od Led(2)
-
- Posty: 24
- Rejestracja: 30 sie 2015, 22:06
Re: Memcopy
Nie do końca rozumiem, ale napisałem coś takiego i działa
M = Memcopy(leds_pwm , Led(1) , 6 , 2 ) M = Memcopy(led(2) , Led(6) , 1 )
M = Memcopy(leds_pwm , Led(1) , 6 , 2 ) M = Memcopy(led(2) , Led(6) , 1 )
- niveasoft
- Posty: 1216
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Memcopy
Nie wiedziałem skąd chciałeś kopiować dane, ale ten Twój pierwszy zapis to robi
Oznacza "Skopiuj wartosć Leds_pwm do sześciu kolejnych bajtów tablicy Led() zaczynając od pierwszego. Opcja 2 załatwia sprawę w ten sposób, że tylko adresy tablicy Led() sie zwiekszają i cały czas kopiowana jest jedna wartość.
Drugi zapis natomiast jest dziwny i działa tylko dlatego że kopiowana jest tylko jedna wartość
Równie dobrze mógłbyś napisać Led(6) = Led(2)
Oznacza "Skopiuj wartosć Leds_pwm do sześciu kolejnych bajtów tablicy Led() zaczynając od pierwszego. Opcja 2 załatwia sprawę w ten sposób, że tylko adresy tablicy Led() sie zwiekszają i cały czas kopiowana jest jedna wartość.
Drugi zapis natomiast jest dziwny i działa tylko dlatego że kopiowana jest tylko jedna wartość
Równie dobrze mógłbyś napisać Led(6) = Led(2)
-
- Posty: 24
- Rejestracja: 30 sie 2015, 22:06
Re: Memcopy
Chciałem "skopiować" wartość z leds_pwm do Led(1), Led(2)... Led(6)
taki zapis mi nie działa
M = Memcopy(leds_pwm , Led(1) , 3 , 2 , 4 , 6 , 5)
taki zapis mi nie działa
M = Memcopy(leds_pwm , Led(1) , 3 , 2 , 4 , 6 , 5)