Пн окт 16, 2017 20:15:36
Вт окт 17, 2017 17:41:15
Вт окт 17, 2017 18:17:34
это в применении к AVR практически всегда безусловно правильный совет. вы как-то совсем упускаете из виду, что главный ресурс AVR, который стоит беречь всеми силами, это ОЗУ. так вот, использование не-static функций в обработчике прерывания приводит к тому, что в стеке сохраняется слишком много регистров, а в случае с вызовом функций из других модулей или библиотечных, будут сохранены в стеке вообще все рабочие регистры.viiv писал(а):Это (во многих случаях) вредный совет.
Ср окт 18, 2017 11:44:21
/*
static void* my_memset (void *b, int c, int s)
{
register char* p = (char*) b;
while (s-- > 0)
*p++ = (char) c;
return b;
}
*/
static char buffer [18];
ISR (INT0_vect)
{
memset (buffer, 0, sizeof (buffer));
}
00000090 <__vector_1>:
90: 1f 92 push r1
92: 0f 92 push r0
94: 0f b6 in r0, 0x3f ; 63
96: 0f 92 push r0
98: 11 24 eor r1, r1
9a: 8f 93 push r24
9c: af 93 push r26
9e: bf 93 push r27
a0: ef 93 push r30
a2: ff 93 push r31
a4: 82 e1 ldi r24, 0x12 ; 18
a6: e0 e0 ldi r30, 0x00 ; 0
a8: f1 e0 ldi r31, 0x01 ; 1
aa: df 01 movw r26, r30
ac: 1d 92 st X+, r1
ae: 8a 95 dec r24
b0: e9 f7 brne .-6 ; 0xac <__vector_1+0x1c>
b2: ff 91 pop r31
b4: ef 91 pop r30
b6: bf 91 pop r27
b8: af 91 pop r26
ba: 8f 91 pop r24
bc: 0f 90 pop r0
be: 0f be out 0x3f, r0 ; 63
c0: 0f 90 pop r0
c2: 1f 90 pop r1
c4: 18 95 reti
000000c6 <main>:
c6: 89 ea ldi r24, 0xA9 ; 169
c8: 90 e0 ldi r25, 0x00 ; 0
ca: 08 95 ret
000000cc <_exit>:
cc: f8 94 cli
000000ce <__stop_program>:
ce: ff cf rjmp .-2 ; 0xce <__stop_program>
00000090 <__vector_1>:
90: 1f 92 push r1
92: 0f 92 push r0
94: 0f b6 in r0, 0x3f ; 63
96: 0f 92 push r0
98: 11 24 eor r1, r1
9a: 8f 93 push r24
9c: ef 93 push r30
9e: ff 93 push r31
a0: e0 e0 ldi r30, 0x00 ; 0
a2: f1 e0 ldi r31, 0x01 ; 1
a4: 11 92 st Z+, r1
a6: 81 e0 ldi r24, 0x01 ; 1
a8: e2 31 cpi r30, 0x12 ; 18
aa: f8 07 cpc r31, r24
ac: d9 f7 brne .-10 ; 0xa4 <__vector_1+0x14>
ae: ff 91 pop r31
b0: ef 91 pop r30
b2: 8f 91 pop r24
b4: 0f 90 pop r0
b6: 0f be out 0x3f, r0 ; 63
b8: 0f 90 pop r0
ba: 1f 90 pop r1
bc: 18 95 reti
000000be <main>:
be: 89 ea ldi r24, 0xA9 ; 169
c0: 90 e0 ldi r25, 0x00 ; 0
c2: 08 95 ret
000000c4 <_exit>:
c4: f8 94 cli
000000c6 <__stop_program>:
c6: ff cf rjmp .-2 ; 0xc6 <__stop_program>
Чт окт 19, 2017 13:38:47
Чт окт 19, 2017 15:27:02
низачотviiv писал(а):Провел лабораторную работу.
#include <avr/io.h>
static uint8_t func_local(uint8_t b){
return (b >> 2) | (b << 2);
}
int main(void){
while(1){
PORTB = func_local(PINB);
PORTB = func_module(PINB);
}
}
#include <avr/io.h>
static uint8_t func_local2(uint8_t dd){
return dd + (1<<dd);
}
uint8_t func_module(uint8_t d){
return func_local2(d>>2) + (d<<2);
}
Device: atmega8
Program: 118 bytes (1.4% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
Device: atmega8
Program: 152 bytes (1.9% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
и без staticDevice: atmega8
Program: 118 bytes (1.4% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
Device: atmega8
Program: 154 bytes (1.9% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
Чт окт 19, 2017 16:59:10
text data bss dec hex filename
114 0 0 114 72 ./sta
text data bss dec hex filename
148 0 0 148 94 ./std
text data bss dec hex filename
112 0 0 112 70 ./sta-lto
text data bss dec hex filename
112 0 0 112 70 ./std-lto
Disassembly of section .text:
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end>
2: 19 c0 rjmp .+50 ; 0x36 <__bad_interrupt>
4: 18 c0 rjmp .+48 ; 0x36 <__bad_interrupt>
6: 17 c0 rjmp .+46 ; 0x36 <__bad_interrupt>
8: 16 c0 rjmp .+44 ; 0x36 <__bad_interrupt>
a: 15 c0 rjmp .+42 ; 0x36 <__bad_interrupt>
c: 14 c0 rjmp .+40 ; 0x36 <__bad_interrupt>
e: 13 c0 rjmp .+38 ; 0x36 <__bad_interrupt>
10: 12 c0 rjmp .+36 ; 0x36 <__bad_interrupt>
12: 11 c0 rjmp .+34 ; 0x36 <__bad_interrupt>
14: 10 c0 rjmp .+32 ; 0x36 <__bad_interrupt>
16: 0f c0 rjmp .+30 ; 0x36 <__bad_interrupt>
18: 0e c0 rjmp .+28 ; 0x36 <__bad_interrupt>
1a: 0d c0 rjmp .+26 ; 0x36 <__bad_interrupt>
1c: 0c c0 rjmp .+24 ; 0x36 <__bad_interrupt>
1e: 0b c0 rjmp .+22 ; 0x36 <__bad_interrupt>
20: 0a c0 rjmp .+20 ; 0x36 <__bad_interrupt>
22: 09 c0 rjmp .+18 ; 0x36 <__bad_interrupt>
24: 08 c0 rjmp .+16 ; 0x36 <__bad_interrupt>
00000026 <__ctors_end>:
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf e5 ldi r28, 0x5F ; 95
2c: d4 e0 ldi r29, 0x04 ; 4
2e: de bf out 0x3e, r29 ; 62
30: cd bf out 0x3d, r28 ; 61
32: 09 d0 rcall .+18 ; 0x46 <main>
34: 2d c0 rjmp .+90 ; 0x90 <_exit>
00000036 <__bad_interrupt>:
36: e4 cf rjmp .-56 ; 0x0 <__vectors>
00000038 <func_local>:
38: 98 2f mov r25, r24
3a: 99 0f add r25, r25
3c: 99 0f add r25, r25
3e: 86 95 lsr r24
40: 86 95 lsr r24
42: 89 2b or r24, r25
44: 08 95 ret
00000046 <main>:
46: 96 b3 in r25, 0x16 ; 22
48: 89 2f mov r24, r25
4a: 88 0f add r24, r24
4c: 88 0f add r24, r24
4e: 96 95 lsr r25
50: 96 95 lsr r25
52: 89 2b or r24, r25
54: 88 bb out 0x18, r24 ; 24
56: 86 b3 in r24, 0x16 ; 22
58: 0c d0 rcall .+24 ; 0x72 <func_module>
5a: 88 bb out 0x18, r24 ; 24
5c: f4 cf rjmp .-24 ; 0x46 <main>
0000005e <func_local2>:
5e: 21 e0 ldi r18, 0x01 ; 1
60: 30 e0 ldi r19, 0x00 ; 0
62: 08 2e mov r0, r24
64: 02 c0 rjmp .+4 ; 0x6a <func_local2+0xc>
66: 22 0f add r18, r18
68: 33 1f adc r19, r19
6a: 0a 94 dec r0
6c: e2 f7 brpl .-8 ; 0x66 <func_local2+0x8>
6e: 82 0f add r24, r18
70: 08 95 ret
00000072 <func_module>:
72: 98 2f mov r25, r24
74: 96 95 lsr r25
76: 96 95 lsr r25
78: 88 0f add r24, r24
7a: 88 0f add r24, r24
7c: 89 0f add r24, r25
7e: 21 e0 ldi r18, 0x01 ; 1
80: 30 e0 ldi r19, 0x00 ; 0
82: 02 c0 rjmp .+4 ; 0x88 <func_module+0x16>
84: 22 0f add r18, r18
86: 33 1f adc r19, r19
88: 9a 95 dec r25
8a: e2 f7 brpl .-8 ; 0x84 <func_module+0x12>
8c: 82 0f add r24, r18
8e: 08 95 ret
00000090 <_exit>:
90: f8 94 cli
00000092 <__stop_program>:
92: ff cf rjmp .-2 ; 0x92 <__stop_program>
Чт окт 19, 2017 18:04:59
Чт окт 19, 2017 18:22:48
Чт окт 19, 2017 18:37:24
вот именно - прочтите условия эксперимента, которые я описал.viiv писал(а):Введено в районе версии 4.5
Чт окт 19, 2017 18:57:19
Сб окт 21, 2017 15:18:08
Сб окт 21, 2017 17:33:32
Сб окт 21, 2017 20:35:12
Сб окт 21, 2017 20:52:15
Вс окт 22, 2017 00:14:16
#define UCSRC _SFR_IO8(0x003)
#define UCPOL 0
#define UCSZ0 1
#define UCSZ1 2
#define USBS 3
#define UPM0 4
#define UPM1 5
#define UMSEL0 6
#define UMSEL1 7
Вс окт 22, 2017 09:49:13
Вс окт 22, 2017 09:57:05
Вс окт 22, 2017 10:11:16
Вт окт 24, 2017 18:02:24