Hur mycket går det att slakta i denna kod?
Hur mycket går det att slakta i denna kod?
Källa www.jonshobby.se/elforum/Blink-LED_Atmega16U4.zip
Blinking_LED.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000017c 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .bss 00000002 00800100 00800100 000001f0 2**0
ALLOC
2 .debug_aranges 00000020 00000000 00000000 000001f0 2**0
CONTENTS, READONLY, DEBUGGING
3 .debug_pubnames 00000057 00000000 00000000 00000210 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_info 0000012c 00000000 00000000 00000267 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_abbrev 000000be 00000000 00000000 00000393 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_line 000001ce 00000000 00000000 00000451 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_frame 00000040 00000000 00000000 00000620 2**2
CONTENTS, READONLY, DEBUGGING
8 .debug_str 0000013b 00000000 00000000 00000660 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 56 00 jmp 0xac ; 0xac <__ctors_end>
4: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
8: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
10: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
14: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
18: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
1c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
20: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
24: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
28: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
2c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
30: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
34: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
38: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
3c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
40: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
44: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
48: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
4c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
50: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
54: 0c 94 a2 00 jmp 0x144 ; 0x144 <__vector_21>
58: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
5c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
60: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
64: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
68: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
6c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
70: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
74: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
78: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
7c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
80: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
84: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
88: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
8c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
90: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
94: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
98: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
9c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
a0: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
a4: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
a8: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
000000ac <__ctors_end>:
ac: 11 24 eor r1, r1
ae: 1f be out 0x3f, r1 ; 63
b0: cf ef ldi r28, 0xFF ; 255
b2: d5 e0 ldi r29, 0x05 ; 5
b4: de bf out 0x3e, r29 ; 62
b6: cd bf out 0x3d, r28 ; 61
000000b8 <__do_clear_bss>:
b8: 11 e0 ldi r17, 0x01 ; 1
ba: a0 e0 ldi r26, 0x00 ; 0
bc: b1 e0 ldi r27, 0x01 ; 1
be: 01 c0 rjmp .+2 ; 0xc2 <.do_clear_bss_start>
000000c0 <.do_clear_bss_loop>:
c0: 1d 92 st X+, r1
000000c2 <.do_clear_bss_start>:
c2: a2 30 cpi r26, 0x02 ; 2
c4: b1 07 cpc r27, r17
c6: e1 f7 brne .-8 ; 0xc0 <.do_clear_bss_loop>
c8: 0e 94 91 00 call 0x122 ; 0x122 <main>
cc: 0c 94 bc 00 jmp 0x178 ; 0x178 <_exit>
000000d0 <__bad_interrupt>:
d0: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
000000d4 <SetupHardware>:
d4: 84 b7 in r24, 0x34 ; 52
d6: 87 7f andi r24, 0xF7 ; 247
d8: 84 bf out 0x34, r24 ; 52
da: 88 e1 ldi r24, 0x18 ; 24
dc: 0f b6 in r0, 0x3f ; 63
de: f8 94 cli
e0: 80 93 60 00 sts 0x0060, r24
e4: 10 92 60 00 sts 0x0060, r1
e8: 0f be out 0x3f, r0 ; 63
ea: 80 e0 ldi r24, 0x00 ; 0
ec: 90 e0 ldi r25, 0x00 ; 0
ee: 20 e8 ldi r18, 0x80 ; 128
f0: 0f b6 in r0, 0x3f ; 63
f2: f8 94 cli
f4: 20 93 61 00 sts 0x0061, r18
f8: 80 93 61 00 sts 0x0061, r24
fc: 0f be out 0x3f, r0 ; 63
fe: 9f ef ldi r25, 0xFF ; 255
100: 94 b9 out 0x04, r25 ; 4
102: 80 ec ldi r24, 0xC0 ; 192
104: 87 b9 out 0x07, r24 ; 7
106: 9a b9 out 0x0a, r25 ; 10
108: 80 e4 ldi r24, 0x40 ; 64
10a: 8d b9 out 0x0d, r24 ; 13
10c: 83 ef ldi r24, 0xF3 ; 243
10e: 80 bb out 0x10, r24 ; 16
110: 92 e0 ldi r25, 0x02 ; 2
112: 94 bd out 0x24, r25 ; 36
114: 85 e0 ldi r24, 0x05 ; 5
116: 85 bd out 0x25, r24 ; 37
118: 8e e4 ldi r24, 0x4E ; 78
11a: 87 bd out 0x27, r24 ; 39
11c: 90 93 6e 00 sts 0x006E, r25
120: 08 95 ret
00000122 <main>:
122: 80 e8 ldi r24, 0x80 ; 128
124: 85 bf out 0x35, r24 ; 53
126: 85 bf out 0x35, r24 ; 53
128: 0e 94 6a 00 call 0xd4 ; 0xd4 <SetupHardware>
12c: 78 94 sei
12e: 90 e4 ldi r25, 0x40 ; 64
130: 80 91 01 01 lds r24, 0x0101
134: 88 23 and r24, r24
136: e1 f3 breq .-8 ; 0x130 <main+0xe>
138: 8e b1 in r24, 0x0e ; 14
13a: 89 27 eor r24, r25
13c: 8e b9 out 0x0e, r24 ; 14
13e: 10 92 01 01 sts 0x0101, r1
142: f6 cf rjmp .-20 ; 0x130 <main+0xe>
00000144 <__vector_21>:
144: 1f 92 push r1
146: 0f 92 push r0
148: 0f b6 in r0, 0x3f ; 63
14a: 0f 92 push r0
14c: 11 24 eor r1, r1
14e: 8f 93 push r24
150: 80 91 00 01 lds r24, 0x0100
154: 8f 5f subi r24, 0xFF ; 255
156: 80 93 00 01 sts 0x0100, r24
15a: 80 91 00 01 lds r24, 0x0100
15e: 84 36 cpi r24, 0x64 ; 100
160: 28 f0 brcs .+10 ; 0x16c <__vector_21+0x28>
162: 10 92 00 01 sts 0x0100, r1
166: 81 e0 ldi r24, 0x01 ; 1
168: 80 93 01 01 sts 0x0101, r24
16c: 8f 91 pop r24
16e: 0f 90 pop r0
170: 0f be out 0x3f, r0 ; 63
172: 0f 90 pop r0
174: 1f 90 pop r1
176: 18 95 reti
00000178 <_exit>:
178: f8 94 cli
0000017a <__stop_program>:
17a: ff cf rjmp .-2 ; 0x17a <__stop_program>
Hur mycket går det att slakta i denna kod?
Jag vill sätta datariktningsregistret. Tända och släcka 0x0e pin x. Inget annat. Ingen fördröjning(jag skriver en egen loop i loop). Quick and dirty.
Blinking_LED.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000017c 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .bss 00000002 00800100 00800100 000001f0 2**0
ALLOC
2 .debug_aranges 00000020 00000000 00000000 000001f0 2**0
CONTENTS, READONLY, DEBUGGING
3 .debug_pubnames 00000057 00000000 00000000 00000210 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_info 0000012c 00000000 00000000 00000267 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_abbrev 000000be 00000000 00000000 00000393 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_line 000001ce 00000000 00000000 00000451 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_frame 00000040 00000000 00000000 00000620 2**2
CONTENTS, READONLY, DEBUGGING
8 .debug_str 0000013b 00000000 00000000 00000660 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 56 00 jmp 0xac ; 0xac <__ctors_end>
4: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
8: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
10: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
14: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
18: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
1c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
20: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
24: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
28: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
2c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
30: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
34: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
38: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
3c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
40: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
44: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
48: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
4c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
50: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
54: 0c 94 a2 00 jmp 0x144 ; 0x144 <__vector_21>
58: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
5c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
60: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
64: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
68: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
6c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
70: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
74: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
78: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
7c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
80: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
84: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
88: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
8c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
90: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
94: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
98: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
9c: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
a0: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
a4: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
a8: 0c 94 68 00 jmp 0xd0 ; 0xd0 <__bad_interrupt>
000000ac <__ctors_end>:
ac: 11 24 eor r1, r1
ae: 1f be out 0x3f, r1 ; 63
b0: cf ef ldi r28, 0xFF ; 255
b2: d5 e0 ldi r29, 0x05 ; 5
b4: de bf out 0x3e, r29 ; 62
b6: cd bf out 0x3d, r28 ; 61
000000b8 <__do_clear_bss>:
b8: 11 e0 ldi r17, 0x01 ; 1
ba: a0 e0 ldi r26, 0x00 ; 0
bc: b1 e0 ldi r27, 0x01 ; 1
be: 01 c0 rjmp .+2 ; 0xc2 <.do_clear_bss_start>
000000c0 <.do_clear_bss_loop>:
c0: 1d 92 st X+, r1
000000c2 <.do_clear_bss_start>:
c2: a2 30 cpi r26, 0x02 ; 2
c4: b1 07 cpc r27, r17
c6: e1 f7 brne .-8 ; 0xc0 <.do_clear_bss_loop>
c8: 0e 94 91 00 call 0x122 ; 0x122 <main>
cc: 0c 94 bc 00 jmp 0x178 ; 0x178 <_exit>
000000d0 <__bad_interrupt>:
d0: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
000000d4 <SetupHardware>:
d4: 84 b7 in r24, 0x34 ; 52
d6: 87 7f andi r24, 0xF7 ; 247
d8: 84 bf out 0x34, r24 ; 52
da: 88 e1 ldi r24, 0x18 ; 24
dc: 0f b6 in r0, 0x3f ; 63
de: f8 94 cli
e0: 80 93 60 00 sts 0x0060, r24
e4: 10 92 60 00 sts 0x0060, r1
e8: 0f be out 0x3f, r0 ; 63
ea: 80 e0 ldi r24, 0x00 ; 0
ec: 90 e0 ldi r25, 0x00 ; 0
ee: 20 e8 ldi r18, 0x80 ; 128
f0: 0f b6 in r0, 0x3f ; 63
f2: f8 94 cli
f4: 20 93 61 00 sts 0x0061, r18
f8: 80 93 61 00 sts 0x0061, r24
fc: 0f be out 0x3f, r0 ; 63
fe: 9f ef ldi r25, 0xFF ; 255
100: 94 b9 out 0x04, r25 ; 4
102: 80 ec ldi r24, 0xC0 ; 192
104: 87 b9 out 0x07, r24 ; 7
106: 9a b9 out 0x0a, r25 ; 10
108: 80 e4 ldi r24, 0x40 ; 64
10a: 8d b9 out 0x0d, r24 ; 13
10c: 83 ef ldi r24, 0xF3 ; 243
10e: 80 bb out 0x10, r24 ; 16
110: 92 e0 ldi r25, 0x02 ; 2
112: 94 bd out 0x24, r25 ; 36
114: 85 e0 ldi r24, 0x05 ; 5
116: 85 bd out 0x25, r24 ; 37
118: 8e e4 ldi r24, 0x4E ; 78
11a: 87 bd out 0x27, r24 ; 39
11c: 90 93 6e 00 sts 0x006E, r25
120: 08 95 ret
00000122 <main>:
122: 80 e8 ldi r24, 0x80 ; 128
124: 85 bf out 0x35, r24 ; 53
126: 85 bf out 0x35, r24 ; 53
128: 0e 94 6a 00 call 0xd4 ; 0xd4 <SetupHardware>
12c: 78 94 sei
12e: 90 e4 ldi r25, 0x40 ; 64
130: 80 91 01 01 lds r24, 0x0101
134: 88 23 and r24, r24
136: e1 f3 breq .-8 ; 0x130 <main+0xe>
138: 8e b1 in r24, 0x0e ; 14
13a: 89 27 eor r24, r25
13c: 8e b9 out 0x0e, r24 ; 14
13e: 10 92 01 01 sts 0x0101, r1
142: f6 cf rjmp .-20 ; 0x130 <main+0xe>
00000144 <__vector_21>:
144: 1f 92 push r1
146: 0f 92 push r0
148: 0f b6 in r0, 0x3f ; 63
14a: 0f 92 push r0
14c: 11 24 eor r1, r1
14e: 8f 93 push r24
150: 80 91 00 01 lds r24, 0x0100
154: 8f 5f subi r24, 0xFF ; 255
156: 80 93 00 01 sts 0x0100, r24
15a: 80 91 00 01 lds r24, 0x0100
15e: 84 36 cpi r24, 0x64 ; 100
160: 28 f0 brcs .+10 ; 0x16c <__vector_21+0x28>
162: 10 92 00 01 sts 0x0100, r1
166: 81 e0 ldi r24, 0x01 ; 1
168: 80 93 01 01 sts 0x0101, r24
16c: 8f 91 pop r24
16e: 0f 90 pop r0
170: 0f be out 0x3f, r0 ; 63
172: 0f 90 pop r0
174: 1f 90 pop r1
176: 18 95 reti
00000178 <_exit>:
178: f8 94 cli
0000017a <__stop_program>:
17a: ff cf rjmp .-2 ; 0x17a <__stop_program>
Hur mycket går det att slakta i denna kod?
Jag vill sätta datariktningsregistret. Tända och släcka 0x0e pin x. Inget annat. Ingen fördröjning(jag skriver en egen loop i loop). Quick and dirty.
Re: Hur mycket går det att slakta i denna kod?
> Jag vill sätta datariktningsregistret. Tända och släcka 0x0e pin x.
Men gör det då. Vad har det att göra med allt det andra skräpet?
Tveksamt om något är road av att läsa en massa dis-assembly listningar.
I ZIP'en du har länkat till har du ju även C-källkoden direkt också.
Varför utgår du inte från *den* istället för assembler listan ?
Men gör det då. Vad har det att göra med allt det andra skräpet?
Tveksamt om något är road av att läsa en massa dis-assembly listningar.
I ZIP'en du har länkat till har du ju även C-källkoden direkt också.
Varför utgår du inte från *den* istället för assembler listan ?
Re: Hur mycket går det att slakta i denna kod?
Finns det inget som måste vara med? Det i början verkar obligatoriskt. Eller är det bara C skräp?
Början till min "Lopop i loop fördröjning."
/ Lopop i loop fördröjning.
ldi r17, 0x00 /nolla ett reg ex. r17 OM DE ÄR LEDIGA
ldi r18, 0x00 /nolla ett reg ex. r18 OM DE ÄR LEDIGA
adress1:
inc r18 /öka r18 med 1
adress2:
inc r17 /öka r17 med 1
/ Här kan man lägga en dummy operation för att slöa ner mer
cpi r17,0x00 /Jämför r17 med 0
brne .-4????? /Hoppa till adress2 om inte lika EJ KLAR!
cpi r18,0x00 /Jämför r18 med 0
brne .-4????? /Hoppa till adress1 om inte lika EJ KLAR!
Vilka register är lämpliga till "user"? Hur räknar man ut hur många steg brne skall hoppa?
C Kan jag för lite om ännu. Assembler gäller än så länge. Nån stans fick jag både C och assembler i samma textfil om vart annat. På det viset kan jag förstå C bättre genom att se assembler översättningen på raden under. Minns inte var. Kan ha varit via AVRstudio 4.
Början till min "Lopop i loop fördröjning."
/ Lopop i loop fördröjning.
ldi r17, 0x00 /nolla ett reg ex. r17 OM DE ÄR LEDIGA
ldi r18, 0x00 /nolla ett reg ex. r18 OM DE ÄR LEDIGA
adress1:
inc r18 /öka r18 med 1
adress2:
inc r17 /öka r17 med 1
/ Här kan man lägga en dummy operation för att slöa ner mer
cpi r17,0x00 /Jämför r17 med 0
brne .-4????? /Hoppa till adress2 om inte lika EJ KLAR!
cpi r18,0x00 /Jämför r18 med 0
brne .-4????? /Hoppa till adress1 om inte lika EJ KLAR!
Vilka register är lämpliga till "user"? Hur räknar man ut hur många steg brne skall hoppa?
C Kan jag för lite om ännu. Assembler gäller än så länge. Nån stans fick jag både C och assembler i samma textfil om vart annat. På det viset kan jag förstå C bättre genom att se assembler översättningen på raden under. Minns inte var. Kan ha varit via AVRstudio 4.
Re: Hur mycket går det att slakta i denna kod?
Man kan begära en assembler-källkod från många C-kompilers, då kan man se vad ett C-kommando utlöser av asm-steg.
Re: Hur mycket går det att slakta i denna kod?
Koden växer fram.
ldi r24, 0x40 ; $0040=dec 64 DDRE = (1<<PE6)
out 0x0d, r24 ; LED port as output
; Hit skall sista jmp hoppa
in r24, 0x0e ; 14PORTE ^= (1<<PE6);
eor r24, 0x40 ; Toggle r24
out 0x0e, r24 ; Toggle PE6
/ Lopop i loop fördröjning.
ldi r17, 0x00 /nolla ett reg ex. r17 OM DE ÄR LEDIGA
ldi r18, 0x00 /nolla ett reg ex. r18 OM DE ÄR LEDIGA
adress1:
inc r18 /öka r18 med 1
adress2:
inc r17 /öka r17 med 1
/ Här kan man lägga en dummy operation för att slöa ner mer
cpi r17,0x00 /Jämför r17 med 0
brne .-4????? /Hoppa till adress2 om inte lika EJ KLAR!
cpi r18,0x00 /Jämför r18 med 0
brne .-4????? /Hoppa till adress1 om inte lika EJ KLAR!
jmp 00?? /Hoppa till adress där toggle börjar EJ KLAR!
Finns det hopp om att det funkar? Kan man ersätte "out 0x0d, r24" med "ld 0xd0,40"? Och frågar igen Vilka register är lediga? Kan jag ta r1, r2 och r3 istället?
ldi r24, 0x40 ; $0040=dec 64 DDRE = (1<<PE6)
out 0x0d, r24 ; LED port as output
; Hit skall sista jmp hoppa
in r24, 0x0e ; 14PORTE ^= (1<<PE6);
eor r24, 0x40 ; Toggle r24
out 0x0e, r24 ; Toggle PE6
/ Lopop i loop fördröjning.
ldi r17, 0x00 /nolla ett reg ex. r17 OM DE ÄR LEDIGA
ldi r18, 0x00 /nolla ett reg ex. r18 OM DE ÄR LEDIGA
adress1:
inc r18 /öka r18 med 1
adress2:
inc r17 /öka r17 med 1
/ Här kan man lägga en dummy operation för att slöa ner mer
cpi r17,0x00 /Jämför r17 med 0
brne .-4????? /Hoppa till adress2 om inte lika EJ KLAR!
cpi r18,0x00 /Jämför r18 med 0
brne .-4????? /Hoppa till adress1 om inte lika EJ KLAR!
jmp 00?? /Hoppa till adress där toggle börjar EJ KLAR!
Finns det hopp om att det funkar? Kan man ersätte "out 0x0d, r24" med "ld 0xd0,40"? Och frågar igen Vilka register är lediga? Kan jag ta r1, r2 och r3 istället?
Re: Hur mycket går det att slakta i denna kod?
Vilka register som är lediga bestämmer du själv, det är ju du som skriver programmet...
Re: Hur mycket går det att slakta i denna kod?
Med erfarenhet har jag lärt mig att ibland kan vissa saker vara "reserverade". Men jag vågar nog att testa r1,r2 och r3, om resten funkar.
Försöker få AVRStudio 4 att göra hand assemblerings jobbet. Men det vill inte. Har startat ett asm project. Och gjort en build. Bara ett error
, men sen är det stopp. View/Disassembler och debug är "gråa".
Försöker få AVRStudio 4 att göra hand assemblerings jobbet. Men det vill inte. Har startat ett asm project. Och gjort en build. Bara ett error

Re: Hur mycket går det att slakta i denna kod?
> Bara ett error...
Är det något slags företagshemlighet *vilket* "error" du får?
> Försöker få AVRStudio 4 att göra hand assemblerings jobbet.
Bara en liten detalj, AVRStudio *hand* assemblerar inte.
AVRStudio saknar händer...
> brne .-4????? /Hoppa till adress2 om inte lika EJ KLAR!
Vad är ".-4?????" ?
Är det något slags företagshemlighet *vilket* "error" du får?
> Försöker få AVRStudio 4 att göra hand assemblerings jobbet.
Bara en liten detalj, AVRStudio *hand* assemblerar inte.
AVRStudio saknar händer...

> brne .-4????? /Hoppa till adress2 om inte lika EJ KLAR!
Vad är ".-4?????" ?
Re: Hur mycket går det att slakta i denna kod?
Du har så rätt så. "brne .-4" var det som inte AVRStudio 4 gillade. Klippte och klistrade det från Blinking_LED.lss
ldi r17, 0x00
ldi r18, 0x00
inc r18
inc r17
cpi r17,0x00
brne 0003
cpi r18,0x00
brne 0002
Funkar i AVRStudio 4
. brne hoppar visst i "word". Nollan räknas nog.
ldi r17, 0x00
ldi r18, 0x00
inc r18
inc r17
cpi r17,0x00
brne 0003
cpi r18,0x00
brne 0002
Funkar i AVRStudio 4

Re: Hur mycket går det att slakta i denna kod?
Det är generellt sett snyggare med hopp till labels istället för rellativa hopp.
Re: Hur mycket går det att slakta i denna kod?
Labels är för hög nivå för mig
rå assembler gillar jag
ldi r24, 0x40 ; $40=bin 0010 0000=pin 6 DDRE
out 0x0d, r24 ; $000d=dec 13 LED port as output
ldi r25, 0x40 ; För eor funkar bara mot ett annat register
in r24, $0e ; Läs PE6
eor r24, r25 ; Toggla med R25
out $0e, r24 ; Toggle PE6
;/ Lopop i loop fördröjning.
ldi r17, 0xfe ; nolla ett reg ex. r17
ldi r18, 0xff ; nolla ett reg ex. r18
inc r18 ; öka r18 med 1
inc r17 ; öka r17 med 1
;/ Här kan man lägga en dummy operation för att slöa ner mer
cpi r17,0x00 ; Jämför r17 med 0
brne $0009 ; Hoppa till inc r17 om inte lika
cpi r18,0x00 ;/Jämför r18 med 0
brne $0008 ;/Hoppa till inc r18 om inte lika
Funkar i AVRStudio 4. Skall prova i "simple-usb", som jag köpte av
thepirateboy här på forumet. Med ATmega16u4. Kommer det blinka sakta eller inte synas...?


ldi r24, 0x40 ; $40=bin 0010 0000=pin 6 DDRE
out 0x0d, r24 ; $000d=dec 13 LED port as output
ldi r25, 0x40 ; För eor funkar bara mot ett annat register
in r24, $0e ; Läs PE6
eor r24, r25 ; Toggla med R25
out $0e, r24 ; Toggle PE6
;/ Lopop i loop fördröjning.
ldi r17, 0xfe ; nolla ett reg ex. r17
ldi r18, 0xff ; nolla ett reg ex. r18
inc r18 ; öka r18 med 1
inc r17 ; öka r17 med 1
;/ Här kan man lägga en dummy operation för att slöa ner mer
cpi r17,0x00 ; Jämför r17 med 0
brne $0009 ; Hoppa till inc r17 om inte lika
cpi r18,0x00 ;/Jämför r18 med 0
brne $0008 ;/Hoppa till inc r18 om inte lika
Funkar i AVRStudio 4. Skall prova i "simple-usb", som jag köpte av
thepirateboy här på forumet. Med ATmega16u4. Kommer det blinka sakta eller inte synas...?
Re: Hur mycket går det att slakta i denna kod?
"Rå assembler" är den rätta väg att gå när man vill att inget ska fungera...
Jag har i sin tid gjort en disassembler till Z80, att göra den var enkelt men väldigt snabbt lärde jag mig att labels är det enda rätta för karlar med hår på magen! Jag modifierade den till att ta med labels och det fungerade extremt mycket bättre, faktisk så bra att jag kunde disassemblera den BASIC som fanns på en TRS80. Jag fick ändra ett par småsaker som sannolikt var som en fingerprint i koden men efter det (och innan också förvisso) kunde jag assemblera skiten och det fungerade!
Sedan kunde jag lägga till saker och ändra kommandon, allt utan att det sket sig och det var enbart tack vara att jag använde labels.
Kör man utan labels är det för att man inte vill programmera men debugga istället, själv tycker jag att det är roligare att åstadkomma något...
Jag har i sin tid gjort en disassembler till Z80, att göra den var enkelt men väldigt snabbt lärde jag mig att labels är det enda rätta för karlar med hår på magen! Jag modifierade den till att ta med labels och det fungerade extremt mycket bättre, faktisk så bra att jag kunde disassemblera den BASIC som fanns på en TRS80. Jag fick ändra ett par småsaker som sannolikt var som en fingerprint i koden men efter det (och innan också förvisso) kunde jag assemblera skiten och det fungerade!
Sedan kunde jag lägga till saker och ändra kommandon, allt utan att det sket sig och det var enbart tack vara att jag använde labels.
Kör man utan labels är det för att man inte vill programmera men debugga istället, själv tycker jag att det är roligare att åstadkomma något...
Re: Hur mycket går det att slakta i denna kod?

Varför i hela friden öppnar du inte databladet och läser hur du skall konfigurera porten och sedan sätta bitarna till önskat värde på porten?
Och C lär man sig inte genom att titta på vilken maskinkod/assemblerkod kompilatorn generar. Då får du hålla på till Sankte Per kallar på dig.