writing a simple for loop test...
attiny1614 (new tinyavr1 series)
toolchain = avr8-gnu-toolchain-3.6.2.1759-linux_x86_64
compile options tried... (with -Os)
OPT='-D__AVR_ATtiny1614__ -D__AVR_DEVICE_NAME__=attiny1614 -D__AVR_DEV_LIB_NAME__=tn1614 -DF_CPU=12000000UL -Wall -Wno-volatile-register-var -gdwarf-2 -std=gnu99 -ffreestanding -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -finline-limit=3 -fno-inline-small-functions -ffunction-sections -fdata-sections -mcall-prologues -flto'
OPT='-D__AVR_ATtiny1614__ -D__AVR_DEVICE_NAME__=attiny1614 -D__AVR_DEV_LIB_NAME__=tn1614 -DF_CPU=12000000UL -Wall -gdwarf-2 -std=gnu99 -ffreestanding -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums'
This is my code...
while(1) { wdt_reset(); //test function U8 ary1[] = {0x01,0x02,0x03,0x04,0x05}; //5 bytes glcd_clear(); glcd_pos_chr(0,0); gui_Hex(ary1[0]); gui_Hex(ary1[1]); gui_Hex(ary1[2]); gui_Hex(ary1[3]); gui_Hex(ary1[4]); //loop not working glcd_pos_chr(1,0); for(U8 i=0; i<5; i++) { U8 x = ary1[i]; gui_Hex(x); glcd_num(i,0); glcd_char(' '); } //loop not working glcd_pos_chr(2,0); for(U8 i=0; i<5; i++) { U8 x = ary1[i]; glcd_num(x,0); glcd_char(' '); } _delay_ms(3000); wdt_reset(); }
The loops dont work, they output 0xFF, here is the assembly...
while(1) { wdt_reset(); 92e: a8 95 wdr //test function U8 ary1[] = {0x01,0x02,0x03,0x04,0x05}; //5 bytes 930: 85 e0 ldi r24, 0x05 ; 5 932: e2 e3 ldi r30, 0x32 ; 50 934: fa e8 ldi r31, 0x8A ; 138 936: de 01 movw r26, r28 938: 11 96 adiw r26, 0x01 ; 1 93a: 01 90 ld r0, Z+ 93c: 0d 92 st X+, r0 93e: 8a 95 dec r24 940: e1 f7 brne .-8 ; 0x93a <main+0xaa> glcd_clear(); 942: 0e 94 3e 04 call 0x87c ; 0x87c <glcd_clear> glcd_pos_chr(0,0); 946: 60 e0 ldi r22, 0x00 ; 0 948: 80 e0 ldi r24, 0x00 ; 0 94a: 0e 94 09 04 call 0x812 ; 0x812 <glcd_pos> gui_Hex(ary1[0]); 94e: 81 e0 ldi r24, 0x01 ; 1 950: 0e 94 bd 01 call 0x37a ; 0x37a <gui_Hex> gui_Hex(ary1[1]); 954: 82 e0 ldi r24, 0x02 ; 2 956: 0e 94 bd 01 call 0x37a ; 0x37a <gui_Hex> gui_Hex(ary1[2]); 95a: 83 e0 ldi r24, 0x03 ; 3 95c: 0e 94 bd 01 call 0x37a ; 0x37a <gui_Hex> gui_Hex(ary1[3]); 960: 84 e0 ldi r24, 0x04 ; 4 962: 0e 94 bd 01 call 0x37a ; 0x37a <gui_Hex> gui_Hex(ary1[4]); 966: 85 e0 ldi r24, 0x05 ; 5 968: 0e 94 bd 01 call 0x37a ; 0x37a <gui_Hex> //loop not working glcd_pos_chr(1,0); 96c: 60 e0 ldi r22, 0x00 ; 0 96e: 81 e0 ldi r24, 0x01 ; 1 970: 0e 94 09 04 call 0x812 ; 0x812 <glcd_pos> 974: 8e 01 movw r16, r28 976: 0f 5f subi r16, 0xFF ; 255 978: 1f 4f sbci r17, 0xFF ; 255 97a: 78 01 movw r14, r16 97c: 41 2c mov r4, r1 97e: 51 2c mov r5, r1 980: 32 01 movw r6, r4 for(U8 i=0; i<5; i++) { U8 x = ary1[i]; gui_Hex(x); glcd_num(i,0); glcd_char(' '); 982: f7 01 movw r30, r14 984: 81 91 ld r24, Z+ 986: 7f 01 movw r14, r30 988: 0e 94 bd 01 call 0x37a ; 0x37a <gui_Hex> 98c: 40 e0 ldi r20, 0x00 ; 0 98e: c3 01 movw r24, r6 990: b2 01 movw r22, r4 992: 0e 94 af 02 call 0x55e ; 0x55e <glcd_num> 996: 80 e2 ldi r24, 0x20 ; 32 998: 0e 94 72 02 call 0x4e4 ; 0x4e4 <glcd_char> 99c: ff ef ldi r31, 0xFF ; 255 99e: 4f 1a sub r4, r31 9a0: 5f 0a sbc r5, r31 9a2: 6f 0a sbc r6, r31 9a4: 7f 0a sbc r7, r31 gui_Hex(ary1[3]); gui_Hex(ary1[4]); //loop not working glcd_pos_chr(1,0); for(U8 i=0; i<5; i++) 9a6: 85 e0 ldi r24, 0x05 ; 5 9a8: 48 16 cp r4, r24 9aa: 51 04 cpc r5, r1 9ac: 61 04 cpc r6, r1 9ae: 71 04 cpc r7, r1 9b0: 41 f7 brne .-48 ; 0x982 <main+0xf2> U8 x = ary1[i]; gui_Hex(x); glcd_num(i,0); glcd_char(' '); } //loop not working glcd_pos_chr(2,0); 9b2: 60 e0 ldi r22, 0x00 ; 0 9b4: 82 e0 ldi r24, 0x02 ; 2 9b6: 0e 94 09 04 call 0x812 ; 0x812 <glcd_pos> for(U8 i=0; i<5; i++) { U8 x = ary1[i]; 9ba: f8 01 movw r30, r16 9bc: 61 91 ld r22, Z+ 9be: 8f 01 movw r16, r30 glcd_num(x,0); glcd_char(' '); 9c0: 70 e0 ldi r23, 0x00 ; 0 9c2: 80 e0 ldi r24, 0x00 ; 0 9c4: 90 e0 ldi r25, 0x00 ; 0 9c6: 40 e0 ldi r20, 0x00 ; 0 9c8: 0e 94 af 02 call 0x55e ; 0x55e <glcd_num> 9cc: 80 e2 ldi r24, 0x20 ; 32 9ce: 0e 94 72 02 call 0x4e4 ; 0x4e4 <glcd_char> gui_Hex(x); glcd_num(i,0); glcd_char(' '); } //loop not working glcd_pos_chr(2,0); for(U8 i=0; i<5; i++) 9d2: c0 16 cp r12, r16 9d4: d1 06 cpc r13, r17 9d6: 89 f7 brne .-30 ; 0x9ba <main+0x12a> 9d8: 80 e3 ldi r24, 0x30 ; 48 9da: 95 e7 ldi r25, 0x75 ; 117 9dc: f5 01 movw r30, r10 9de: 31 97 sbiw r30, 0x01 ; 1 9e0: f1 f7 brne .-4 ; 0x9de <main+0x14e> 9e2: 01 97 sbiw r24, 0x01 ; 1 9e4: d9 f7 brne .-10 ; 0x9dc <main+0x14c> U8 x = ary1[i]; glcd_num(x,0); glcd_char(' '); } _delay_ms(3000); wdt_reset(); 9e6: a8 95 wdr }
output when I directly index is 01 02 03 04 05 ... example gui_Hex(ary1[0]);
but the array loops output... FF FF FF FF FF ... example for(U8 i=0; i<5; i++){ gui_Hex(ary1[i]); } //U8 is defined as uint8_t
any suggestions as to what is going on would be appreciated.