avr-gcc-list
[Top][All Lists]
Advanced

[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     */



reply via email to

[Prev in Thread] Current Thread [Next in Thread]