-
Data: 2014-04-05 23:19:19
Temat: Odp: Odp: C vs. ASM na przykładzie PIC18F
Od: Sylwester Łazar <i...@a...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]>> W ATMEGA są zdaje się instrukcje 16-bitowe.
>tak
>> W takim razie oznacza to, że jest <66 instrukcji?
>65
Dzięki. Dobra robota.
Podoba mi się ten ATMEGA32 (jak na 8-bitowca)
Ma fajne instrukcje:
1) MOVW Rd, Rr Copy Register Word Rd+1:Rd <- Rr+1:Rr
w jednym cyklu!
3x jej używają w naszym programie testowym. Nie dziwię się. Tego brakuje w
PIC.
2) LDI Rd, K Load Immediate Rd <- K
14x jej używają
Też w jednym cyklu do dowolnego rejestru. Tez brakuje w PICu. Wszystko przez
WREG trzeba przenosić.
3)CPI Rd,K Compare Register with Immediate Rd - K
3x użyta
Też w jednym cyklu. Też brakuje w PICu.
4) CPC Rd,Rr Compare with Carry Rd - Rr - C
3x użyta.
Też występuje w jednym cyklu.
Zdaje się, że tak fajnie można porównać w 4 instrukcjach 2bajtową liczbę.
ldi r26, 0x00 ; 0
cpi r30, 0x86 ; 134
cpc r31, r26
brne .-18 ; 0xbe <zlicz+0x2c>
Szkoda tylko, że nie ma takiego porównania cpc ze stałą i tutaj musiał
załadować najpierw do r26 zero.
W PIC18 jest CPFSEQ, która ze skokiem wykonuje się w 3 cyklach, ale też
trzeba załadować do w stałą
i też tylko jeden bajt, a nie słowo. Ach te ośmiobitowce :-(
5)MOV Rd, Rr Move Between Registers Rd <- Rr
5x występuje
Też w jednej instrukcji i też fajne.
PIC18 ma MOVFF, ale trwa 2 cykle, czyli identycznie, jak w PIC16
MOVF R1,w
MOVWF R2
tyle, że nie używa w.
----------------------------------
Podsumowując:
1) Kod wygląda dość ciekawie, ale coś mi się zdaje, że można to jeszcze
skrócić przynajmniej do 45 instrukcji z takim zestawem rozkazów.
2) rozkazy korzystające z indeksów trwają zawsze 2 cykle
np.
LD Rd, Z Load Indirect Rd <- (Z)
3) pętla główna sortowania zajmuje aż 34 rozkazy.
8 rozkazów 2 cyklowych
26 rozkazów 1 cyklowych
czyli 26+2*8=26+16=42 cykle
4) Ja mam w ASM na PIC18F 20 instrukcji w pętli.
I tak:
6 wykonujących się w 2 cyklach
14 wykonujących się w 1 cyklu.
Co daje mimo bardziej ubogiej listy rozkazów 14+2*6=14+12=26cykli
W cyklach wychodzi C/ASM= 42/26=1,62
Całkiem nieźle jak na razie. Nawet nie dwukrotna nadbudowa.
5) ATMEGA32 może pracować, jak dobrze wyczytałem @16MHz z czasem jednego
cyklu: Tcy=1/16=62,5ns.
Daje to obieg pętli:
42*62,5=2,625us
Dla PICa 18F2320 @40MHz Tcy=1/40*4=100ns
Daje to obieg pętli:
26*100= 2,6us
I to jest ciekawa sprawa.
==================================================
ATMEGA32 z kompilatorem C (nie wiem jaka wersja?) Avr studio4
Wykonuje tą samą funkcję, którą napisałem w ASM na PIC18 mniej więcej w tym
samym czasie!
Sukces polega zapewne na tym, że ATMEGA32 wydaje się dość zgrabnym
maleństwem,
a kompilator korzysta z listy rozkazów dość logicznie.
Oba procki mają tylko 3 rejestry indeksowe. Jeden więcej byłby w tym
przypadku pomocny.
ATMEGA32 jakieś 12-15 zł
PIC18F2320 jakieś 20 -28 zł
Polecam ATMEGA32 w takim razie, zarówno do pracy w ASM jak i w C.
Choć zaznaczam, że na ATMEGA32 kawałka kodu jeszcze nie napisałem w ASM :-)
Jednak, 8-bitowce to marne są,
więc jeśli już lepiej to takiego 32MX220F032B-50ISP za 8 zł.
==================================================
Uwaga:
Co prawda jeszcze nie mówiłem, że ten mój kod w ASM vs. C ma automatyczne
odliczanie najmniejszej wartości KMIN,
w celu zmniejszenia rozmiaru tablicy zliczającej.
Ale to myślę, że jakieś 5-15% szybkości może zabrać w ASM.
Bardzo dziękuję Janusz.
Podaj proszę jeszcze typ kompilatora, wersję i może jakiegoś linka do tego
AVRSTUDIO i kompilatora (demo?)
Może się komuś przyda.
S.
Następne wpisy z tego wątku
- 06.04.14 00:32 Mario
- 06.04.14 00:36 Marek
- 06.04.14 00:43 Sylwester Łazar
- 06.04.14 00:47 Sylwester Łazar
- 06.04.14 00:53 Sylwester Łazar
- 06.04.14 00:57 Marek
- 06.04.14 01:01 Sylwester Łazar
- 06.04.14 01:06 Marek
- 06.04.14 01:10 Sylwester Łazar
- 06.04.14 02:12 John Smith
- 06.04.14 02:20 John Smith
- 06.04.14 02:38 Sylwester Łazar
- 06.04.14 03:08 John Smith
- 06.04.14 05:09 Pszemol
- 06.04.14 10:49 Sylwester Łazar
Najnowsze wątki z tej grupy
- pradnica krokowa
- Nieustający podziw...
- Coś dusi.
- akumulator napięcie 12.0v
- Podłączenie DMA 8257 do 8085
- pozew za naprawę sprzętu na youtube
- gasik
- Zbieranie danych przez www
- reverse engineering i dodawanie elementów do istniejących zamkniętych produktów- legalne?
- Problem z odczytem karty CF
- 74F vs 74HCT
- Newag ciąg dalszy
- Digikey, SN74CBT3253CD, FST3253, ktoś ma?
- Szukam: czujnik ruchu z możliwością zaączenia na stałe
- kabelek - kynar ?
Najnowsze wątki
- 2025-01-19 Test - nie czytać
- 2025-01-19 qqqq
- 2025-01-19 Tauron przysyła aneks
- 2025-01-19 Nowa ładowarka Moya a Twizy -)
- 2025-01-18 Power BANK z ładowaniem przelotowym robi PRZERWY
- 2025-01-18 Pomoc dla Filipa ;)
- 2025-01-18 znowu kradno i sie nie dzielo
- 2025-01-18 Zieloni oszuchiści
- 2025-01-18 Zielonka => Specjalista ds. public relations <=
- 2025-01-18 Warszawa => Frontend Developer (JS, React) <=
- 2025-01-18 Warszawa => Software .Net Developer <=
- 2025-01-18 Warszawa => Developer .NET (mid) <=
- 2025-01-18 Katowice => Administrator IT - Systemy Operacyjne i Wirtualizacja <=
- 2025-01-17 Zniknął list gończy za "Frogiem". Frog się nam odnalazł?
- 2025-01-17 Kto wytłumaczy "głupiemu" prezydentowi Dudzie wielką moc prawną "dekretu premiera" TUSKA? [(C)Korneluk (2025)]