-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask
.pl!news.nask.org.pl!news.internetia.pl!not-for-mail
From: Sylwester Łazar <i...@a...pl>
Newsgroups: pl.misc.elektronika
Subject: Odp: Odp: C vs. ASM na przykładzie PIC18F
Date: Sat, 5 Apr 2014 23:19:19 +0200
Organization: Netia S.A.
Lines: 96
Message-ID: <lhpsr5$gbm$1@mx1.internetia.pl>
References: <lhntl8$u3a$1@mx1.internetia.pl><533fc888$0$2155$6...@n...neostrada.
pl> <op.xduo4pf8n0u1o8@moj><lhpasi$k7d$1@mx1.internetia.pl>
<op.xdux200fn0u1o8@moj>
NNTP-Posting-Host: 77-253-141-36.adsl.inetia.pl
Mime-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
X-Trace: mx1.internetia.pl 1396733605 16758 77.253.141.36 (5 Apr 2014 21:33:25 GMT)
X-Complaints-To: a...@i...pl
NNTP-Posting-Date: Sat, 5 Apr 2014 21:33:25 +0000 (UTC)
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200
X-Tech-Contact: u...@i...pl
X-Newsreader: Microsoft Outlook Express 5.00.2615.200
X-Priority: 3
X-Server-Info: http://www.internetia.pl/
X-MSMail-Priority: Normal
Xref: news-archive.icm.edu.pl pl.misc.elektronika:662378
[ ukryj 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
- Światłowód między budynkami
- POtrzebny bufor 3.3<>5V, jedonkieruowy, trójstanowy, wąski
- retro
- Bezprzewodowe polączenie Windows z projektorem
- rozklejanie obudowy
- Prośba o identyfikację komponentu
- Smart gniazdko straciło na zasięgu wifi?
- Smart gniazdko straciło zasięg wifi?
- nurtuje mnie
- dziwna sprawa...
- Laptop MSI się nie uruchamia.
- Dobra listwa LED (CRI 90-95, bez migotania)
- masowe programowanie AVR
- Fajny pomysł na monitor z klawiaturą
- Sprzedawanie zaszyfrowanych filmów na płytach Blu-Ray bez kluczy deszyfrujących
Najnowsze wątki
- 2024-11-02 piszę list do św Mikołaja
- 2024-11-01 karta SIM nie działa w konkretnym smartfonie.
- 2024-11-01 Mamy WZROST! O 50% wzrosła ilość kredytów gotówkowych
- 2024-11-01 Warszawa => Expert Recruiter 360 <=
- 2024-11-01 Warszawa => Technical Leader (Java Background) <=
- 2024-11-01 Warszawa => Account Manager - Usługi rekrutacyjne <=
- 2024-11-01 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-01 Warszawa => Programista Dynamics 365 CRM <=
- 2024-11-01 Warszawa => Dynamics 365 CRM Developer <=
- 2024-11-01 Warszawa => Junior Rekruter <=
- 2024-11-01 Chrzanów => Specjalista ds. PR Produktowego <=
- 2024-11-01 Białystok => Full Stack web developer (obszar .Net Core, Angular6+) <
- 2024-11-01 Łódź => Frontend Engineer (Three.js) <=
- 2024-11-01 Warszawa => Junior Rekruter <=
- 2024-11-01 Gdańsk => Programista Full Stack .Net <=