[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-gcc-list] How to do multi-line assembler macros?
From: |
Oleksandr Redchuk |
Subject: |
[avr-gcc-list] How to do multi-line assembler macros? |
Date: |
Tue, 9 Sep 2003 22:22:55 +0300 (EDT) |
Hi, Brian Dean!
9-Sep-03 11:43 you wrote:
BD> I'm writing some assembler routines where the use of C #define macros
BD> would make my life a lot easier. I need to write a macro of the form:
[...]
BD> There are lots of servos, so I'd like to write a macro like this:
BD> #define RESET_SERVO(servo) \
BD> lds r##servo, servo_##servo ;\
BD> tst r##servo ;\
BD> brne servos_reset_##servo##_over_1 ;\
BD> cbi SERVO_##servo##_PORT, SERVO_##servo##_BIT; \
BD> rjmp servos_reset_##servo##_over; \
BD> servos_reset_##servo##_over_1: \
BD> sbi SERVO_##servo##_PORT, SERVO_##servo##_BIT; \
BD> servos_reset_##servo##_over:
Why do you not use "native" assembler macro capabilities?
(and local labels inside macro)
============= Source
.set SERVO_PORT_0, PORTD
.set SERVO_PORT_1, PORTD
.set SERVO_BIT_0, 3
.set SERVO_BIT_1, 5
.macro res_serv chan
lds r\chan, servo_\chan
tst r\chan
brne 1f
cbi SERVO_PORT_\chan, SERVO_BIT_\chan
rjmp 2f
1:
sbi SERVO_PORT_\chan, SERVO_BIT_\chan
2:
.endm
.section .bss
servo_0: .ds 1
servo_1: .ds 1
.section .text
res_serv 0
res_serv 1
========== listing
102 .section .text
103 res_serv 0
103 0000 0090 0000 > lds r0,servo_0
103 0004 0020 > tst r0
103 0006 11F4 > brne 1f
103 0008 9398 > cbi SERVO_PORT_0,SERVO_BIT_0
103 000a 01C0 > rjmp 2f
103 > 1:
103 >
103 000c 939A > sbi SERVO_PORT_0,SERVO_BIT_0
103 > 2:
103 >
104 res_serv 1
104 000e 1090 0000 > lds r1,servo_1
104 0012 1120 > tst r1
104 0014 11F4 > brne 1f
104 0016 9598 > cbi SERVO_PORT_1,SERVO_BIT_1
104 0018 01C0 > rjmp 2f
104 > 1:
104 >
104 001a 959A > sbi SERVO_PORT_1,SERVO_BIT_1
104 > 2:
104 >
Wbr,
--
/* Oleksandr Redchuk, Brovary, Ukraine */
/* real '\x40' real '\x2E' kiev '\x2E' ua */
- Re: [avr-gcc-list] How to do multi-line assembler macros?, (continued)
- Re: [avr-gcc-list] How to do multi-line assembler macros?, Brian Dean, 2003/09/09
- Re: [avr-gcc-list] How to do multi-line assembler macros?, Joerg Wunsch, 2003/09/10
- [avr-gcc-list] Handling interrupts in assembler - how?, Michal Vanka, 2003/09/17
- Re: [avr-gcc-list] Handling interrupts in assembler - how?, Artur Lipowski, 2003/09/17
- Re: [avr-gcc-list] Handling interrupts in assembler - how?, Michal Vanka, 2003/09/17
- Re: [avr-gcc-list] Handling interrupts in assembler - how?, Artur Lipowski, 2003/09/17
- Re: [avr-gcc-list] Handling interrupts in assembler - how?, Michal Vanka, 2003/09/17
- Re: [avr-gcc-list] Handling interrupts in assembler - how?, Artur Lipowski, 2003/09/17
- Re: [avr-gcc-list] Handling interrupts in assembler - how?, Julius Luukko, 2003/09/17
[avr-gcc-list] How to do multi-line assembler macros?,
Oleksandr Redchuk <=
Re: [avr-gcc-list] How to do multi-line assembler macros?, E. Weddington, 2003/09/09
Re: [avr-gcc-list] How to do multi-line assembler macros?, E. Weddington, 2003/09/10
Re: [avr-gcc-list] How to do multi-line assembler macros?, E. Weddington, 2003/09/10