-
Data: 2014-04-06 16:28:10
Temat: Re: Odp: C vs. ASM na przykładzie PIC18F
Od: janusz_k <J...@o...pl> szukaj wiadomości tego autora
[ pokaż wszystkie 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
- Dławik CM
- JDG i utylizacja sprzetu
- Identyfikacja układ SO8 w sterowniku migających światełek choinkowych
- DS1813-10 się psuje
- Taki tam szkolny problem...
- LIR2032 a ML2032
- SmartWatch Multimetr bezprzewodowy
- olej psuje?
- Internet w lesie - Starlink
- Opis produktu z Aliexpress
- No proszę, a śmialiście się z hindusów.
- Zewnętrzne napięcie referencyjne LM385 1,2V -> 100mV dla ICL7106, Metex M-3800
- karta parkingowa
- Wl/Wyl (On/Off) bialy/niebieski
- I3C
Najnowsze wątki
- 2024-12-01 "Chciałem zamówić kurs tym"
- 2024-11-30 Windykatorzy ścigają spadkobierców z mandat nieboszczyka za przekroczenie prędkości???
- 2024-11-30 Łódź => Technical Artist <=
- 2024-11-30 Lublin => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-11-30 Warszawa => Microsoft Dynamics 365 Business Central Developer <=
- 2024-11-30 Bieruń => Team Lead / Tribe Lead FrontEnd <=
- 2024-11-30 Zielona Góra => Senior PHP Symfony Developer <=
- 2024-11-30 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-11-30 Lublin => Spedytor międzynarodowy <=
- 2024-11-30 Warszawa => Mid IT Recruiter <=
- 2024-11-30 Warszawa => Fullstack Developer <=
- 2024-11-30 Żerniki => Dyspozytor Międzynarodowy <=
- 2024-11-30 Warszawa => System Architect (background deweloperski w Java) <=
- 2024-11-30 Katowice => Key Account Manager (ERP) <=
- 2024-11-30 Immatrykulacja...