I have a quick question. Can main() freely use r2–r17 and r28–r29 and not worry about saving them or having a called function clobber them?
It appears that avr-gcc 4.8.1 believes that:
avr-gcc-4.8.1 -g -Wall -mmcu=attiny24 -nostartfiles -nodefaultlibs -Os \ -DAVR -DOSCCAL_VAL=`awk '/^001 /{print $2}' osccal.txt` -x c -S ../main.c main: .......... .......... .......... .. ldi r24,lo8(127) .......... .......... .......... .. out 0x1b,r24 .......... .......... ....4..... .. ldi r24,lo8(-33) .......... .......... .......... .. mov r12,r24 .......... .......... ....4..... .. ldi r25,lo8(-33) .......... ..2....... .......... .. mov r11,r25 .......... ..2....... .....5.... .. ldi r18,lo8(16) .......... .12....... .......... .. mov r10,r18 .......... .12.....8. .......... .. ldi r19,lo8(7) .......... 012....... .......... .. mov r9,r19 .......... 012......9 .......... .. clr r8 .........9 012....... .......... .. dec r8 ........89 012....... .......... .. ldi r16,0 ........89 012....... .......... .. ldi r17,0 ........89 012...6... .......... .. ldi r20,lo8(24) ........89 012...67.. .......... .. mov r7,r20 ........89 012...67.. 0......... .. ldi r21,lo8(13) .......789 012...67.. .......... .. mov r6,r21 .......789 012...67.. .1........ .. ldi r22,lo8(-97) ......6789 012...67.. .......... .. mov r14,r22 ......6789 012...67.. ..2....... .. ldi r22,lo8(110) ......6789 012.4.67.. .......... .. mov r15,r22 ......6789 012.4.67.. ..2....... .. .L2: ......6789 012.4567.. .......... .. clr __zero_reg__ ......6789 012.4567.. .......... .. out __SP_L__,r11 .1....6789 012.4567.. .......... .. out 0x1a,r10 .1....6789 012.4567.. .......... .. out 0x17,r9 .1....6789 012.4567.. .......... .. out 0x36,r8 .1....6789 012.4567.. .......... .. rcall test_flash .1....6789 012.4567.. .......... .. sbi 0x19,4 .1....6789 012.4567.. .......... .. ldi r24,lo8(1) .1....6789 012.4567.. .......... .. rcall initialize_hardware .1....6789 012.4567.. ....4..... .. rcall wait_for_serial_idle .1....6789 012.4567.. .......... .. mov r13,__zero_reg__ .1....6789 012.4567.. .......... .. .L3: ......6789 01234567.. .......... .. movw r24,r16 ......6789 01234567.. .......... .. .L4: ......6789 01234567.. ....45.... .. movw r28,r24 ......6789 01234567.. ....45.... .. subi r28,-23 ......6789 01234567.. ........89 .. sbci r29,111 ......6789 01234567.. ........89 .. rcall receive_serial_nibble ......6789 01234567.. ........89 .. clr __zero_reg__ ......6789 01234567.. ........89 .. out __SP_L__,r12 ......6789 01234567.. ........89 .. ldi r24,0 ......6789 01234567.. ........89 .. rcall initialize_hardware ......6789 01234567.. ....4...89 .. rcall receive_serial_nibble ......6789 01234567.. ........89 .. sbrs r24,5 ......6789 01234567.. ....4...89 .. rjmp .L5 ......6789 01234567.. ....4...89 .. sbrs r24,4 ......6789 01234567.. ....4..... .. rjmp .L3 ......6789 01234567.. .......... .. rjmp .L2 ......6789 012.4567.. .......... .. .L5: ......6789 01234567.. ....4...89 .. cpi r28,-71 ......6789 01234567.. ....4...89 .. sbci r29,72 ......6789 01234567.. ....4....9 .. brne .L8 ......6789 01234567.. ....4..... .. wdr ......6789 01234567.. ....4..... .. out 0x21,r7 ......6789 01234567.. ....4..... .. out 0x21,r6 ......6789 01234567.. ....4..... .. cbi 0x1b,4 ......6789 01234567.. ....4..... .. com r13 ......6789 01234567.. ....4..... .. out 0x36,r13 ......6789 01234567.. ....4..... .. .L8: ......6789 012.4567.. ....4..... .. movw r28,r14 ......6789 012.4567.. ....4..... .. andi r24,lo8(15) ......6789 012.4567.. ....4...89 .. mov r13,r24 ......6789 012.4567.. ....4...89 .. rcall receive_serial_nibble ......6789 01234567.. ........89 .. rcall test_flash ......6789 01234567.. ........89 .. rcall receive_serial_nibble ......6789 01234567.. ........89 .. sbrs r24,4 ......6789 01234567.. ....4...89 .. rjmp .L9 ......6789 01234567.. ....4...89 .. sbrs r24,5 ......6789 01234567.. ....4..... .. rjmp .L3 ......6789 01234567.. .......... .. rjmp .L2 ......6789 012.4567.. .......... .. .L9: ......6789 01234567.. ....4...89 .. swap r24 ......6789 01234567.. ....4...89 .. andi r24,lo8(-16) ......6789 01234567.. ....4...89 .. or r13,r24 ......6789 01234567.. ....4...89 .. movw r24,r28 ......6789 01234567.. ........89 .. subi r24,-3 ......6789 01234567.. ....45.... .. sbci r25,-75 ......6789 01234567.. ....45.... .. rjmp .L4 ......6789 01234567.. ....45.... ..
I just wanted to make sure. Thanks for your help!