-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin.
stu.neva.ru!aioe.org!.POSTED!not-for-mail
From: janusz_k <J...@o...pl>
Newsgroups: pl.misc.elektronika
Subject: Re: Odp: C vs. ASM na przykładzie PIC18F
Date: Sun, 06 Apr 2014 16:28:10 +0200
Organization: bb
Lines: 342
Message-ID: <op.xdwfs8p9n0u1o8@moj>
References: <lhntl8$u3a$1@mx1.internetia.pl>
<533fc888$0$2155$65785112@news.neostrada.pl> <op.xduo4pf8n0u1o8@moj>
<lhpasi$k7d$1@mx1.internetia.pl> <op.xdux200fn0u1o8@moj>
<lhpsr5$gbm$1@mx1.internetia.pl> <lhq18d$us0$1@mx1.internetia.pl>
<lhq212$1me$1@mx1.internetia.pl>
NNTP-Posting-Host: f/fjZo0Wj24JXZk3DvmiLg.user.speranza.aioe.org
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=yes
Content-Transfer-Encoding: Quoted-Printable
X-Complaints-To: a...@a...org
User-Agent: Opera Mail/12.16 (Win32)
X-Notice: Filtered by postfilter v. 0.8.2
Xref: news-archive.icm.edu.pl pl.misc.elektronika:662427
[ ukryj nagłówki ]W dniu 06.04.2014 o 00:47 Sylwester Łazar <i...@a...pl> pisze:
>> > 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.
>>
>> Ja bym go nie polecał bo ten procek znika z rynku. Jeśli już to jakiś
>> zamiennik np Atmega328. A tak w ogóle po co kupować 8 bitowy procek z
>> 1kB RAM za 12-15 zł gdy można kupić 32 bitowy z 8kB RAM za 7 zł?
>>
> http://www.tme.eu/pl/details/lpc1114fbd48_302/mikrok
ontrolery-nxp-arm/nxp/#
>> --
>> pozdrawiam
>> MD
> Z tych dwóch. Poniżej napisałem o 32 bitowym 32MX2xx.
> O.K.
> Wygląda, że 8-bitowce się kończą.
> Ale zawsze mogą służyć za PORT EXPANDER.
> Jeśli będzie w cenie takiej co CD4094, to można kupić takiego 8-bitowca i
> jeszcze sobie,
> do płytki piny dostosować :-)
Tu masz jkeszcze w najnowszym As6.2, co prawda dał trochę ostrzeżeń ale
skonpilował
różnic w zasadzie nie ma, kod jest przesunięty bo inaczej zainicjowana
jest tabela przerwań,
zrobione to jest na nową ATmega88.
test6.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000000 00800100 0000013c 000001d0 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 0000013c 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 00000023 00800100 00800100 000001d0 2**0
ALLOC
3 .comment 00000030 00000000 00000000 000001d0 2**0
CONTENTS, READONLY
4 .debug_aranges 00000028 00000000 00000000 00000200 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_info 0000016e 00000000 00000000 00000228 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 0000009b 00000000 00000000 00000396 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 00000096 00000000 00000000 00000431 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_frame 00000034 00000000 00000000 000004c8 2**2
CONTENTS, READONLY, DEBUGGING
9 .debug_str 00000129 00000000 00000000 000004fc 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_loc 00000094 00000000 00000000 00000625 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_ranges 00000018 00000000 00000000 000006b9 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 19 c0 rjmp .+50 ; 0x34 <__ctors_end>
2: 33 c0 rjmp .+102 ; 0x6a <__bad_interrupt>
4: 32 c0 rjmp .+100 ; 0x6a <__bad_interrupt>
6: 31 c0 rjmp .+98 ; 0x6a <__bad_interrupt>
8: 30 c0 rjmp .+96 ; 0x6a <__bad_interrupt>
a: 2f c0 rjmp .+94 ; 0x6a <__bad_interrupt>
c: 2e c0 rjmp .+92 ; 0x6a <__bad_interrupt>
e: 2d c0 rjmp .+90 ; 0x6a <__bad_interrupt>
10: 2c c0 rjmp .+88 ; 0x6a <__bad_interrupt>
12: 2b c0 rjmp .+86 ; 0x6a <__bad_interrupt>
14: 2a c0 rjmp .+84 ; 0x6a <__bad_interrupt>
16: 29 c0 rjmp .+82 ; 0x6a <__bad_interrupt>
18: 28 c0 rjmp .+80 ; 0x6a <__bad_interrupt>
1a: 27 c0 rjmp .+78 ; 0x6a <__bad_interrupt>
1c: 26 c0 rjmp .+76 ; 0x6a <__bad_interrupt>
1e: 25 c0 rjmp .+74 ; 0x6a <__bad_interrupt>
20: 24 c0 rjmp .+72 ; 0x6a <__bad_interrupt>
22: 23 c0 rjmp .+70 ; 0x6a <__bad_interrupt>
24: 22 c0 rjmp .+68 ; 0x6a <__bad_interrupt>
26: 21 c0 rjmp .+66 ; 0x6a <__bad_interrupt>
28: 20 c0 rjmp .+64 ; 0x6a <__bad_interrupt>
2a: 1f c0 rjmp .+62 ; 0x6a <__bad_interrupt>
2c: 1e c0 rjmp .+60 ; 0x6a <__bad_interrupt>
2e: 1d c0 rjmp .+58 ; 0x6a <__bad_interrupt>
30: 1c c0 rjmp .+56 ; 0x6a <__bad_interrupt>
32: 1b c0 rjmp .+54 ; 0x6a <__bad_interrupt>
00000034 <__ctors_end>:
34: 11 24 eor r1, r1
36: 1f be out 0x3f, r1 ; 63
38: cf ef ldi r28, 0xFF ; 255
3a: d4 e0 ldi r29, 0x04 ; 4
3c: de bf out 0x3e, r29 ; 62
3e: cd bf out 0x3d, r28 ; 61
00000040 <__do_copy_data>:
40: 11 e0 ldi r17, 0x01 ; 1
42: a0 e0 ldi r26, 0x00 ; 0
44: b1 e0 ldi r27, 0x01 ; 1
46: ec e3 ldi r30, 0x3C ; 60
48: f1 e0 ldi r31, 0x01 ; 1
4a: 02 c0 rjmp .+4 ; 0x50 <__do_copy_data+0x10>
4c: 05 90 lpm r0, Z+
4e: 0d 92 st X+, r0
50: a0 30 cpi r26, 0x00 ; 0
52: b1 07 cpc r27, r17
54: d9 f7 brne .-10 ; 0x4c <__do_copy_data+0xc>
00000056 <__do_clear_bss>:
56: 21 e0 ldi r18, 0x01 ; 1
58: a0 e0 ldi r26, 0x00 ; 0
5a: b1 e0 ldi r27, 0x01 ; 1
5c: 01 c0 rjmp .+2 ; 0x60 <.do_clear_bss_start>
0000005e <.do_clear_bss_loop>:
5e: 1d 92 st X+, r1
00000060 <.do_clear_bss_start>:
60: a3 32 cpi r26, 0x23 ; 35
62: b2 07 cpc r27, r18
64: e1 f7 brne .-8 ; 0x5e <.do_clear_bss_loop>
66: 44 d0 rcall .+136 ; 0xf0 <main>
68: 67 c0 rjmp .+206 ; 0x138 <_exit>
0000006a <__bad_interrupt>:
6a: ca cf rjmp .-108 ; 0x0 <__vectors>
0000006c <zlicz>:
ADRDIOD[4][0]=2;
ADRDIOD[4][1]=1;
zlicz();
}
void zlicz(){
6c: ee e1 ldi r30, 0x1E ; 30
6e: f1 e0 ldi r31, 0x01 ; 1
char i; // zmienna pomocnicza
char j; // zmienna pomocnicza
for(i = 0 ; i < k ; ++i)
LICZV[i] = 0; // zerowanie tablicy
70: 11 92 st Z+, r1
void zlicz(){
char i; // zmienna pomocnicza
char j; // zmienna pomocnicza
for(i = 0 ; i < k ; ++i)
72: 81 e0 ldi r24, 0x01 ; 1
74: e5 32 cpi r30, 0x25 ; 37
76: f8 07 cpc r31, r24
78: d9 f7 brne .-10 ; 0x70 <zlicz+0x4>
7a: a0 e0 ldi r26, 0x00 ; 0
7c: b1 e0 ldi r27, 0x01 ; 1
LICZV[i] = 0; // zerowanie tablicy
for(i = 0 ; i < n ; ++i)
++LICZV[VDIOD[i]]; // po tych operacjach LICZV[i] będzie
zawierała
7e: ed 91 ld r30, X+
80: f0 e0 ldi r31, 0x00 ; 0
82: e2 5e subi r30, 0xE2 ; 226
84: fe 4f sbci r31, 0xFE ; 254
86: 80 81 ld r24, Z
88: 8f 5f subi r24, 0xFF ; 255
8a: 80 83 st Z, r24
char j; // zmienna pomocnicza
for(i = 0 ; i < k ; ++i)
LICZV[i] = 0; // zerowanie tablicy
for(i = 0 ; i < n ; ++i)
8c: 81 e0 ldi r24, 0x01 ; 1
8e: a5 30 cpi r26, 0x05 ; 5
90: b8 07 cpc r27, r24
92: a9 f7 brne .-22 ; 0x7e <zlicz+0x12>
94: ef e1 ldi r30, 0x1F ; 31
96: f1 e0 ldi r31, 0x01 ; 1
98: ae e1 ldi r26, 0x1E ; 30
9a: b1 e0 ldi r27, 0x01 ; 1
++LICZV[VDIOD[i]]; // po tych operacjach LICZV[i] będzie
zawierała
// liczbę wystąpień elementów o kluczu i
for(i = 1 ; i < k ; ++i)
LICZV[i] += LICZV[i-1]; // teraz LICZV[i] zawiera pozycje w
posortowanej
9c: 9d 91 ld r25, X+
9e: 80 81 ld r24, Z
a0: 89 0f add r24, r25
a2: 81 93 st Z+, r24
LICZV[i] = 0; // zerowanie tablicy
for(i = 0 ; i < n ; ++i)
++LICZV[VDIOD[i]]; // po tych operacjach LICZV[i] będzie
zawierała
// liczbę wystąpień elementów o kluczu i
for(i = 1 ; i < k ; ++i)
a4: 81 e0 ldi r24, 0x01 ; 1
a6: e5 32 cpi r30, 0x25 ; 37
a8: f8 07 cpc r31, r24
aa: c1 f7 brne .-16 ; 0x9c <zlicz+0x30>
ac: 84 e0 ldi r24, 0x04 ; 4
LICZV[i] += LICZV[i-1]; // teraz LICZV[i] zawiera pozycje w
posortowanej
// tablicy ostatniego elementu o kluczu i
for(i = n-1 ; i >= 0 ; --i)
{
j=--LICZV[VDIOD[i]]; // aktualizacja LICZV
ae: a8 2f mov r26, r24
b0: b0 e0 ldi r27, 0x00 ; 0
b2: fd 01 movw r30, r26
b4: e0 50 subi r30, 0x00 ; 0
b6: ff 4f sbci r31, 0xFF ; 255
b8: 90 81 ld r25, Z
ba: c9 2f mov r28, r25
bc: d0 e0 ldi r29, 0x00 ; 0
be: c2 5e subi r28, 0xE2 ; 226
c0: de 4f sbci r29, 0xFE ; 254
c2: e8 81 ld r30, Y
c4: e1 50 subi r30, 0x01 ; 1
c6: e8 83 st Y, r30
VDOUT[j] = VDIOD[i]; //wstawienie elementu na odpowiednią
pozycję
c8: f0 e0 ldi r31, 0x00 ; 0
ca: ef 01 movw r28, r30
cc: c7 5e subi r28, 0xE7 ; 231
ce: de 4f sbci r29, 0xFE ; 254
d0: 98 83 st Y, r25
ADRDOUT[j][0] = ADRDIOD[i][0]; // sortowanie adresów
d2: ee 0f add r30, r30
d4: ff 1f adc r31, r31
d6: eb 5f subi r30, 0xFB ; 251
d8: fe 4f sbci r31, 0xFE ; 254
da: aa 0f add r26, r26
dc: bb 1f adc r27, r27
de: a1 5f subi r26, 0xF1 ; 241
e0: be 4f sbci r27, 0xFE ; 254
e2: 9c 91 ld r25, X
e4: 90 83 st Z, r25
ADRDOUT[j][1] = ADRDIOD[i][1]; // sortowanie adresów
e6: 11 96 adiw r26, 0x01 ; 1
e8: 9c 91 ld r25, X
ea: 91 83 std Z+1, r25 ; 0x01
++LICZV[VDIOD[i]]; // po tych operacjach LICZV[i] będzie
zawierała
// liczbę wystąpień elementów o kluczu i
for(i = 1 ; i < k ; ++i)
LICZV[i] += LICZV[i-1]; // teraz LICZV[i] zawiera pozycje w
posortowanej
// tablicy ostatniego elementu o kluczu i
for(i = n-1 ; i >= 0 ; --i)
ec: 81 50 subi r24, 0x01 ; 1
ee: df cf rjmp .-66 ; 0xae <zlicz+0x42>
000000f0 <main>:
char ADRDIOD[5][2];//tablica adresów diod
char ADRDOUT[5][2];//tablica adresów diod po posegregowaniu
char LICZV[5]; // zawiera liczbę elementów o danej wartości
void main (void){
VDIOD[0]=1;
f0: 81 e0 ldi r24, 0x01 ; 1
f2: 80 93 00 01 sts 0x0100, r24
VDIOD[1]=2;
f6: 92 e0 ldi r25, 0x02 ; 2
f8: 90 93 01 01 sts 0x0101, r25
VDIOD[2]=6;
fc: 26 e0 ldi r18, 0x06 ; 6
fe: 20 93 02 01 sts 0x0102, r18
VDIOD[3]=4;
102: 24 e0 ldi r18, 0x04 ; 4
104: 20 93 03 01 sts 0x0103, r18
VDIOD[4]=3;
108: 23 e0 ldi r18, 0x03 ; 3
10a: 20 93 04 01 sts 0x0104, r18
ADRDIOD[0][0]=1;
10e: 80 93 0f 01 sts 0x010F, r24
ADRDIOD[0][1]=0;
112: 10 92 10 01 sts 0x0110, r1
ADRDIOD[1][0]=1;
116: 80 93 11 01 sts 0x0111, r24
ADRDIOD[1][1]=1;
11a: 80 93 12 01 sts 0x0112, r24
ADRDIOD[2][0]=1;
11e: 80 93 13 01 sts 0x0113, r24
ADRDIOD[2][1]=2;
122: 90 93 14 01 sts 0x0114, r25
ADRDIOD[3][0]=2;
126: 90 93 15 01 sts 0x0115, r25
ADRDIOD[3][1]=0;
12a: 10 92 16 01 sts 0x0116, r1
ADRDIOD[4][0]=2;
12e: 90 93 17 01 sts 0x0117, r25
ADRDIOD[4][1]=1;
132: 80 93 18 01 sts 0x0118, r24
zlicz();
136: 9a df rcall .-204 ; 0x6c <zlicz>
00000138 <_exit>:
138: f8 94 cli
0000013a <__stop_program>:
13a: ff cf rjmp .-2 ; 0x13a <__stop_program>
--
Pozdr
Janusz
Następne wpisy z tego wątku
- 06.04.14 17:56 Sylwester Łazar
- 08.04.14 19:51 Sylwester Łazar
Najnowsze wątki z tej grupy
- Mouser - koszt wysyłki
- [OT] Jak wycinac ksztalt w piance lub styropianie?
- FV--> ciepła woda w kranie
- Szok
- Dziwny schemat wzmacniacza m.cz.
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- CGNAT i ewentualne problemy
- wzmacniacz mocy
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- Propagation velocity v/c dla kabli RF
- Jakie natynkowe podwójne gniazdo z bolcem (2P+PE)
- Czujnik nacisku
- Protoków komunikacyjny do urządzenia pomiarowego
- Hiszpania bez pradu
- amperomierz w plusie
Najnowsze wątki
- 2025-06-16 Re: Płonie 3000 elektryków u wybrzeży Alaski
- 2025-06-16 Re: Tesla z najnowszym FSD potrafi przejechać dziecko i... pojechać dalej.
- 2025-06-15 Re: Kolejny expierd usiłuje wmówić błąd pilota wadliwego Boeinga
- 2025-06-14 Re: Boeing, który rozbił się w Indiach to był latający złom, bez serwisowania [złom,bo,Air,India,v.,złom,bo,Boening]
- 2025-06-14 Re: Boeing, który rozbił się w Indiach to był latający złom, bez serwisowania [złom,bo,Air,India,v.,złom,bo,Boening]
- 2025-06-16 Re: Tesla z najnowszym FSD potrafi przejechać dziecko i... pojechać dalej.
- 2025-06-15 Re: lekarka podjechała pod szpital Fordem Mondeo. Przyjechała tylko na chwilę, aby przekazać panu Sebastianowi obiad. Auto miało automatyczną skrzynię biegów, pani Monika wrzuciła bieg wsteczny, zostawiła auto na chodziei najprawdopodobniej wyszła z auta,
- 2025-06-15 Re: lekarka podjechała pod szpital Fordem Mondeo. Przyjechała tylko na chwilę, aby przekazać panu Sebastianowi obiad. Auto miało automatyczną skrzynię biegów, pani Monika wrzuciła bieg wsteczny, zostawiła auto na chodzie i najprawdopodobniej wyszła z auta
- 2025-06-15 Re: lekarka podjechała pod szpital Fordem Mondeo. Przyjechała tylko na chwilę, aby przekazać panu Sebastianowi obiad. Auto miało automatyczną skrzynię biegów, pani Monika wrzuciła bieg wsteczny, zostawiła auto na chodzie i najprawdopodobniej wyszła z auta
- 2025-06-15 Re: lekarka podjechała pod szpital Fordem Mondeo. Przyjechała tylko na chwilę, aby przekazać panu Sebastianowi obiad. Auto miało automatyczną skrzynię biegów, pani Monika wrzuciła bieg wsteczny, zostawiła auto na chodzie i najprawdopodobniej wyszła z auta
- 2025-06-15 Jaka się wozi tyle ton niestabilnego materiału wybuchowego
- 2025-06-15 Re: Czy Trump wygrałby z Bidenem jakby mu mecenas Giertych protesty wyborcze pisał?
- 2025-06-14 Warszawa => Senior Account Manager <=
- 2025-06-14 Warszawa => Senior C++ Developer (analiza numeryczna i modelowanie) <=
- 2025-06-13 "Wśród uczestników [tajnych obrad Grupy Bilderberg - przyp JMJ] znajdujemy szefa MSZ Polski Radosława Sikorskiego oraz jego żonę Anne Applebaum."