|
| From: | Bruce D. Lightner |
| Subject: | Re: [avr-gcc-list] inline assembler problem |
| Date: | Tue, 20 Jan 2004 10:34:59 -0800 |
| User-agent: | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 |
Matte,
Since some of you wanted to view the whole testprogram in order to help me track the error I've struggeling with, I post it here. The compilerI'm using is still the avr-gcc-3.3.1. The functions in the code below I did implement in order to have some simple functions to learn from.#include <inttypes.h> #define PORT_A 0x1B #define DDR_A 0x1A #define PIN_A 0x19 uint8_t read(const uint8_t adr) { uint8_t p; asm volatile ("in %0, %1" : "=r" (p) : "I" (adr)); return p; } uint8_t fastSBI(const uint8_t port, const uint8_t bit) { asm volatile("sbi %0, %1" : : "I" (port), "I" (bit)); } int main(void) { uint8_t port_a = PORT_A; uint8_t ddr_a = DDR_A; uint8_t pin = 3; uint8_t data;data = read(port_a);fastSBI(ddr_a, pin);return 0;}
This works...
#include <inttypes.h>
#define PORT_A 0x1B
#define DDR_A 0x1A
#define PIN_A 0x19
#define read(adr) ({ \
uint8_t p; \
asm volatile ("in %0, %1" \
: "=r" (p) : "I" ((uint8_t)(adr))); \
p; \
})
#define fastSBI(port, bit) ({ \
asm volatile("sbi %0, %1" \
: : "I" ((uint8_t)(port)), "I" ((uint8_t)(bit))); \
})
int main(void) {
uint8_t data;
data = read(PORT_A);
fastSBI(DDR_A, 3);
return 0;
}
Best regards,
Bruce
--
Bruce D. Lightner
Lightner Engineering
La Jolla, California
Voice: +1-858-551-4011
FAX: +1-858-551-0777
Email: address@hidden
URL: http://www.lightner.net/lightner/bruce/
| [Prev in Thread] | Current Thread | [Next in Thread] |