Столкнулся вот с чем:
CODE
#include <avr/io.h>
#include <avr/pgmspace.h>
static PROGMEM char BCD[3]={100,10,1};
volatile int ff ;
int main (void)
{
for(uint8_t j=0; j<3;j++)
{
ff += pgm_read_byte(&(BCD[j]));
}
return 0;
}
Листинг
CODE
int main (void)
{
for(uint8_t j=0; j<3;j++)
{
ff += pgm_read_byte(&(BCD[j]));
70: 80 91 08 01 lds r24, 0x0108
74: 90 91 09 01 lds r25, 0x0109
78: e4 e3 ldi r30, 0x34 ; 52
7a: f0 e0 ldi r31, 0x00 ; 0
7c: 24 91 lpm r18, Z+
7e: 82 0f add r24, r18
80: 91 1d adc r25, r1
82: 90 93 09 01 sts 0x0109, r25
86: 80 93 08 01 sts 0x0108, r24
8a: 80 91 08 01 lds r24, 0x0108
8e: 90 91 09 01 lds r25, 0x0109
92: 31 96 adiw r30, 0x01 ; 1
94: 24 91 lpm r18, Z+
96: 82 0f add r24, r18
98: 91 1d adc r25, r1
9a: 90 93 09 01 sts 0x0109, r25
9e: 80 93 08 01 sts 0x0108, r24
a2: 80 91 08 01 lds r24, 0x0108
a6: 90 91 09 01 lds r25, 0x0109
aa: 31 96 adiw r30, 0x01 ; 1
ac: e4 91 lpm r30, Z+
ae: 8e 0f add r24, r30
b0: 91 1d adc r25, r1
b2: 90 93 09 01 sts 0x0109, r25
b6: 80 93 08 01 sts 0x0108, r24
}
return 0;
}
ba: 80 e0 ldi r24, 0x00 ; 0
bc: 90 e0 ldi r25, 0x00 ; 0
be: 08 95 ret
{
for(uint8_t j=0; j<3;j++)
{
ff += pgm_read_byte(&(BCD[j]));
70: 80 91 08 01 lds r24, 0x0108
74: 90 91 09 01 lds r25, 0x0109
78: e4 e3 ldi r30, 0x34 ; 52
7a: f0 e0 ldi r31, 0x00 ; 0
7c: 24 91 lpm r18, Z+
7e: 82 0f add r24, r18
80: 91 1d adc r25, r1
82: 90 93 09 01 sts 0x0109, r25
86: 80 93 08 01 sts 0x0108, r24
8a: 80 91 08 01 lds r24, 0x0108
8e: 90 91 09 01 lds r25, 0x0109
92: 31 96 adiw r30, 0x01 ; 1
94: 24 91 lpm r18, Z+
96: 82 0f add r24, r18
98: 91 1d adc r25, r1
9a: 90 93 09 01 sts 0x0109, r25
9e: 80 93 08 01 sts 0x0108, r24
a2: 80 91 08 01 lds r24, 0x0108
a6: 90 91 09 01 lds r25, 0x0109
aa: 31 96 adiw r30, 0x01 ; 1
ac: e4 91 lpm r30, Z+
ae: 8e 0f add r24, r30
b0: 91 1d adc r25, r1
b2: 90 93 09 01 sts 0x0109, r25
b6: 80 93 08 01 sts 0x0108, r24
}
return 0;
}
ba: 80 e0 ldi r24, 0x00 ; 0
bc: 90 e0 ldi r25, 0x00 ; 0
be: 08 95 ret
Ужос навеяло использование "не в тему" инструкций lpm r30, Z+
При проверке в дизасмом аврстудии все инструкции lpm были корректными, без постинкремента Z+
Вывод - сабж. Спасибо за внимание!