|
From: | E. Weddington |
Subject: | Re: [avr-gcc-list] efficiency of assigning bits |
Date: | Thu, 17 Mar 2005 15:22:24 -0700 |
User-agent: | Mozilla Thunderbird 0.7.3 (Windows/20040803) |
Jamie Morken wrote:
To clear bit 0 and set bits 1,2,3 without disturbing the other bits: PORTD = (PORTD & ~(_BV(0))) | (_BV(1)|_BV(2)|_BV(3));Thanks that is working!
Great! (*phew* I didn't test it beforehand.)
I noticed this in the avr-libc usermanual FAQ: "http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_intpromote" So would it be a good idea (for saving uC time) to convert that above line to this: PORTD = (PORTD & (unsigned char)~(_BV(0))) | (unsigned char)_BV(1)|_BV(2)|_BV(3));
True. Technically one should do that. I wrote the above line rather quickly. One could also use the <stdint.h> header and do this: PORTD = (PORTD & (uint8_t)~(_BV(0))) | (uint8_t)(_BV(1)|_BV(2)|_BV(3))); At least the type names are a little shorter. Note the extra parentheses around the 3 bits on the far right. Eric
[Prev in Thread] | Current Thread | [Next in Thread] |