[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-libc-dev] [avr-libc-commit] [2319] Added e xperimental function
From: |
Wouter van Gulik |
Subject: |
Re: [avr-libc-dev] [avr-libc-commit] [2319] Added e xperimental function ' void system_tick_i(void) ' . |
Date: |
Fri, 12 Apr 2013 17:11:22 +0200 |
User-agent: |
XS4ALL Webmail |
Mike Rice schreef op 2013-03-31 23:05:
+__SREG__ = 0x3f
+__tmp_reg__ = 0
+__zero_reg__ = 1
+
+ .global system_tick_i
+ .type system_tick_i, @function
+system_tick_i:
+ push r1
+ push r0
+ in r0,__SREG__
+ push r0
+ clr __zero_reg__
+ push r24
+ push r25
+ push r26
+ push r27
+ lds r24,__system_time
+ lds r25,__system_time+1
+ lds r26,__system_time+2
+ lds r27,__system_time+3
+ adiw r24,1
+ adc r26,__zero_reg__
+ adc r27,__zero_reg__
+ sts __system_time,r24
+ sts __system_time+1,r25
+ sts __system_time+2,r26
+ sts __system_time+3,r27
+ pop r27
+ pop r26
+ pop r25
+ pop r24
+ pop r0
+ out __SREG__,r0
+ pop r0
+ pop r1
+ ret
+ .size system_tick_i, .-system_tick_i
I came up with this:
push r24
lds r24,__system_time+0
subi r24, (-1)
sts __system_time+0,r24
lds r24,__system_time+1
sbci r24, (-1)
sts __system_time+1,r24
lds r24,__system_time+2
sbci r24, (-1)
sts __system_time+2,r24
lds r24,__system_time+3
sbci r24, (-1)
sts __system_time+3,r24
pop r24
ret
Which is much less code, less stack, less cpu cycles.
The last two are nice for an interrupt.
HTH
Wouter
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [avr-libc-dev] [avr-libc-commit] [2319] Added e xperimental function ' void system_tick_i(void) ' .,
Wouter van Gulik <=