Есть в ATmega8.pdf табличка под названием
Register Summary
и в ней строчка:
0x3F (0x5F) SREG I T H S V N Z C 7
Что значит 0x3F (0x5F)?
SREG имеет вроде как один адрес в I/O пространстве, или еше какой-нибудь?
Другой вопрос. Убиение сторожевой собаки, сделанное inline макросом
из заголовочного файла, в дизасебле выглядит так:
67a: 81 bd out 0x21, r24 ; 33
67c: 11 bc out 0x21, r1 ; 33
67e: 0f be out 0x3f, r0 ; 63
А то же самое, но сделаное следующим кодом (в main())
WDTCR |= (1<<WDCE) | (1<<WDE);//и тут же меняем WDE на 1 и в следующие 4 клока меняем WDE
WDTCR &= ~(1<<WDE);// -т.е. WDE устанавливаем в 0 , запрещаем дог
производит такой код:
716: a1 e4 ldi r26, 0x41 ; 65
718: b0 e0 ldi r27, 0x00 ; 0
71a: e1 e4 ldi r30, 0x41 ; 65
71c: f0 e0 ldi r31, 0x00 ; 0
71e: 80 81 ld r24, Z
720: 88 61 ori r24, 0x18 ; 24
722: 8c 93 st X, r24
724: a1 e4 ldi r26, 0x41 ; 65
726: b0 e0 ldi r27, 0x00 ; 0
728: e1 e4 ldi r30, 0x41 ; 65
72a: f0 e0 ldi r31, 0x00 ; 0
72c: 80 81 ld r24, Z
72e: 87 7f andi r24, 0xF7 ; 247
730: 8c 93 st X, r24
Как видно, длина кода слегка не одинаковая. Но непонятно другое, почему тут используется
0x41 вместо 0x21? Из таблицы известно что 0x21 (0x41) это WDTCR. Так всеже 0x21 или 0x41?